串行通讯是一项重要的功能,通过它不但能实现MCU间的通讯,也可控制哪些可以由串口来控制的设备,如串口控制型的超声波距离采集、串口显示屏、MP3音频播放模块及串口记录仪等。
据介绍对于ESP32-S2-Kaluga-1开发板的UART来讲是可以定义在任何端口使用的,为此可使用USB-TTL按如下方式来连接开发板:
USB-TTL 开发板
RX GPIO4
TX GPIO5
GND GND
为实现串口的数据收发处理,需有3部分的内容:
1)头文件及相关变量
所涉及的头文件如下:
#include "driver/uart.h"
所涉及的变量为:
#define UART_TXD (4)
#define UART_RXD (5)
#define UART_RTS (UART_PIN_NO_CHANGE)
#define UART_CTS (UART_PIN_NO_CHANGE)
#define UART_PORT_NUM (1)
#define UART_BAUD_RATE (115200)
#define UART_BUF_SIZE (1024)
2)测试函数
在该测试函数中,已包含了串口的初始化及测试处理,其内容如下:
static void Uart_test(void)
{
uart_config_t uart_config = {
.baud_rate = UART_BAUD_RATE,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_APB,
};
int intr_alloc_flags = 0;
#if CONFIG_UART_ISR_IN_IRAM
intr_alloc_flags = ESP_INTR_FLAG_IRAM;
#endif
ESP_ERROR_CHECK(uart_driver_install(UART_PORT_NUM, UART_BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags));
ESP_ERROR_CHECK(uart_param_config(UART_PORT_NUM, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(UART_PORT_NUM, UART_TXD, UART_RXD, UART_RTS, UART_CTS));
uint8_t *data = (uint8_t *) malloc(UART_BUF_SIZE);
while (1)
{
// Read data from the UART
int len = uart_read_bytes(UART_PORT_NUM, data, UART_BUF_SIZE, 20 / portTICK_RATE_MS);
// Write data back to the UART
uart_write_bytes(UART_PORT_NUM, (constchar *) data, len);
}
}
3)主程序
实现测试的主程序十分简单,其内容如下:
voidapp_main(void)
{
Uart_test();
}
经程序的编译和下载,其数据收发的测试效果如图1所示。
图1 数据收发测试
为测试串口发送字节数据及指令,可在测试函数中添加如下的变量及测试语句:
char udat[5]={0x30,0x31,0x32,0x33,0x34};
uart_write_bytes(UART_PORT_NUM, (constchar *) udat, 5);Uart_test();
其测试结果如图2所示,这样将串口设备的指令存入数组就可以方式控制指令了。
图2 发送字节数据测试
|