OpenEdv-开源电子网

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

如果不在串口发送前加延时 会导致数据叠加出错 有什么好的办法解决么

[复制链接]

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
发表于 2022-1-3 15:28:52 | 显示全部楼层 |阅读模式
本帖最后由 丫木24 于 2022-1-3 15:32 编辑

   屏幕截图 2022-01-03 152108.png 屏幕截图 2022-01-03 152132.png 屏幕截图 2022-01-03 152641.png 屏幕截图 2022-01-03 152153.png 屏幕截图 2022-01-03 152654.png 微信图片_20220103153104.png
使用外部中断读取PA0—7的状态  然后通过串口发送  如果不在串口发送前加延时  会导致数据叠加出错   有什么好的办法解决么  还有为什么出现这个问题


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3625
金钱
3625
注册时间
2019-8-14
在线时间
1054 小时
发表于 2022-1-4 10:35:02 | 显示全部楼层
不加延时的话,可能是代码运行快了,串口没有发送完成就又发送,导致的吧,试下提高波特率有没有这个现象
回复 支持 反对

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6741
金钱
6741
注册时间
2017-4-12
在线时间
1258 小时
发表于 2022-1-4 11:54:17 | 显示全部楼层
for(int i = 0 ; i < num; i++)
{
      while(...) ; //判断是否发送完成
      send byte (array[i]);
}
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-4 14:27:46 | 显示全部楼层
hou18 发表于 2022-1-4 10:35
不加延时的话,可能是代码运行快了,串口没有发送完成就又发送,导致的吧,试下提高波特率有没有这个现象

现在发现是因为外部中断采用的是上下降沿触发   当IO口变化的时候  中段嵌套导致发送多次 比如IO1初始状态是高 变为 IO1置低IO2置高    IO1置低下降沿触发就是IO1加IO2  数据就是0x03    IO2置高上升沿触发 数据就是0x02  我实际想要的效果是扫描IO状态  只需要发送一次正确0x02数据   不要0x03  有什么好的思路
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-4 14:28:37 | 显示全部楼层
245925587 发表于 2022-1-4 11:54
for(int i = 0 ; i < num; i++)
{
      while(...) ; //判断是否发送完成

发送函数好像不是出现问题的主要原因
回复 支持 反对

使用道具 举报

11

主题

2146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4886
金钱
4886
注册时间
2015-1-10
在线时间
611 小时
发表于 2022-1-5 14:29:51 | 显示全部楼层
你这是要外部中断后读取电平发串口,还是定时轮询GPIO状态发串口?
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-6 15:31:45 | 显示全部楼层
阿侑kevin 发表于 2022-1-5 14:29
你这是要外部中断后读取电平发串口,还是定时轮询GPIO状态发串口?

这是外部中断做的   
回复 支持 反对

使用道具 举报

11

主题

2146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4886
金钱
4886
注册时间
2015-1-10
在线时间
611 小时
发表于 2022-1-6 15:55:42 | 显示全部楼层
丫木24 发表于 2022-1-6 15:31
这是外部中断做的

中断后立马读一下GPIO状态,这个不费时间的,你要是中断外读的话中断抖动可能会导致GPIO状态变化
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-6 18:08:21 | 显示全部楼层
阿侑kevin 发表于 2022-1-6 15:55
中断后立马读一下GPIO状态,这个不费时间的,你要是中断外读的话中断抖动可能会导致GPIO状态变化

我理解的是因为外部中断采用的是上下降沿触发   当IO口变化的时候  中段嵌套导致发送多次 比如IO1初始状态是高 变为 IO1置低IO2置高    IO1置低下降沿触发就是IO1加IO2  数据就是0x03    IO2置高上升沿触发 数据就是0x02  还没有想到解决的办法???
现在采用定时器轮询的方法 屏幕截图 2022-01-06 180432.png 屏幕截图 2022-01-06 180544.png    
能不能在效率上再提升  或者有什么更好的思路
回复 支持 反对

使用道具 举报

28

主题

113

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1501
金钱
1501
注册时间
2021-8-10
在线时间
273 小时
发表于 2022-1-6 19:47:25 | 显示全部楼层
你这个问题我刚在51黑论坛看见个类似的
回复 支持 反对

使用道具 举报

11

主题

2146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4886
金钱
4886
注册时间
2015-1-10
在线时间
611 小时
发表于 2022-1-7 09:07:59 | 显示全部楼层
丫木24 发表于 2022-1-6 18:08
我理解的是因为外部中断采用的是上下降沿触发   当IO口变化的时候  中段嵌套导致发送多次 比如IO1初始状 ...

每次进中断都刷新一遍GPIO状态呢,别进某个就刷新某个GPIO
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-7 09:40:19 | 显示全部楼层
阿侑kevin 发表于 2022-1-7 09:07
每次进中断都刷新一遍GPIO状态呢,别进某个就刷新某个GPIO

屏幕截图 2022-01-07 093604.png Snipaste_2022-01-07_09-33-37.png 在中断服务函数里直接发送的效果  最后一次数据是对的   会有过程数据发出 Snipaste_2022-01-07_09-29-49.png 这是用定时轮询的效果   间隔50ms  速度上去了就丢包了

回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-7 09:41:00 | 显示全部楼层
橘子汁真好喝 发表于 2022-1-6 19:47
你这个问题我刚在51黑论坛看见个类似的

大佬   有没有啥好办法
回复 支持 反对

使用道具 举报

11

主题

2146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4886
金钱
4886
注册时间
2015-1-10
在线时间
611 小时
发表于 2022-1-7 10:45:32 | 显示全部楼层
丫木24 发表于 2022-1-7 09:40
在中断服务函数里直接发送的效果  最后一次数据是对的   会有过程数据发出这是用定时轮询的效果   间隔50 ...

1、你这个操作把我整懵了,串口发送不要在中断里,其次,你的中断频率要小于你的串口单包发送速率
2、看了你的输出值,你这个程序应该就类似按键扫描,不建议用中断,建议用定时器轮询,定时器可以设置为10ms,把波特率调高,每次扫描后与上一次扫描值比对,要是不一样就发送,一样就不发送
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2022-1-3
在线时间
5 小时
 楼主| 发表于 2022-1-7 11:39:15 | 显示全部楼层
阿侑kevin 发表于 2022-1-7 10:45
1、你这个操作把我整懵了,串口发送不要在中断里,其次,你的中断频率要小于你的串口单包发送速率
2、看 ...

好的  谢谢大佬
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 18:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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