ESP32的uart串口事件接收数据

发布时间:2026/6/1 2:51:58

ESP32的uart串口事件接收数据 #include driver/uart.h #define DMA_BUF_SIZE 256 static QueueHandle_t uart_event_queue NULL; void uart_event_task(void *pvParameters) { uart_event_t event; uint8_t data[DMA_BUF_SIZE]; while (1) { // 等待UART事件 if (xQueueReceive(uart_event_queue, event, portMAX_DELAY)) { ESP_LOGI(TAG, UART 事件类型: %d, event.type); // 处理不同类型的事件 switch (event.type) { case UART_DATA: ESP_LOGI(TAG, 接收到数据长度: %d, event.size); uart_read_bytes(UART_NUM_0, data, event.size, portMAX_DELAY); break; case UART_FIFO_OVF: ESP_LOGW(TAG, UART FIFO溢出); uart_flush_input(UART_NUM_0); xQueueReset(uart_event_queue); break; case UART_BUFFER_FULL: ESP_LOGW(TAG, UART RX缓冲区满); uart_flush_input(UART_NUM_0); xQueueReset(uart_event_queue); break; default: ESP_LOGW(TAG, 其他UART事件: %d, event.type); break; } } } } void app_main(void) { // 1. 串口配置 uart_config_t uart_cfg { .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, }; // 2. 设置参数 引脚 uart_param_config(UART_NUM_0, uart_cfg); uart_set_pin(UART_NUM_0, 17, 16, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); // 3. 安装UART驱动 uart_driver_install( UART_NUM_0, DMA_BUF_SIZE, // RX 缓冲区 DMA_BUF_SIZE, // TX 缓冲区 10, // 事件队列深度 uart_event_queue, // 事件队列 0 // 中断标志 ); // 4. 创建事件处理任务 xTaskCreate(uart_event_task, uart_event_task, 4096, NULL, 5, NULL); ESP_LOGI(TAG, UART 事件任务 初始化完成); while (1) { vTaskDelay(1000); } }

相关新闻