[STM32F1] 串口接收丢失字节问题

[复制链接]
9090|58
sting_yang 发表于 2017-6-24 11:47 | 显示全部楼层
串口中断代码太多了
menji13 发表于 2017-6-24 11:48 | 显示全部楼层
最近一个项目中一块stm32f103rc的只用到了48MHz,用到了5个串口,其中4个串口每次接收都需要接收从机发来的连续250个字节的包,一个不丢。个人不用库,只能说你整体代码太累赘或者串口优先级太低。可以设置一个过载错误中断看看。
MOn51 发表于 2017-6-24 12:38 | 显示全部楼层
根本就不应该在中断程序里去判别。
shahexu 发表于 2017-6-24 15:41 | 显示全部楼层
怎么判断数据漏掉了,个数少了,还是其他原因
Y634640993 发表于 2017-6-24 16:14 | 显示全部楼层
建议楼主使用DMA+环形缓存区
天南星雨 发表于 2017-6-24 16:48 | 显示全部楼层
首先确认是偶发事件还是没接收一组数据都会有丢数据,最好将程序中其他功能都暂时屏蔽掉,确认是代码本身问题还是优先级问题。
mackyming 发表于 2017-6-24 19:07 | 显示全部楼层
降低波特率吧,按我的经验实际使用最好不要超过57600,数据量大最好启用下硬件CRC校验,如果是控制数据的话建议还是改CAN总线吧
 楼主| coderdd 发表于 2017-6-24 19:34 | 显示全部楼层
多谢大家,波特率降到9600暂时没发现问题,可能是systick一毫秒中断导致抢占或者其它原因吧。后面再慢慢调试看看
 楼主| coderdd 发表于 2017-6-24 19:41 | 显示全部楼层
menji13 发表于 2017-6-24 11:48
最近一个项目中一块stm32f103rc的只用到了48MHz,用到了5个串口,其中4个串口每次接收都需要接收从机发来的 ...

嗯,赞一个,我用的内部晶振,不知会不会受影响。我也在想可能是优先级的问题,因为有个1毫秒的systick
Lbsonggz 发表于 2017-6-25 10:58 | 显示全部楼层
1. 降低波特率至9600或4800,
2,高波特率使用外部高精度晶振
3,串口中断仅做接收,设置标志,标志置位也就是接收完成后扔给主函数处理
lemonboard 发表于 2017-6-25 13:37 | 显示全部楼层
Y634640993 发表于 2017-6-24 16:14
建议楼主使用DMA+环形缓存区

这个是正解吧
1124008619 发表于 2017-6-25 16:58 | 显示全部楼层
小白 同求,优先级的设立怎么设?
1124008619 发表于 2017-6-25 16:58 | 显示全部楼层
小白 同求,优先级的设立怎么设?
tdh03z 发表于 2017-6-25 17:17 来自手机 | 显示全部楼层
用DMA方式接收,极大减少中断频率
绿筱lvx 发表于 2017-6-28 15:39 | 显示全部楼层
dma接收
GhostGuardian 发表于 2017-7-11 11:22 | 显示全部楼层
中断程序代码逻辑不太合理,容错率也低
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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