NUCLEO-G070 ve ESP32-DevKitC IoT Projesi Yardım
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?
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.