使用的库
"driver/uart.h""esp_log.h""esp_err.h"
初始化
uart_param_config()函数配置uart信息
使用UART0请留意是否被终端占用uart_set_pin()设置GPIO
不用的接口赋值 -1uart_driver_install()设置接受队列,发送与接收缓冲区大小
发送缓冲区可以为0,发送时函数阻塞。若不为零,必须满足缓冲区大小大于等于UART_HW_FIFO_LEN
接收缓冲区大小必须大于等于UART_HW_FIFO_LENuart_set_rx_timeout()设置超时时间
示例
C
void uart1Init()
{
uart_config_t UartConfig = {
.baud_rate = baudrate, /*TODO 自行确认波特率*/
.data_bits = UART_DATA_8_BITS,
.flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS,
//.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.rx_flow_ctrl_thresh = 1,
};
ESP_ERROR_CHECK(uart_param_config(UART_NUM_1, &UartConfig));
uart_set_pin(UART_NUM_1, UART1_TXD, UART1_RXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);/*TODO 自行更换GPIO绑定*/
uart_driver_install(UART_NUM_1, 512, 512, 10, &Uart1Queue, 0);/*TODO 自行更换队列句柄*/
uart_set_rx_timeout(UART_NUM_1,4);
}发送
使用uart_write_bytes()发送数据
示例
C
uart_write_bytes(UART_NUM_1, (const char *)data, length);接收
- 使用
xQueueReceive()接收队列信息,并使用uart_event_t类型变量接住 - 判断信息类型,若为UART_DATA则接收
示例
C
void uart1EventTask()
{
uart_event_t UartEvent;
uint8_t RecvBuf[520];
size_t RecvLen = 0;
while (true) {
if (xQueueReceive(Uart1Queue,&UartEvent,portMAX_DELAY)) {
switch (UartEvent.type) {
case UART_DATA:
uart_get_buffered_data_len(UART_NUM_1,&RecvLen);
if (RecvLen > 0) {
RecvLen = uart_read_bytes(UART_NUM_1,RecvBuf,RecvLen,0);
RecvBuf[RecvLen] = 0;
/*TODO 接收后的动作*/
}
break;
default:
break;
}
}
}
}
Comments 2 条评论
为了和你一起穿越世界的荒芜,
为了和你一起面对死亡的恐怖,
为了目睹真理为了丢掉怯懦,
我与你同行。
为了你我抛弃了我的王国我的秘密,
抛弃了我短暂的黑夜我幽幽的安谧,
抛弃了我浑圆的珍珠和东方的诱惑,
抛弃了我的明镜我的生活我的形象,
抛弃了天堂的花园。
此地外面的灯火再没有凝重的白昼面纱,
再没有我顾盼自己裸体的镜子,
而荒芜被称作时间。
@Julius Ciallo~(∠・ω< )⌒★