打印

能正确接收没有停止位的数据,算不算USART的BUG!

[复制链接]
3605|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
他爹|  楼主 | 2009-5-25 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在测试STN32的USART时,发给它没有停止位的数据帧(一种错误的帧结构),数据还是能被正确的接收。有人说是硬件有BUG,该对数据要收对,该错的数据要收错,有人说是硬件设计的好,容错能力强。谁给评评理,道底该信哪一个?还是要求做这项测试的人吃饱了撑的慌?
沙发
香水城| | 2009-5-26 12:26 | 只看该作者

请贴出示波器图再分析

一般讲UART传输不可能没有停止位,只不过长短不一。

使用特权

评论回复
板凳
highend| | 2009-5-26 12:42 | 只看该作者

看看你爹的FE, 数据当然不会错

不管你爹的FE,你能长这么大?

使用特权

评论回复
地板
ARM20| | 2009-5-27 14:27 | 只看该作者

我觉得值得商讨

既然帧格式错了,接收标志就不改置位,这样容易误解。只置位FE就行了。

使用特权

评论回复
5
香水城| | 2009-5-27 17:59 | 只看该作者

想请教一下,没有停止位哪里来的起始位

起始位是以高电平之后的下降沿为标志,没有停止位如何判定下个字节的起始位?

请楼主说说如何产生这样的数据信号,或给一个波形图,这样我们也可以测试一下你说的情况。

使用特权

评论回复
6
ARM20| | 2009-5-27 20:11 | 只看该作者

我的看法

我个人认为,在某种特别条件下,会发生停止位丢失的现象。我们这样看,任何一个UART接收电路都会以某种模式去检测停止位,这足以说明设计电路的人已经考虑到到了,在实际运行当中,会有停止位丢失的情况发生。不然,为什么要去检测有没有停止位?如果,停止位一定不会丢失,我们在电路设计上,完全可以省去停止位检测的部分,可以节省一定的资源,何乐而不为?想当然的认为发送方一定会送来接收方想要的东西,有点欠考虑。
    个人见解,不一定正确,供香版主参考。 

使用特权

评论回复
7
香水城| | 2009-5-27 21:20 | 只看该作者

谈谈我的看法:正常的UART设备不可能不发送停止位

在接收方如果没有收到停止位,应该是因为干扰所造成,UART接收就是电平检测电路之后的一个移位寄存器,在停止位被干扰的情况下,只要各个数据位没有被干扰,收到的数据位放在接收寄存器中,可以由用户程序自己决定是否在有FE标志时使用收到的数据,或者丢弃这个数据。

关于FE标志的说明,和芯片内部的动作,在STM32参考手册中有明确地描述:

使用特权

评论回复
8
yewuyi| | 2009-5-27 21:40 | 只看该作者

香水城主真敬业,晚上了还坚守岗位。。。

佩服佩服。。。

使用特权

评论回复
9
渤海三叠浪| | 2009-5-27 21:43 | 只看该作者

在接收方如果没有收到停止位,可能主要由厂家硬件设计决

使用特权

评论回复
10
香水城| | 2009-5-27 21:43 | 只看该作者

哈哈,出差回来过来散散步

谢谢楼上捧场~~~~~~

使用特权

评论回复
11
ARM20| | 2009-5-27 21:52 | 只看该作者

补充一点

明白香主的意思。不过,我还是认为:置位FE就行了,接收标志就不该置位,这样容易误解。看看ST的firmware 库中给出的example,哪个例程检测FE标志了?容易误导使用者。

使用特权

评论回复
12
highend| | 2009-5-28 03:52 | 只看该作者

没有接收标志,怎么知道错误数据进来??

收到数据后,不能检查对错??

生了孩子,不会问清**???

使用特权

评论回复
13
香水城| | 2009-5-28 09:58 | 只看该作者

哈哈,楼上幽默

关于12楼的问题:当出现FE标志时表示停止位有问题,并不足以表示前面的数据位也出现了问题,所以判断是否需要使用收到的数据是用户程序的事情,而不是硬件的事情,我们只是为用户提供多一种选择。

至于说ST提供的例子,仅仅是一个例子,而不是教科书,也不是一个严谨的应用。

使用特权

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

本版积分规则

9

主题

12

帖子

0

粉丝