[STM8]

STM8L051F3P6 串口 UART 数据起始位判 断的问题

[复制链接]
633|9
手机看帖
扫描二维码
随时随地手机跟帖
我想看大海|  楼主 | 2021-11-8 15:59 | 显示全部楼层 |阅读模式
一. 前言
某客户反映新换成 STM8L 的单片机, UART 配置后,利用库函数软件代码,无法正常接收正确的数据。 客户对照波形,初步
判断是起始位的问题。为了能测出 STM8L 能够识别的起始位前面的最短高电平, 对客户发送的数据进行了模拟,不断调整起
始位前面的高电平宽度,最后发现高电平宽度>= 21uS 的时候 STM8L 可以正常接收数据。  

使用特权

评论回复
我想看大海|  楼主 | 2021-11-8 16:00 | 显示全部楼层
二.客户问题现象初步分析  

879536188d9079a70d.png
上图是客户端的 UART 需要接收正确识别的数据。客户的起始电平是低电平。
乍一看,这种波形有点像下图中的 Break frame 的形状。
919086188d91bc6705.png
但其实并不是这样理解的。 Break frame 是由发送者发送的, UART 作为接收者,总是侦测认为 break 的状态是种错误的数据
结构,造成此种情况的原因是由于停止位在发送时被发送者遗忘,所以,它需 要在 break 数据结构后加一个额外的数据“1”
(不管 STOP bit control 的设置),数据长度为 1bit , 以便能确信可以接受到下一个数据结构的起始位。


使用特权

评论回复
我想看大海|  楼主 | 2021-11-8 16:03 | 显示全部楼层
三.产生原因的分析解决
468436188d939ad3a1.png


使用特权

评论回复
我想看大海|  楼主 | 2021-11-8 16:04 | 显示全部楼层
首先要对 UART 的起始位的概念定义有所了解,参见 reference manual 的 511 页。由上图可见,在接 收到特定的采样序列
(16 倍的采样频率): 1110x0x0x00000xxxxx 后,关于起始位的有效性才会被确立。 客户的采样频率在波特率为 9600 下,是
153, 6kBd(每隔 6.5us 采样一次),为了验证起始位的有效性。 UART 接收器需要去检测到 1110 的序列,三个时间间隔,即
需要至少: 6.5*3 = 19.5us。符合一开始 在前言部分做的试验。  

使用特权

评论回复
磨砂| | 2021-12-4 11:51 | 显示全部楼层
深入了解协议

使用特权

评论回复
晓伍| | 2021-12-4 11:52 | 显示全部楼层
还没有用过这个芯片啊

使用特权

评论回复
八层楼| | 2021-12-4 11:54 | 显示全部楼层
找到原因就比较容易解决问题了

使用特权

评论回复
观海| | 2021-12-4 11:54 | 显示全部楼层
这个时间是用什么手段得到的呢

使用特权

评论回复
tpgf| | 2021-12-4 11:55 | 显示全部楼层
起始位的判定是有技巧的

使用特权

评论回复
guanjiaer| | 2021-12-4 11:56 | 显示全部楼层
难道手册上没有标明吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

163

帖子

0

粉丝