NUCLEO-G070 ve ESP32-DevKitC IoT Projesi Yardım

Çözüldü263 görüntülenmeSTMicroelectronicsstm32

NUCLEO-G070 ve ESP32-DevKitC IoT Projesi Yardım

Empastore üzerinden aldığım NUCLEO-G070 ve ESP32-DevKitC kartlarını kullanarak bir IoT projesi yapmaya çalışıyorum.

ESP32-WROOM-32D modülünü UART üzerinden AT komutları ile kontrol etmeyi planlıyorum. Modülden gelen cevapları kontrol etmem gerekiyor (IP adresi gibi). Fakat modülden gelen cevapların uzunluğu bilemediğim için HAL_UART_Receive veya HAL_UART_Receive_IT fonksiyonnlarını kullanamıyorum. Çünkü her iki fonksiyonda da alınacak verinin uzunluğunun belirtilmesi gerekiyor.

Bu konuda yardımcı olabilir misiniz?

Soru yeni cevaplara kapalıdır.
En iyi cevap olarak seçildi
0

Merhaba,

Modülden gelen veriyi kontrol etmek için HAL_UART_Receive_IT fonksiyonunu kullanabilirsiniz.

Kodunuzun içinde HAL_UART_Receive_IT fonksiyonunu kullanarak UART  kesmesini çalıştırdıktan sonra modülden bir mesaj geldiği zaman HAL_UART_RxCpltCallback fonksiyonu çağrılacaktır. İzlemeniz gereken adımlar özetle şu şekilde olacaktır:

  • HAL_UART_Receive_IT fonksiyonunda modül ile bağlantı için kullandığınız UART’ı seçmelisiniz (uart1, uart2,…)
  • HAL_UART_Receive_IT fonksiyonunu her seferinde 1 byte veri okuyacak şekilde ayarlamalısınız.
  • HAL_UART_RxCpltCallback içinde her 1 byte’lık veriden sonra HAL_UART_Receive_IT ile UART kesmesini yeniden çalıştırmalısınız

Aşağıdaki basit örneği inceleyebilirsiniz.

uint8_t rxbuff [128];
uint8_t rxdata;
uint8_t i = 0;
 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
               rxbuff[i++] = rxdata;
               if(i == 128)  i = 0;
               HAL_UART_Receive_IT(&huart1, &rxdata, 1);
}

Alacağınız mesajın boyutu çok yüksek ise UART_DMA ve IDLE_LINE_INTERRUPT da diğer bir alternatif seçenek olacaktır.

En iyi cevap olarak seçildi
0
1 cevaptan 1'ini inceliyorsun, tüm cevapları görmek için buraya tıklayın.