打印
[STM32F1]

串口误码的问题

[复制链接]
1937|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2020-9-28 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口在接收大量数据的时候会出现误码,而且比较奇特的是经常错误的数据比正常数据多了20byte。

现在使用的是8N1,请问使用奇偶校验会不会好点?
如果传输过程中奇偶校验发现错误,是否需要程序的参与?
还是两个单片机会自己重发?那么错误数据会不会存放到缓冲区?

最后波特率的高低,与误码率是否有关系呢?
@ufbycd @zeshoufx @tyw @icecut @dirtwillfly @hgjinwei @xyz549040622 @m564522634

使用特权

评论回复
评论
xiaofei558008 2020-9-30 12:05 回复TA
目测波特率错了 
沙发
ufbycd| | 2020-9-28 17:05 | 只看该作者
奇偶校验只能用来发现错误,不能纠正错误;所以需要收发两端协同处理来纠正错误。
误码率跟波特率误差、通信线长度和接收方的接收速率有关。要保证收发两端的波特率误差都小于2.5%(8N1情况下),并根据通信线长度和接收速率合理选取波特率。

使用特权

评论回复
板凳
djz1992|  楼主 | 2020-9-28 19:14 | 只看该作者
ufbycd 发表于 2020-9-28 17:05
奇偶校验只能用来发现错误,不能纠正错误;所以需要收发两端协同处理来纠正错误。
误码率跟波特率误差、通 ...

怎么来测这个波特率误差呢?

使用特权

评论回复
地板
dirtwillfly| | 2020-9-28 20:01 | 只看该作者
波特率高,抗干扰的能力就弱。尤其是附近有类似频率干扰源的时候,很容易被干扰。
你先换个波特率试试
如果有外接线,把线换个屏蔽线试试

使用特权

评论回复
5
東南博士| | 2020-9-28 20:16 | 只看该作者
奇偶校验 不要用!!!!!!

使用特权

评论回复
6
airwill| | 2020-9-28 21:07 | 只看该作者
波特率误差是一个重要的因素, 还有高低电平的对称性.   数据之间能有一点延迟, 就不容易出现这样的问题

使用特权

评论回复
7
icecut| | 2020-9-29 09:52 | 只看该作者
東南博士 发表于 2020-9-28 20:16
奇偶校验 不要用!!!!!!

用了代码会很麻烦是吧, 直接把错误的丢掉了.还要加帧校验, 丢掉的数量影响帧校验字节的位置 ,然后还要重新遍历找下一包的开头.....反正加不加, 这些纠错都要有....

使用特权

评论回复
8
ayb_ice| | 2020-9-29 14:27 | 只看该作者
经常出错的话软件的问题可能性大,除非波特率非常高

使用特权

评论回复
9
way2888| | 2020-9-30 07:56 | 只看该作者
肯定是处理程序的问题

使用特权

评论回复
10
djz1992|  楼主 | 2020-9-30 07:59 | 只看该作者
dirtwillfly 发表于 2020-9-28 20:01
波特率高,抗干扰的能力就弱。尤其是附近有类似频率干扰源的时候,很容易被干扰。
你先换个波特率试试
如果 ...

ok,好的

使用特权

评论回复
11
djz1992|  楼主 | 2020-9-30 07:59 | 只看该作者
airwill 发表于 2020-9-28 21:07
波特率误差是一个重要的因素, 还有高低电平的对称性.   数据之间能有一点延迟, 就不容易出现这样的问题 ...

是的,明白了

使用特权

评论回复
12
djz1992|  楼主 | 2020-9-30 08:00 | 只看该作者
ayb_ice 发表于 2020-9-29 14:27
经常出错的话软件的问题可能性大,除非波特率非常高

115200应该不算高吧

使用特权

评论回复
13
djz1992|  楼主 | 2020-9-30 08:01 | 只看该作者
icecut 发表于 2020-9-29 09:52
用了代码会很麻烦是吧, 直接把错误的丢掉了.还要加帧校验, 丢掉的数量影响帧校验字节的位置 ,然后还要重 ...

学习了。。。!

使用特权

评论回复
14
djz1992|  楼主 | 2020-9-30 08:02 | 只看该作者
東南博士 发表于 2020-9-28 20:16
奇偶校验 不要用!!!!!!

好的好的

使用特权

评论回复
15
gx_huang| | 2020-9-30 08:25 | 只看该作者
问这些问题,说明没有深入研究UART的原理,仔细看看某些芯片UART单元的内部原理,更利于解决你的问题。

使用特权

评论回复
16
ayb_ice| | 2020-9-30 08:29 | 只看该作者
djz1992 发表于 2020-9-30 08:00
115200应该不算高吧

不高,
程序的问题可能性大

使用特权

评论回复
17
Prry| | 2020-9-30 11:06 | 只看该作者
用另外一个串口工具监控串口上的数据,或者拿逻辑分析性抓数据线上的数据,如果数据没问题,就是接收到程序问题。115200波特率算很低了。 使用DMA收发,1.5Mbps波特率都不翻车:https://acuity.blog.csdn.net/article/details/108367512

使用特权

评论回复
18
m564522634| | 2020-9-30 11:35 | 只看该作者
误码率和你校验没关系的,大概率硬件的问题,看下硬件设计方案合理不

使用特权

评论回复
19
coody| | 2020-9-30 15:11 | 只看该作者
好好查程序吧,如果你还有别的中断要处理,并且处理的时间比较长(又特别是比串口接收一个字节时间还长),则要将串口中断的优先级设置为最高。

使用特权

评论回复
20
way2888| | 2020-10-1 07:15 | 只看该作者
m564522634 发表于 2020-9-30 11:35
误码率和你校验没关系的,大概率硬件的问题,看下硬件设计方案合理不

数据量少没问题,你还能说硬件问题吗?

使用特权

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

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝