esp32的uart串口发送16进制通信指令调用实例
简介
最近想用esp32通过uart发送的16进制指令来控制一个语言播放模块,记录一下调用uart的过程,请大佬斧正。比较愚笨,过程中踩了很多坑,如下:
- 将串口号设置为了0,但0串口是已经被设置好用来打印工作状态的串口,导致发送出来的数据混乱
- 没有申请一个内存用来存储要发送的数据,用到数组,但按理说数组指针传递的也是数组第一个数据的指针,(没有想通,会导致前三位数发送不出来)
- 重复调用安装串口函数,导致程序运行到第二个uart_write_bytes()函数时发生错误,函数返回,芯片重启
esp32串口调用流程
- uart驱动安装
#define UART_PORT_NUM (1)
ESP_ERROR_CHECK(uart_driver_install(UART_PORT_NUM, 1024*2, 0, 0, NULL, intr_alloc_flags));
- 给对应uart配置参数
/*这里需要写一个结构体,传递给下面的uart_param_config((),来配置相关参数*/
uart_config_t uart_config = {
.baud_rate = 9600, //波特率
.data_bits = UART_DATA_8_BITS, //发送数据长度
.parity = UART_PARITY_DISABLE, //数据验证方式,这里不要
.stop_bits = UART_STOP_BITS_1, //停止位1位
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE, //硬件流控,不要disable了
.source_clk = UART_SCLK_APB, };
ESP_ERROR_CHECK(uart_param_config(UART_PORT_NUM, &uart_config));
- 配置uart串口对应的gpio
#define TXD (GPIO_NUM_4) //D4是txd
#define RXD (GPIO_NUM_5) //D5是rxd
#