你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】串口断帧检测

[复制链接]
STMCU小助手 发布时间:2022-2-19 18:23
问题:
4 S& \+ A8 r4 B1 h在某些串行工业总线协议中,如 Profibus,每帧发送的数据长度不定,导致接收方在接收数据时无法确定帧的结束点。
4 ~" \5 \4 }/ r# y2 i4 A调研:+ @; e! b; w# N2 T
STM32 系列产品的定时器具有 slave reset 模式。利用该功能可以捕获总线上的设定长度的空闲位。
* b( J: A8 }2 Q' F$ }7 o
+ l% J% L" o, n! S2 |2 R, B( O6 Z9 j# ?( e, K
结论:
% N8 T$ m- ~# n8 X! J& e* m" f3 @) U本例程在 STM3220G-EVAL 上实现了 USART 空闲帧的检测,空闲帧的长度可配置。在 Profibus 协议中,空闲帧长度为 33 位。检测到空闲帧后,接收方认为该帧结束,停止 DMA 接收数据。8 L" C2 L2 q$ J+ P& j, ^
6 ?4 q5 F0 A: ?, ?
处理:
1 Q2 X& \9 c" J; [% @该例程可在 STM3220G-EVAL 上运行。使用 USART6 的 DMA 方式收发数据,使用 TIM9 的 Slave Reset 模式: TIM9_CH1 用于捕获串口的接收数据波形,并在下降沿将 TIM9 的计数器清零;TIM9_CH2 用于输出比较,监测是否收到连续 33 位的高电平,即空闲帧;PG8 用于输出空闲帧信号,每次检测到空闲帧时信号点平翻转。
' u* P" u3 ?( f9 i
0 L6 `/ Y* d6 P* z) [8 l4 } T)`5WJE@4P`9@0M~Y`9E7%C.png 1 z" ~, |# f) S- l

3 {  [6 t: X$ {( y  g示波器波形图:  {* V* R8 `, a/ h" e
6 l; q7 f: y- R' f6 @; t" }& [
CQF46}8DZ]QLNAH})W7RUAN.png
( |6 H: r8 `# H, i4 w
' a5 @- B* k2 |" W建议:9 o1 o- N9 {# X2 C8 Y2 Z3 Y( ]
本例程的缺陷:如果帧中最后的一个数据为 0xFF 时,将会被做为空闲帧的一部分处理。但是在Profibus 协议中,最后一个数据可自行定义。
0 T1 T4 @& n; L% a$ D# q在本例程的基础上,也可实现 SPI 等其它串行协议的断帧处理。  {# o4 k2 I' b3 l3 D, @

- ?8 O  z, J+ E9 O
赞 收藏 评论0 发布时间:2022-2-19 18:23

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版