搜索
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F1] 串口误码的问题

[复制链接]
425|26
 楼主 | 2020-9-28 16:50 | 显示全部楼层 |阅读模式
串口在接收大量数据的时候会出现误码,而且比较奇特的是经常错误的数据比正常数据多了20byte。

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

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

使用特权

评论回复

评论

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

使用特权

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

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

使用特权

评论回复
| 2020-9-28 20:01 | 显示全部楼层
波特率高,抗干扰的能力就弱。尤其是附近有类似频率干扰源的时候,很容易被干扰。
你先换个波特率试试
如果有外接线,把线换个屏蔽线试试

使用特权

评论回复
| 2020-9-28 20:16 | 显示全部楼层
奇偶校验 不要用!!!!!!

使用特权

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

使用特权

评论回复
| 2020-9-29 09:52 | 显示全部楼层
東南博士 发表于 2020-9-28 20:16
奇偶校验 不要用!!!!!!

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

使用特权

评论回复
| 2020-9-29 13:33 | 显示全部楼层
djz1992 发表于 2020-9-28 19:14
怎么来测这个波特率误差呢?

天啦 你怎么 提问 这个 ??
逻辑分析仪 就可以测试 波特率基差 。


你说:大量数据 才出错,小量 不会错,
那,多半是 “吞吐量” 不足够 。。。

使用特权

评论回复
| 2020-9-29 14:27 | 显示全部楼层
经常出错的话软件的问题可能性大,除非波特率非常高

使用特权

评论回复
| 2020-9-30 07:56 | 显示全部楼层
肯定是处理程序的问题

使用特权

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

ok,好的

使用特权

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

是的,明白了

使用特权

评论回复
 楼主 | 2020-9-30 08:00 | 显示全部楼层
ayb_ice 发表于 2020-9-29 14:27
经常出错的话软件的问题可能性大,除非波特率非常高

115200应该不算高吧

使用特权

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

学习了。。。!

使用特权

评论回复
 楼主 | 2020-9-30 08:02 | 显示全部楼层
東南博士 发表于 2020-9-28 20:16
奇偶校验 不要用!!!!!!

好的好的

使用特权

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

使用特权

评论回复
| 2020-9-30 08:29 | 显示全部楼层
djz1992 发表于 2020-9-30 08:00
115200应该不算高吧

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

使用特权

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

使用特权

评论回复
| 2020-9-30 11:35 | 显示全部楼层
误码率和你校验没关系的,大概率硬件的问题,看下硬件设计方案合理不

使用特权

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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