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

【经验分享】STM8L051F3P6 串口 UART 数据起始位判断的问题

[复制链接]
STMCU小助手 发布时间:2022-2-19 18:38
一. 前言
0 Q7 K4 X0 {8 m8 B8 T. b某客户反映新换成 STM8L 的单片机,UART 配置后,利用库函数软件代码,无法正常接收正确的数据。客户对照波形,初步判断是起始位的问题。为了能测出 STM8L 能够识别的起始位前面的最短高电平,对客户发送的数据进行了模拟,不断调整起始位前面的高电平宽度,最后发现高电平宽度>=21uS 的时候 STM8L 可以正常接收数据。
9 T/ t0 r' n# L0 s
5 }0 x2 M# g3 j# P1 U二.客户问题现象初步分析
  s7 O! e! _$ h3 H3 f" A
1 v- |: a8 S' F% u( ]* v2 a FNR)2D5%DOP~I{E(3L8K3KQ.png
# ]- @6 t7 z% g/ \3 [8 A* D0 }上图是客户端的 UART 需要接收正确识别的数据。客户的起始电平是低电平。乍一看,这种波形有点像下图中的 Break frame 的形状。  z; E  W0 g0 z7 j! o8 P
* g& i& E- X6 O4 k, d4 V
T8G9(2A874E])JYP45N36AL.png 7 ?- P- t2 b0 B9 k! W& V' n

6 B& \( T' x  k  \( Y# s- h% c' \6 K但其实并不是这样理解的。Break frame 是由发送者发送的,UART 作为接收者,总是侦测认为 break的状态是种错误的数据结构,造成此种情况的原因是由于停止位在发送时被发送者遗忘,所以,它需要在 break 数据结构后加一个额外的数据“1”(不管 STOP bit control 的设置),数据长度为 1bit ,以便能确信可以接受到下一个数据结构的起始位。
, ?2 K3 Z) P0 F" I; p  {7 C, A, \# Z0 u

$ ]! E8 F$ x( ]& V" R' @3 w三.产生原因的分析解决
/ e7 M( r: I( g" [+ O- q, d2 {8 a0 h  F& s$ ^5 h
2V778[@ZKJ6D%MY9_AJ3~[U.png
' I+ w# q% P* s- V, D2 ]* d首先要对 UART 的起始位的概念定义有所了解,参见 reference manual 的 511 页。由上图可见,在接收到特定的采样序列(16 倍的采样频率):1110x0x0x00000xxxxx 后,关于起始位的有效性才会被确立。客户的采样频率在波特率为 9600 下,是 153,6kBd(每隔 6.5us 采样一次),为了验证起始位的有效性。UART 接收器需要去检测到 1110 的序列,三个时间间隔,即需要至少:6.5*3 = 19.5us。符合一开始在前言部分做的试验。6 s  W- \8 t- }# `  o1 t* ~
9 a5 T# h4 _8 k4 a
/ w% n) V4 V$ Y- t1 }
赞 收藏 评论0 发布时间:2022-2-19 18:38

举报

0个回答

所属标签

相似技术帖

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