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码应该正确显示。实验结果如下:
实验成功,串口发送功能正常工作。
热门推荐
高铁飞驰,畅游沪苏浙皖的百座旅游小城
历史上的八大盛世:光辉背后的启示与反思
沿舶绕行好望角带动远东-欧洲航线运距+29%
呼叫81192!增援已到,请返航
关于碳化钨的 57 个常见问题 (FAQ)
印度尼西亚旅游攻略:自然景观、历史古迹与特色美食全攻略
幼儿园眼保健操教案:小班健康教案保护眼睛
稻米之路 文明之光
深度剖析混凝土抗冻性能及其检测,助力解决工程耐久性难题
哪里可以找到薪酬管理与绩效管理的培训课程?
如何通过绩效管理的四个环节提升企业整体效能?
全球养老金融的创新:CPPIB的多元化布局与可持续价值创造
养老金融的风险评估怎么做?
古人顶级智慧,教你解读人情世故
用好短视频,撑起青少年健康成长“数字晴空”
从小镇做题家到科研领军人:张明喆的学术逆袭之路
@糖尿病患者,营养科医师为你整理的“甜”而不“糖”水果清单,赶紧转发收藏→
探寻历史文脉 感知文化魅力(外国友人镜头里的中国国家历史文化名城)
石油的用途有哪些 石油应用领域有哪些
石油的用途有哪些?石油应用领域及对社会发展的影响
为什么要在孕24-28周筛查妊娠期糖尿病?很多人还不知道
如何制定高效的应急预案演练计划安排表?
长沙周边亲子露营地推荐:铜官窑江滩、洞冲水库等
保留这14个规划,北京地铁线网运行效率至少提高50%
5部苏俄视角的战争片,残酷、生猛、绝望!
适合更年期女性的运动“锦囊”,请收好!
为什么备孕怀孕要补充叶酸?什么时候开始补叶酸为好?
集体户口孩子如何上学?一文详解入学政策与所需材料
如何制作激励团队的短片?
双影奇境家庭共享功能使用指南