Skip to content

Latest commit

 

History

History
 
 

22_UART0_TX_RX_QUEUE

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

22_UART0_TX_RX_QUEUE

例程简介

ESP32的 UART 硬件,用于UART串口通信。

使用 FreeRTOSTask,创建三个任务:

  1. led_task ,控制LED闪烁

  2. uart_tx_task ,配置uart0-txrx。

  3. uart_rx_task ,uart0-rx接收数据,使用队列方式去接收数据。

因为使用默认的UART0端口,所以并不需要额外的硬件连接。(开发板的UART0CH340C连接,可从终端或者串口助手上查看)

Demo建议使用串口调试助手,因为使用终端需要调整为中文输入法整串发送,用英文输入法发送每次几乎只能发送一两个字节,影响演示效果。

使用 uart_config.c.h 驱动模块,来对ESP32的 UART 进行配置。进行UART0串口通信操作。

运行现象

  • LED闪烁。

  • 运行串口调试助手,波特率115200,打开开发板端口。发送普通的消息,如"uart, Hello!",观察提示信息。

学习内容

  1. ESP32的UART配置及用法。

  2. 使用队列的方式,接收UART的数据。

详见乐鑫在线文档: https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-reference/peripherals/uart.html

关键函数

// 配置uartx,无硬件流控(uartx、波特率、输出端口、队列)
void uart_init_no_hwfc(uart_port_t uart_num, uint32_t baud_rate, int tx_io_num, int rx_io_num, int queue_size, QueueHandle_t *uart_queue);

// uart发送字符串
int uart_sendData(uart_port_t uart_num, const char* data);

// uart接收
int uart_read_bytes(uart_port_t uart_num, void* buf, uint32_t length, TickType_t ticks_to_wait);

// uart事件结构体
typedef struct {
    uart_event_type_t type; /*!< UART event type */
    size_t size;            /*!< UART data size for UART_DATA event*/
    bool timeout_flag;      /*!< UART data read timeout flag for UART_DATA event (no new data received during configured RX TOUT)*/
                            /*!< If the event is caused by FIFO-full interrupt, then there will be no event with the timeout flag before the next byte coming.*/
} uart_event_t;

注意事项

  • 建议用串口调试助手测试,终端会将输入拆分为一个一个字节发送。

  • 关于ESP32的UART,还有个很有意思的功能 - 模式检测,见下个Demo的介绍。