乐鑫技术交流
直播中

陈静

7年用户 1284经验值
私信 关注
[问答]

用ESP32发送数据,串口最大接收120字节就进入中断了,如何才能接收2048字节的数据?

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

回帖(2)

马健

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

蒲泛粟

2024-6-20 17:20:55
要解决这个问题,您需要确保您已经正确地配置了ESP32的串口接收缓冲区大小。以下是一些建议的步骤:

1. 首先,确保您已经正确地安装了UART驱动。在初始化串口时,使用`uart_driver_install()`函数,并设置`rxfifo_full_thresh`参数为2048。例如:

```c
uart_config_t uart_config = {
    .baud_rate = 115200,
    .data_bits = UART_DATA_8_BITS,
    .parity = UART_PARITY_DISABLE,
    .stop_bits = UART_STOP_BITS_1,
    .flow_ctrl = UART_HW_FLOWCTRL_DISABLE
};
uart_param_config(UART_NUM_1, &uart_config);
uart_driver_install(UART_NUM_1, 2048, 0, 0, NULL, 0);
```

2. 确保您的中断服务函数(ISR)能够处理2048字节的数据。在ISR中,您需要读取UART接收缓冲区中的数据,并将其存储在一个足够大的数组中。例如:

```c
#define UART_BUFFER_SIZE 2048

static uint8_t uart_buffer[UART_BUFFER_SIZE];
static size_t uart_buffer_index = 0;

void IRAM_ATTR uart1_isr_handler(void *arg)
{
    uart_int_clr(UART_NUM_1);
    while (uart_get_buffered_data_len(UART_NUM_1) > 0) {
        uint8_t data = (uint8_t)uart_read_one_char(UART_NUM_1);
        uart_buffer[uart_buffer_index++] = data;
        if (uart_buffer_index >= UART_BUFFER_SIZE) {
            uart_buffer_index = 0; // 如果需要,可以处理数据溢出
        }
    }
}
```

3. 在主程序中,注册并启用UART中断:

```c
void app_main()
{
    // ... 其他初始化代码 ...

    // 注册并启用UART中断
    intr_handle_t handle;
    esp_intr_alloc(ETS_UART_INTR_SOURCE, ESP_INTR_FLAG_LOWMED, &uart1_isr_handler, NULL, &handle);
    uart_intr_enable(UART_NUM_1);
}
```

4. 在中断服务函数之外,您可以检查接收到的数据并进行相应的处理。例如:

```c
void process_received_data()
{
    if (uart_buffer_index > 0) {
        // 处理接收到的数据
        // ...

        // 重置缓冲区索引
        uart_buffer_index = 0;
    }
}
```

5. 定期调用`process_received_data()`函数,以便在适当的时候处理接收到的数据。

通过以上步骤,您应该能够实现一次接收2048字节的数据。如果仍然有问题,请检查您的硬件连接和串口通信参数是否正确。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分