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

Çözüldü391 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.
Egemen En iyi cevap olarak seçildi Haziran 25, 2021
2

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.

Egemen En iyi cevap olarak seçildi Haziran 25, 2021
2