OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5080|回复: 10

串口数据丢包,每隔10(或11)个数据丢失一个字节

[复制链接]

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
发表于 2018-2-6 11:16:51 | 显示全部楼层 |阅读模式
5金钱

串口1重点处理函数

串口1重点处理函数

串口3的中断处理函数

串口3的中断处理函数
本实验我想实现  读卡器--USART1--STM32--USART3--PC。PC通过USATR3发送一个命令到STM32,USART1将USART3接受到的数据发给读卡器,读卡器马上回卡的ID。现在出现的问题每接受10个或11个字节后会丢失一个。嗯网上有人说中断只管接受,主函数发送,由于客观原因不想使用这种模式,请问上述中断函数逻辑哪里出现问题呢?望各位大大详细讲解一下哈。PS读卡器等硬件问题确保没错,应该是程序逻辑有瑕疵。

最佳答案

查看完整内容[请看2#楼]

在串口1接收完数据的时候设置一个接收完成标志位,然后在定时器中扫描这个标志位,如果标志位置位就用串口2发送接收到的数据,发送完成后将标志位清0.这样两个串口是独立的互不干扰。还能保证数据的时效性。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-2-6 11:16:52 | 显示全部楼层
18816780210 发表于 2018-2-8 17:17
上述问题我已经解决了,我还有一个问题就是我串口1接受回来的数据要经过处理再从串口2发送出去,有什么好 ...

在串口1接收完数据的时候设置一个接收完成标志位,然后在定时器中扫描这个标志位,如果标志位置位就用串口2发送接收到的数据,发送完成后将标志位清0.这样两个串口是独立的互不干扰。还能保证数据的时效性。
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
 楼主| 发表于 2018-2-6 18:00:56 | 显示全部楼层
求助啊
回复

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-2-8 10:04:32 | 显示全部楼层
波特率调小一些   我的也是出现问题   大于9600就会丢数据   
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-2-8
在线时间
18 小时
发表于 2018-2-8 11:11:58 | 显示全部楼层
。。。。。。。。。。。。
发送的时候占用中断呢,造成有的数据接收不进来,不再中断里写就没事了,
或者保证发送数据的时候没有接收
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-2-8 11:43:36 | 显示全部楼层
为什么要把发送代码也写在中断里面呢?除非你能确保发送的时候没有接收,接收的时候没有发送,否则很容易出错。
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
 楼主| 发表于 2018-2-8 17:17:42 | 显示全部楼层
HXYDJ 发表于 2018-2-8 11:43
为什么要把发送代码也写在中断里面呢?除非你能确保发送的时候没有接收,接收的时候没有发送,否则很容易出 ...

上述问题我已经解决了,我还有一个问题就是我串口1接受回来的数据要经过处理再从串口2发送出去,有什么好的办法保证准确率又保证时效呢,我自己目前来说想不到,有没有思路或者差不多的代码给我参考一下呢?
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
 楼主| 发表于 2018-2-8 17:17:57 | 显示全部楼层
上述问题我已经解决了,我还有一个问题就是我串口1接受回来的数据要经过处理再从串口2发送出去,有什么好的办法保证准确率又保证时效呢,我自己目前来说想不到,有没有思路或者差不多的代码给我参考一下呢?
回复

使用道具 举报

23

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2014-3-9
在线时间
103 小时
发表于 2018-2-8 17:21:14 | 显示全部楼层
双缓冲+DMA
回复

使用道具 举报

6

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2017-9-28
在线时间
73 小时
发表于 2018-3-5 16:15:57 | 显示全部楼层
18816780210 发表于 2018-2-8 17:17
上述问题我已经解决了,我还有一个问题就是我串口1接受回来的数据要经过处理再从串口2发送出去,有什么好的 ...

楼主你这个问题解决了吗,可否提供一下思路
回复

使用道具 举报

4

主题

17

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-2-5
在线时间
18 小时
 楼主| 发表于 2018-3-7 14:57:23 | 显示全部楼层
PURSRE 发表于 2018-3-5 16:15
楼主你这个问题解决了吗,可否提供一下思路

就是在串口中断的时候别干太多事情,我没记错我当时就闪太多事情了,导致掉包,串口中断应该只接受数据就行了,数据处理中断外处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 20:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表