0、前期准备1、参考首篇文章搭建好esp32环境
2、准备好一块esp32开发开发板(本作者使用了esp32c3作为开发平台)
1、知识储备1.1 概述 uart称为通用异步收发器,可以进行全双工/半双工数据通讯数据通讯,通讯距离取决于上拉驱动能力、波特率,一般只在电路板上使用,如果需要长距离通讯可以外接rs232(最长通讯距离15m)、rs485电平转换芯片,但是要注意如果外接的是rs485电平芯片,只能进行半双工通讯,在理想情况下使用9600波特率,其通讯距离可达1200m。
1.2 功能架构 乐鑫eps32c3带有2个uart控制器,不仅可以用来进行数据通讯,还能来用驱动红外发射管。(目前本文只用来作uart通讯)
1.3 uart配置流程介绍ledc的配置流程可分为以下3步
1、uart配置:设置波特率、数据位、停止位、奇偶校验位和流控
2、引脚绑定:设置uart使用哪几个引脚
3、 注册uart中断驱动(可选--建议进行该配置,本文给出例子就使用该方式)
1、uart配置uart的配置主要是给 uart_config_t 结构体赋值,然后通过uart_param_config函数进行uart设置
以下对uart_config_t 结构体进行说明
typedef struct { int baud_rate; //波特率 uart_word_length_t data_bits; //数据位 uart_parity_t parity; //奇偶校验位 uart_stop_bits_t stop_bits; //停止位 uart_hw_flowcontrol_t flow_ctrl; //硬件流控 uint8_t rx_flow_ctrl_thresh; //硬件流控的rts阈值 union { uart_sclk_t source_clk; //时钟源 bool use_ref_tick __attribute__((deprecated)); };} uart_config_t;例子:
// uart1配置// 115200 8 1 无奇偶校验位 无流控uart_config_t uart_conf = { .baud_rate = 115200, .data_bits = uart_data_8_bits, .stop_bits = uart_stop_bits_1, .parity = uart_parity_disable, .flow_ctrl = uart_hw_flowctrl_disable, .source_clk = uart_sclk_apb,};uart_param_config(uart_num_1, &uart_conf);2、引脚绑定设置uart使用哪几个引脚
esp_err_t uart_set_pin(uart_port_t uart_num, int tx_io_num, int rx_io_num, int rts_io_num, int cts_io_num);// 参数 :uart_num:串口编号 可查看uart.h,进行选择// tx_io_num:发送引脚编号,不需要可填:uart_pin_no_change// rx_io_num: 接收引脚编号,不需要可填:uart_pin_no_change// rts_io_num:rts引脚编号,不需要可填:uart_pin_no_change// cts_io_num:cts引脚编号,不需要可填:uart_pin_no_change例子:
// 引脚绑定uart_set_pin(uart_num_1, tx_pin, rx_pin, uart_pin_no_change, uart_pin_no_change);3、 注册uart中断驱动(配置可选)通过注册uart中断,可以不用开一个任务实时的去读取串口,判断串口有没有数据发送过来,提高系统实时性。
中断驱动uart_driver_install函数参数说明如下:
esp_err_t uart_driver_install(uart_port_t uart_num, int rx_buffer_size, int tx_buffer_size, int queue_size, queuehandle_t *uart_queue, int intr_alloc_flags);// 参数 :uart_num:串口编号 可查看uart.h,进行选择// rx_buffer_size:uart接收数组大小// tx_buffer_size: uart发送数组大小// queue_size: uart接收消息队列大小,和新建的消息队列大小一致// uart_queue:uart接收消息队列句柄// intr_alloc_flags:中断标志位例子:
queuehandle_t uart_queue = null; uart_queue = xqueuecreate(8, 512);uart_driver_install(uart_port, rx_buff_size, rx_buff_size, 8, &uart_queue, 0);4、 其他函数本文只介绍发送和接收两个函数,更多函数可参考乐鑫官网
int uart_read_bytes(uart_port_t uart_num, void *buf, uint32_t length, ticktype_t ticks_to_wait);//参数 : uart_num:串口编号 可查看uart.h,进行选择// buf:接收数组名// length:接收到的数据长度// ticks_to_wait:读取等待的rtos 滴答个数//返回 : -1:表示错误// 其他:表示从uart的接收fifo读取到的数据int uart_write_bytes(uart_port_t uart_num, const void *src, size_t size);//参数 : uart_num:串口编号 可查看uart.h,进行选择// src:发送数组名// size:发送的数据长度//返回 : -1:表示错误// 其他:表示uart发送给发送fifo的数据2、新建工程idf.py create-project project_uart # 新建工程cd project_uartidf.py set-target esp32c3 # 设置工程使用的芯片2、查看原理图确定uart引脚
中国提前完成了今年50万5G基站的建设目标
自动泊车系统的工作原理及工作步骤
M8板前安装插座 PCB插板式
清华大学教授:柔性传感技术在医疗领域最新突破
被微型传感器“武装”的小蜜蜂,宣告半机械动物联网时代即将到来
[esp32教程] 5、UART使用
iphone8最新消息,iphone8什么时候上市?iphone8或将移除微信功能?果粉们还会买账吗?
直播带货将在5G时代拥有更广阔的发展空间
中小企业在数字化时代求生存的方法
将传感器作为物联网的基础加以共识
高压继电器的基本原理
分流器是什么?分流器的应用与分类与使用方法详解
世界首发!ROHM开发出SiC驱动用AC/DC转换器控制IC
工控机在轮胎制造业中的地位日益显著
减速箱作为减速电机重要组成部分有哪些用途呢
谷歌解雇知名AI研究员:谷歌和格布鲁均尚未对相关置评请求作出回应
医疗废物在线监管解决传统医疗废物管理现状
骁龙6系的魅族手机要来了:难道真是魅族Pro7?
Vicor 将出席2018年汽车48V电源及电气化系统论坛
低压断路器的工作原理