ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ESP32 串口使用笔记

2021-10-29 16:32:20  阅读:820  来源: 互联网

标签:enable uart pattern ESP32 intr 笔记 关键字 chr 串口


仅记录一下对ESP32函数库里

uart_enable_pattern_det_intr  和 uart_enable_pattern_det_baud_intr的理解。

因为网上很多学习资料要么过时要么互相抄不深究,导致错了也不知道而误导人。

首先,按照官方的说法 uart_enable_pattern_det_intr  已经不推荐使用了。

应该使用 uart_enable_pattern_det_baud_intr。

二者的区别是在超时设定上的时间单位不一样。

uart_enable_pattern_det_intr 的时间单位为硬件的APB时钟,ESP32是 (80Mhz)。

uart_enable_pattern_det_baud_intr的时间单位为用户配置的波特率周期。后面理解参数后会知道这样其实更好用。

esp_err_t uart_enable_pattern_det_baud_intr(uart_port_t uart_num, char pattern_chr, uint8_t chr_num, int chr_tout, int post_idle, int pre_idle)

uart_num  串口号

pattern_chr  关键字符,可以是单个字符也可以是字符串比如 “+++”,下面也以它为例

chr_num  字符长度

chr_tout 

关键字间隔时间,如果小于则不被认为是关键字。如果时间设置较大,比如大于一个字节时间则串口数据"+2+3+"也会被认为是关键字。这个时间设置成单字节周期就行,串口的话一个8位字节时间最少是8+2个周期,取10即可。也个别的是11个周期,停止位后多一个空闲周期。

post_idle 

关键字触发后的有效时间,如果小于则不认为是最后一个关键字。如果有++++,则认为有4个+,不是关键字,如果时间设置较大,那+++后设置时间内务必不能再出现+,否则会认为是4个++++导致不触发中断,即该时间也等效于+++出现后中断触发延时的时间,因为它要等超时后才能确认关键字是否满足要求。防止乱码干扰,这个可以取稍微大一点,,n*10,n取决你打算留多少字节时间的量。

pre_idle

关键字触发前的间隔时间,如果小于则不认为是第一个关键字。这可以保证消息里如果出现了关键字符不会错误的触发中断。因为消息里的字节都是紧挨着发送的。这个时间也要设置的大一点。也是n*10个周期,n取决于 。如果是简单系统,串口数据都是一口气完整发送完的。但像ESP32或者更复杂的安卓系统,不排除串口发送被打断一下的情况。

老的时间参数是24位的,新的是16位。

老的函数是用硬件时间计时,需要你自己计算。新的函数用串口周期计时,方便用户。从函数原型看,新函数和老的基本一样,函数内部取了波特率和周期帮你算了而已。

这里关于超时的处理都是按程序逻辑思考来的,有一些还需要测试过才能最终确定。另外在别的地方看到有说 chr_num 的意思是关键字节的重复数量,这个应该不太靠谱。
 

标签:enable,uart,pattern,ESP32,intr,笔记,关键字,chr,串口
来源: https://blog.csdn.net/flyunlimit/article/details/121036189

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有