STMCU小助手
发布时间:2022-2-11 18:45
|
STM8L051F3P6 串口 UART 数据起始位判断的问题 一. 前言 x: |4 q2 L* q4 ]& N5 R& Q 某客户反映新换成 STM8L 的单片机,UART 配置后,利用库函数软件代码,无法正常接收正确的数据。 客户对照波形,初步判断是起始位的问题。为了能测出 STM8L 能够识别的起始位前面的最短高电平,对客户发送的数据进行了模拟,不断调整起始位前面的高电平宽度,最后发现高电平宽度>=21uS 的时候 STM8L 可以正常接收数据。 二.客户问题现象初步分析 ' |% ~! K2 j4 y2 l- t: j! O
上图是客户端的 UART 需要接收正确识别的数据。客户的起始电平是低电平。0 `- ^/ K% W# x" F 乍一看,这种波形有点像下图中的 Break frame 的形状。! e# s5 T- B/ d+ z t& M
! D0 Z+ {0 A" L8 }( j* y 但其实并不是这样理解的。Break frame 是由发送者发送的,UART 作为接收者,总是侦测认为 break的状态是种错误的数据结构,造成此种情况的原因是由于停止位在发送时被发送者遗忘,所以,它需要在 break 数据结构后加一个额外的数据“1”(不管 STOP bit control 的设置),数据长度为 1bit ,以便能确信可以接受到下一个数据结构的起始位。 , h1 ~2 K U N5 Y 三.产生原因的分析解决 0 v1 d% M \* Z6 u, m
首先要对 UART 的起始位的概念定义有所了解,参见 reference manual 的 511 页。由上图可见,在接 收到特定的采样序列(16 倍的采样频率):1110x0x0x00000xxxxx 后,关于起始位的有效性才会被确立。 客户的采样频率在波特率为 9600 下,是 153,6kBd(每隔 6.5us 采样一次),为了验证起始位的有效性。 UART 接收器需要去检测到 1110 的序列,三个时间间隔,即需要至少:6.5*3 = 19.5us。符合一开始: m$ i$ c3 J C 在前言部分做的试验。 |
实战经验 | 基于STM32G0B1的全桥移相+同步整流PWM解决方案
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:逢7发帖赢大礼】8、基于STM32G070板子的Ymodem串口协议IAP Bootloader开发
【福利三:逢7发帖赢大礼】7、基于STM32G070板子TF卡的FATFS移植
【福利三:逢7发帖赢大礼】6、基于STM32G070板子spiflash的FATFS移植
【福利三:逢7发帖赢大礼】5、基于STM32G070板子IRDA红外遥控接收解码
【福利三:逢7发帖赢大礼】4、基于STM32G070板子SPI flash 移植SFUD库
【福利三:逢7发帖赢大礼】基于STM32G070板子的uart shell移植设计
【福利三:逢7发帖赢大礼】3、基于STM32G070板子的YModem串口协议通信
【福利三:逢7发帖赢大礼】2、基于STM32G070板子的OLED移植U8G2库
微信公众号
手机版