[STM32F0] 怀疑STM32F030串口自动波特率功能有硬件BUG。

[复制链接]
4648|9
 楼主| QuakeGod 发表于 2018-6-29 14:10 | 显示全部楼层 |阅读模式
最近接触F030芯片,用了一个F4P6,算是最便宜的了,而且功能也不差,真是物美价廉,量也很足。
而且刚发现,这个芯片的USART不但支持485自动方向控制,还支持自动波特率识别,真是赚大了。
芯片最高支持48MHz时钟,串口如果使用16倍超采样,最高波特率是3Mbps,如果使用8位超采样,最高波特率达到6Mbps,还是很不错的嘛,就喜欢这种超高波特率。
波特率自动识别原理也很简单,就是在接收到第一个字节的时候,测量1位或者2位数据的时长,然后再计算出波特率,当然,对第一个字节有一些要求,一般我们做串口通讯,加包格式,如果有前导起始字符,比如0x55,或者'%',都是符合这个格式的。
更可贵的是,这个第一个不知道波特率的字节,并不会丢失,而是会正确得接收,加10分。
但是真正测试这个自动波特率的时候,发现了问题了。
如果设置16倍超采样,自动计算出的波特率是正确的,虽然略有误差,但是能够满足通讯的要求。
如果设置8倍超采样,问题就来了,自动波特率算出的BRR结果还是按照16倍超采样算出来的,结果波特率完全就不对了,基本上变成原来的2倍。
虽然可以使用一些奇技淫巧,在8倍超采样的时候,自动波特率识**的波特率数值自动改成正确的,但是应该正确接收的第一个字节已经丢失了,造成无法挽回的遗憾。
另外,如果波特率超过16位超采样支持的最高波特率,那么自动波特率识别又识别不到。
这样就造成那个8位超采样和自动波特率识别没法匹配,芯片支持的超高波特率功能也就成了**肋了。

估计这个问题,应该是硬件设计时候的BUG吧。

wahahaheihei 发表于 2018-7-1 22:21 来自手机 | 显示全部楼层
这个还没用过,都是指定波特率
734774645 发表于 2018-7-2 16:11 | 显示全部楼层
为何要用这个自动波特率啊。一般用个默认的就行了。
aizaixiyuanqian 发表于 2018-7-2 21:52 | 显示全部楼层
确定真的,可以发邮箱给ST了,能给点辛苦费
风云ljh 发表于 2018-7-7 21:32 | 显示全部楼层
我目前用的还可以,没有发现什么问题
xinhuam 发表于 2018-7-8 18:32 | 显示全部楼层
标题好吓人
liu1028tao 发表于 2018-8-2 12:13 | 显示全部楼层
库的原因更多 F030的 ADC多通道采集了解下
 楼主| QuakeGod 发表于 2018-8-4 17:02 | 显示全部楼层
liu1028tao 发表于 2018-8-2 12:13
库的原因更多 F030的 ADC多通道采集了解下

这个自动波特率的功能是硬件实现的,不是库实现的。
dzy1996t 发表于 2019-11-1 09:59 | 显示全部楼层
看看手册
SharedScreenshot.jpg
xiaofei558008 发表于 2020-3-16 15:08 | 显示全部楼层

520885e6f25d4b44f7.png

把 over run disable 后看看



您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:QQ:12902840 QQ群,8875908

27

主题

1889

帖子

20

粉丝
快速回复 在线客服 返回列表 返回顶部