2020年2月29日土曜日

ESP32でのシリアル受信処理が最後まで完了しない対応


fix for "realtime uart" in esp32-hal-uart.c #1674

に対応方法があった。


 1.シリアル受信で受信データが途中までしか取り出せない
 これは、ESP32の受信関数の設定の問題
 ....\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-uart.c
 のファイル内の
 void uartEnableInterrupt(uart_t* uart)
{
    UART_MUTEX_LOCK();
    uart->dev->conf1.rxfifo_full_thrhd = 1;  //112;   ←ここ!
    uart->dev->conf1.rx_tout_thrhd = 2;
    uart->dev->conf1.rx_tout_en = 1;
    uart->dev->int_ena.rxfifo_full = 1;
    uart->dev->int_ena.frm_err = 1;
    uart->dev->int_ena.rxfifo_tout = 1;
    uart->dev->int_clr.val = 0xffffffff;

    esp_intr_alloc(UART_INTR_SOURCE(uart->num), (int)ESP_INTR_FLAG_IRAM, _uart_isr, NULL, &uart->intr_handle);
    UART_MUTEX_UNLOCK();
}

uart->dev->conf1.rxfifo_full_thrhd = 1;  //112;   ←ここ!
を1にすればよい。ここに設定した数字までデータがたまらないとSerial.available()の戻り値が応答しない

0 件のコメント:

コメントを投稿