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

David.xu
Posts: 6
Joined: Thu Sep 02, 2021 8:52 am

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

Postby David.xu » Mon Nov 01, 2021 8:29 am

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

ESP_Yake
Posts: 109
Joined: Mon Mar 06, 2017 12:23 pm

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

Postby ESP_Yake » Tue Nov 02, 2021 2:53 am

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

David.xu
Posts: 6
Joined: Thu Sep 02, 2021 8:52 am

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

Postby David.xu » Tue Nov 02, 2021 3:32 am

感谢回复,我是在以下函数中处理接收到的数据,
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

David.xu
Posts: 6
Joined: Thu Sep 02, 2021 8:52 am

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

Postby David.xu » Tue Nov 02, 2021 6:09 am

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

Who is online

Users browsing this forum: No registered users and 40 guests