ESP32串口通信配置与实验指南
创作时间:
作者:
@小白创作中心
ESP32串口通信配置与实验指南
引用
CSDN
1.
https://blog.csdn.net/weixin_56634270/article/details/145698921
本文将详细介绍如何在ESP32上配置和使用串口通信功能。通过本文,你将学习到如何使用ESP-IDF框架配置串口参数、设置引脚、安装驱动以及发送数据等基本操作。
1. 串口通信基础知识
在开始配置之前,建议先了解串口通信的基本概念。可以参考凡亿在知乎上的文章《串口通信基础知识》,该文章对串口通信的原理和基本配置有非常清晰的讲解。
2. 基本配置
最基本的串口通信配置包括:
- 一个起始位
- 8位数据位
- 无奇偶校验
- 一个停止位
在ESP32中,这些配置可以通过uart_param_config
函数完成。该函数的原型如下:
esp_err_t uart_param_config(uart_port_t uart_num, const uart_config_t *uart_config)
其中,uart_config
是一个结构体,包含以下成员:
typedef struct {
int baud_rate; /*!< UART baud rate*/
uart_word_length_t data_bits; /*!< UART byte size*/
uart_parity_t parity; /*!< UART parity mode*/
uart_stop_bits_t stop_bits; /*!< UART stop bits*/
uart_hw_flowcontrol_t flow_ctrl; /*!< UART HW flow control mode (cts/rts)*/
uint8_t rx_flow_ctrl_thresh; /*!< UART HW RTS threshold*/
uart_sclk_t source_clk; /*!< UART source clock selection */
} uart_config_t;
3. 配置串口参数
根据上述基本配置要求,我们可以创建一个uart_config_t
结构体实例:
const uart_config_t usart_dev = {
.baud_rate = 115200, // 波特率为115200
.data_bits = UART_DATA_8_BITS, // 数据位为8bits
.parity = UART_PARITY_DISABLE, // 无校验位
.stop_bits = UART_STOP_BITS_1, // 停止位为1
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE, // 无流控制
.source_clk = UART_SCLK_APB, // 时钟线选择
.rx_flow_ctrl_thresh = 122
};
然后使用uart_param_config
函数进行配置:
uart_param_config(UART_NUM_0, &usart_dev);
4. 设置引脚
接下来需要设置串口使用的引脚。使用uart_set_pin
函数进行配置:
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)
我们只需要配置TX和RX引脚,RTS和CTS引脚不需要配置,因此使用UART_PIN_NO_CHANGE
表示不改变:
uart_set_pin(UART_NUM_0, GPIO_NUM_2, GPIO_NUM_3, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
5. 安装驱动
完成参数配置和引脚设置后,需要安装串口驱动。使用uart_driver_install
函数:
uart_driver_install(UART_NUM_0, RX_BUF_SIZE * 2, TX_BUF_SIZE * 2, 20, NULL, 0);
参数说明:
- 第一个参数是串口号
- 第二个参数是接收数据缓冲区大小
- 第三个参数是发送数据缓冲区大小
- 第四个参数是通道大小
- 第五个参数是通道回调函数
- 第六个参数是中断分配标志位
6. 初始化函数
将上述配置步骤封装到一个初始化函数中:
void SerialPort_Init(void)
{
const uart_config_t usart_dev = {
.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,
.source_clk = UART_SCLK_APB,
.rx_flow_ctrl_thresh = 122
};
uart_param_config(UART_NUM_0, &usart_dev);
uart_set_pin(UART_NUM_0, GPIO_NUM_2, GPIO_NUM_3, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
uart_driver_install(UART_NUM_0, RX_BUF_SIZE * 2, TX_BUF_SIZE * 2, 20, NULL, 0);
}
7. 发送数据
完成初始化后,就可以使用uart_write_bytes
函数发送数据了。在app_main
函数中调用初始化函数并发送数据:
#include "uart_dev.h"
char my_buffer[] = "hello world";
extern "C" void app_main(void)
{
SerialPort_Init(); // 初始化
while (true)
{
uart_write_bytes(UART_NUM_0, my_buffer, sizeof(my_buffer)); // 发送"hello world"
}
}
8. 实验验证
由于没有TTL串口转换模块,使用原子逻辑分析仪进行测试。根据ASCII码表,"hello world"的ASCII码应该正确显示。实验结果如下:
实验成功,串口发送功能正常工作。
热门推荐
男士西服完全指南:分类、版型与尺码详解
《心跳》第四季最新消息:剧情推测与演员阵容
本科论文如何结合实践应用
秋季户外运动,小心“失温”
汉末三国的6大顶级士族:汝南袁氏、弘农杨氏、颍川荀氏 ...
光的魔术师:揭秘玻璃的奇妙折射
儿童如何做好网络安全防护
白庙屯:百年村落焕新颜
进入AI新纪元,手机厂商开启“创新风暴”
城记:除了马德拉群岛,葡萄牙还有一片位于大西洋的海外离岛
身上出现4种肿块可能是癌
朱砂的功效与作用:从镇静安神到防腐明目
Blender插件:Asset Management资产管理插件
切尔诺贝利救援:苏联付出了多少代价?
洞悉《道德经》的智慧:人际关系篇
晚上喝酒,对身体有何影响?
万年青——一种极具观赏价值且寓意吉祥的植物,同时也具有一定的药用价值。
赋予家的品质与仪式感:五个不可忽视的装修要素
美国K-12计算机与人工智能教育发展分析
玄鵺《时间裂缝》:“国潮科幻”代表作
股票波动的影响因素有哪些?如何应对股票波动的风险?
从新手到专家:职业规划师成长之路的全面解析
如何预约驾驶考试?预约流程和注意事项有哪些?
租房居然折寿?BMJ子刊:租房的人,老得更快,寿命更短
长途自驾游 1000 公里以上,需要随车带维修工具吗?哪些东西最实用
煤炭供需格局变化:全球能源转型下的煤炭行业挑战与机遇并存
现代家居墙面装饰:壁纸的应用与趋势
无痛肠镜检查:舒适选择背后的风险与准备全解析
梨园公会“活化”开馆 传承和发扬京剧艺术
若再次装修,客厅坚决不装“电视柜”,学年轻人这么设计,既美观又实用还高级!