Page 1 of 1

[已解决] uart 接收数据长度限制问题

Posted: Mon Nov 01, 2021 8:29 am
by David.xu
请教一个问题,我现在用ESP32发送数据,串口最大接收120字节就进入中断了,我更改了uart_driver_install中.rxfifo_full_thresh = UART_FULL_THRESH_DEFAULT,的值为2048,改完后依旧最大接收120字节进入中断,请问我需要改哪里才能一次接收2048字节的数据。

Re: uart 接收数据长度限制问题

Posted: Tue Nov 02, 2021 2:53 am
by ESP_Yake
改动 UART_FULL_THRESH_DEFAULT 的值是没有意义的,因为 ESP32 的 FIFO 只有128字节,默认在接收到120字节之后会触发中断,自动将数据转存到上层的 Buffer 里面去,因此,你只需要把上层的 buffer 改大即可。 UART 的驱动会自动缓存数据到 buffer的

Re: uart 接收数据长度限制问题

Posted: Tue Nov 02, 2021 3:32 am
by David.xu
感谢回复,我是在以下函数中处理接收到的数据,
static void uartEventTask(void *pvParameters)
{
for (;;)
{
case UART_DATA:
uart_get_buffered_data_len(UART_NUM_2, &length);//先获取数据长度,如何发送1024,length是120
uart_read_bytes(UART_NUM_2, pTempBuf, event.size, portMAX_DELAY);//用这个函数接收数据,pTempBuf的大小为2048
}

}
不知道你所说的上层buffer大小是否是这个?接收数据触发中断后,自动将数据存放至buffer?我以事件的方式处理,每次只能取120字节,我要怎样读完呢?
另外,我在uart_driver_install(UART_NUM_2, BUF_SIZE * 2, BUF_SIZE * 2, 100, &uart2Queue_s, 0);//BUF_SIZE = 1024
这里设置的FIFO 的大小为2048

Re: uart 接收数据长度限制问题

Posted: Tue Nov 02, 2021 6:09 am
by David.xu
已经解决了这个问题,在
recv_length = uart_read_bytes(UART_NUM_2, pTempBuf, BUF_SIZE * 2, 200 / portTICK_RATE_MS);
更改了第三个和第四个参数,第三个参数应该就是你说的上层buffer 的长度,第四个为了及时处理收到了数据,之前是很长的延时,收到数据后,recv_length大于零,就处理,可解决我遇到的这个问题,感谢。