求助:关于stm32F103,串口接收数据问题

2019-10-15 19:08发布

有两颗103的ARM,一颗使用USART3,一颗使用UART4;
第一颗的USART3发送数据通过PCB到DP接口,然后走DP线,到另外一个PCB的DP接口,然后进另一颗的UART4接收数据;
在波特率设置为9600或者以上时,出现UART4接收数据偶尔丢字节,通过加计数,发现UART4进入中断的次数和少于USART3发送次数;
(发送数据按自定义协议发送,有包头和Checksum;波特率为9600时,USART3每隔200MS发送一次数据,每次7个字节,发送1000次;UART4收到数据,发现收到数据次数偶尔为998或者999,有时候正常,进中断的次数计数偶尔为6998或者6999,正常应该为:7000。)
修改波特率为2400,发送接收数据正常(测试几W次,暂未发现异常)

麻烦大神帮忙看看会是什么问题

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
fengye00
1楼-- · 2019-10-16 22:45
正点原子 发表于 2016-12-12 20:49
说明是串口速度高才出现数据丢失,可能的问题是中断服务程序写的不好,处理不过来

中断服务函数中,只是接收数据存进buff;还有一些相关全局变量的赋值
fengye00
2楼-- · 2019-10-17 04:17
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-10-17 07:09
fengye00 发表于 2016-12-13 11:13
中断服务函数中,只是接收数据存进buff;还有一些相关全局变量的赋值

这看上去也没什么问题哦
用外部ttl串口模块,监控下传输数据线上的数据吧,看看是否干扰出错了
fengye00
4楼-- · 2019-10-17 12:25
正点原子 发表于 2016-12-17 21:17
这看上去也没什么问题哦
用外部ttl串口模块,监控下传输数据线上的数据吧,看看是否干扰出错了

找到问题了,是因为有个外部中断一直在发生导致的; 现在需要解决,但是外部中断的优先级是要高于串口的,而且收到中断,必须在中断服务函数中进行处理,需要几ms的时间,不能收下来再去主环处理。请问原子大大,有什么好的处理方式吗?

一周热门 更多>