esp32的uart串口发送16进制通信指令调用实例

esp32的uart串口发送16进制通信指令调用实例

简介

最近想用esp32通过uart发送的16进制指令来控制一个语言播放模块,记录一下调用uart的过程,请大佬斧正。比较愚笨,过程中踩了很多坑,如下:

  1. 将串口号设置为了0,但0串口是已经被设置好用来打印工作状态的串口,导致发送出来的数据混乱
  2. 没有申请一个内存用来存储要发送的数据,用到数组,但按理说数组指针传递的也是数组第一个数据的指针,(没有想通,会导致前三位数发送不出来)
  3. 重复调用安装串口函数,导致程序运行到第二个uart_write_bytes()函数时发生错误,函数返回,芯片重启

esp32串口调用流程

  1. uart驱动安装
#define UART_PORT_NUM      (1)
ESP_ERROR_CHECK(uart_driver_install(UART_PORT_NUM, 1024*2, 0, 0, NULL, intr_alloc_flags));
  1. 给对应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));
  1. 配置uart串口对应的gpio
    #define TXD (GPIO_NUM_4)                        //D4是txd
    #define RXD (GPIO_NUM_5)                        //D5是rxd
    #
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 ESP-IDF 中,可以使用 uart_write_bytes() 函数发送 16 进制数据,使用 uart_read_bytes() 函数接收 16 进制数据。 例如,以下代码片段演示了如何发送和接收 16 进制数据: ```c // 设置串口参数 uart_config_t uart_config = { .baud_rate = 115200, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE }; // 初始化串口 uart_param_config(UART_NUM_0, &uart_config); uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_driver_install(UART_NUM_0, 1024, 0, 0, NULL, 0); // 发送 16 进制数据 uint8_t data[] = {0x12, 0x34, 0xAB, 0xCD}; uart_write_bytes(UART_NUM_0, (const char*)data, sizeof(data)); // 接收 16 进制数据 uint8_t rx_buffer[4]; uart_read_bytes(UART_NUM_0, rx_buffer, sizeof(rx_buffer), portMAX_DELAY); ``` 在以上代码中,我们首先使用 uart_param_config() 函数设置串口参数,然后使用 uart_set_pin() 函数将串口引脚设置为默认值,最后使用 uart_driver_install() 函数初始化串口。 接着,我们使用 uart_write_bytes() 函数发送一个包含 4 个字节的 16 进制数据数组。 最后,我们使用 uart_read_bytes() 函数接收 4 个字节的 16 进制数据,并将其存储在 rx_buffer 数组中。请注意,此函数将一直等待,直到收到指定数量的字节。如果不希望等待,可以将最后一个参数设置为一个超时值(以毫秒为单位)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值