03-UART通信
UART通信相关知识
1、设置串口配置
// 定义使用的UART端口为UART_NUM_2,即第三个UART端口
const uart_port_t uart_num = UART_NUM_2;
// 初始化并配置UART的参数
uart_config_t uart_config = {
.baud_rate = 115200, // 设置波特率为115200,这是数据传输速率的一种度量
.data_bits = UART_DATA_8_BITS, // 设置数据位为8位,这是每个数据包中的位数
.parity = UART_PARITY_DISABLE, // 禁用奇偶校验,用于错误检测
.stop_bits = UART_STOP_BITS_1, // 设置停止位为1,停止位用于标识每个数据包的结束
.flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS, // 启用CTS/RTS硬件流控制,用于调节数据传输速率,防止数据丢失
.rx_flow_ctrl_thresh = 122, // 设置接收流控制阈值为122,这与硬件流控制相关
};
// 使用上述配置参数配置UART端口
// ESP_ERROR_CHECK是一个宏,用于检查函数返回的错误码,并在出错时终止程序
ESP_ERROR_CHECK(uart_param_config(uart_num, &uart_config));c也可以使用函数单个配置每个参数,参考链接如下:https://duruofu.github.io/ESP32-Guide/docs/guide/04.%E5%A4%96%E8%AE%BE%E5%AD%A6%E4%B9%A0/4.1-%E5%9F%BA%E7%A1%80%E5%A4%96%E8%AE%BE/4.1.2-UART/UART%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1.html ↗ 2、分配引脚 通信参数设置完成后,可以配置其他 UART 设备连接的 GPIO 管脚,调用函数 uart_set_pin(),指定配置 Tx、Rx、RTS 和 CTS 信号的 GPIO 管脚编号,如uart_set_pin(UART_NUM_2, 4, 5, 18, 19) 3、安装驱动程序 通信管脚设置完成后,请调用 uart_driver_install() 安装驱动程序并指定以下参数: ● Tx 环形缓冲区的大小 ● Rx 环形缓冲区的大小 ● 事件队列句柄和大小 ● 分配中断的标志 该函数将为 UART 驱动程序分配所需的内部资源
// Setup UART buffered IO with event queue
const int uart_buffer_size = (1024 * 2);
QueueHandle_t uart_queue;
// Install UART driver using an event queue here
ESP_ERROR_CHECK(uart_driver_install(UART_NUM_2, uart_buffer_size,
uart_buffer_size, 10, &uart_queue, 0));
4、发送接收数据
使用函数uart_write_bytes() 和 uart_read_bytes() 分别进行发送数据以及接收数据。两个函数的参数均为(UART_NUM,发送内容首地址/接受缓冲区地址,长度)
5、中断 在新版本的 ESP32 SDK(如 ESP-IDF) 中,开发者不能再直接注册自定义的 UART 中断服务函数(ISR),也就是像旧版本那样使用 uart_isr_register() 来挂接自己的中断处理代码。 UART 驱动提供了一种便利的方法来处理特定的中断,即将中断包装成相应的事件。这些事件定义在 uart_event_type_t 中,FreeRTOS 队列功能可将这些事件报告给用户应用程序。