打印
[应用相关]

串口断帧检测

[复制链接]
1075|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
问题:
在某些串行工业总线协议中,如 Profibus,每帧发送的数据长度不定,导致接收方在接收数据时无法 确定帧的结束点。  

使用特权

评论回复
沙发
菜鸟的第一步|  楼主 | 2021-11-5 12:44 | 只看该作者
调研:
STM32 系列产品的定时器具有 slave reset 模式。利用该功能可以捕获总线上的设定长度的空闲位。  

使用特权

评论回复
板凳
菜鸟的第一步|  楼主 | 2021-11-5 12:45 | 只看该作者
结论:
本例程在 STM3220G-EVAL 上实现了 USART 空闲帧的检测,空闲帧的长度可配置。在 Profibus 协议中, 空闲帧长度为 33
位。检测到空闲帧后,接收方认为该帧结束,停止 DMA 接收数据。  

使用特权

评论回复
地板
菜鸟的第一步|  楼主 | 2021-11-5 12:46 | 只看该作者
处理:
该例程可在 STM3220G-EVAL 上运行。使用 USART6 的 DMA 方式收发数据,使用 TIM9 的 Slave Reset 模式: TIM9_CH1
用于捕获串口的接收数据波形,并在下降沿将 TIM9 的计数器清零; TIM9_CH2 用于输出比较,监测是否收到连续 33 位的高
电平,即空闲帧; PG8 用于输出空闲帧信号, 每次检测到空闲帧时信号点平翻转。  


示波器波形图:

使用特权

评论回复
5
菜鸟的第一步|  楼主 | 2021-11-5 12:47 | 只看该作者
建议:
本例程的缺陷:如果帧中最后的一个数据为 0xFF 时,将会被做为空闲帧的一部分处理。但是在 Profibus 协议中,最后一个
数据可自行定义。
在本例程的基础上,也可实现 SPI 等其它串行协议的断帧处理。  

使用特权

评论回复
6
kyzhd| | 2021-11-5 14:06 | 只看该作者
楼主的分享帖不错,内容丰富啊。

使用特权

评论回复
7
guanjiaer| | 2021-12-2 17:03 | 只看该作者
也是一个好的办法

使用特权

评论回复
8
磨砂| | 2021-12-2 17:11 | 只看该作者
果然不错 完全可以判断这个标志位

使用特权

评论回复
9
晓伍| | 2021-12-2 17:11 | 只看该作者
以前还真没注意过这个标志位

使用特权

评论回复
10
八层楼| | 2021-12-2 17:13 | 只看该作者
受教了 非常不错

使用特权

评论回复
11
观海| | 2021-12-2 17:14 | 只看该作者
以前都是我自己定义包头包尾 呵呵呵

使用特权

评论回复
12
tpgf| | 2021-12-2 17:15 | 只看该作者
确实存在这个缺陷

使用特权

评论回复
13
heimaojingzhang| | 2021-12-2 17:18 | 只看该作者
我挺知足的 没有完美的办法

使用特权

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

本版积分规则

57

主题

426

帖子

1

粉丝