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码应该正确显示。实验结果如下:
实验成功,串口发送功能正常工作。
热门推荐
如何更好地驱动用户行为决策:福格行为模型的应用与实践
家族公司章程范本:确保企业顺利运作的关键
美国学校市制度的运作机制与影响
低钙血症是什么病
每天坚持10分钟正念冥想可以增进幸福感和对抗抑郁
如何分析股票市场的双涨停现象?双涨停后的市场趋势有哪些可能性和风险?
CE认证具体有哪些流程和费用?(国际贸易干货知识分享)
2亿像素的手机拍照效果不如相机?
癸卯大运遇癸卯流年岁运并临,流年遇丧门对谁不好
辣椒素的功效与作用:不只是调味品那么简单
点痣去大医院还是整形医院?如何选择更适合自己的医疗机构?
如何快速恢复精力
什么是真正的自动驾驶?一文了解
阿替普酶的介绍:功效与作用
阿替普酶是什么
一招治恶心的偏方
儿童流感,抗流感药物该怎么用?
【专硕巡展】公共管理专硕:推动社会和国家管理现代化的专业人才
英伟达削减超级电容需求,江海股份股价下跌的背后分析
全面解析:茶叶冲泡时间与更换频率指南
房产销售中的常见问题及解决方案
纯棉衣服上的霉点怎么清洗
您必须尝试的 8 大社交推理游戏
探索未解之谜!现代中国人的祖先,起源于非洲还是本土?
脂肪烃的性质及应用
短视频拍摄多少钱一个?一文带你深入了解市场行情
ENF、E0和E1级板材的区别:从甲醛释放量到价格全解析
甲型流感病毒核酸检测试剂盒检测
25岁韩星金赛纶身亡,韩媒:生前遭网暴
红细胞偏高的原因及危害有哪些