OpenEdv-开源电子网

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

stm32f103普通外部中断多次进入,求助

[复制链接]

2

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-18
在线时间
5 小时
发表于 2021-1-26 00:36:35 | 显示全部楼层 |阅读模式
4金钱
stm32f103c8t6,使用PB3做为外部中断输入,用来做流量计的。实际硬件中发现计量不准确,摘除传感器后,直接用手短接PB3来模拟中断的触发,通过mdk的硬件调试,观察到触发一次大约得上百个数值的增加,明显不正常。(记得很久以前也做过这样的测试,用手直接短接外部中断,基本上都是短接一下,数值增加1,当时也没有加防抖程序)。我怀疑程序可能存在问题,用stm32cubeMX单独写了个只有中断的工程,用手直接短接pb3还是一次触发数值增加上百。
另外我尝试过pb4.5.6,做为外部中断,或者改变IO上拉、下拉模式,改变上升沿、下降沿触发等,依然多次触发,使用stm32f103RC的板子同样如此。
我自己陷进去了,怎么想也想不通。请大家帮忙分析下,



屏幕截图 2021-01-26 003448.png
屏幕截图 2021-01-26 003410.png

最佳答案

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

定时器输入捕获,直接根据频率计算流速,定时器有硬件滤波,然后你可以看一下你的流量计输入频率最大是多少,如果只是通过中断的方式计数然后定时计算流速的话也可以,但是EMC的EFT可能会过不了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
250
金钱
250
注册时间
2019-5-11
在线时间
39 小时
发表于 2021-1-27 09:28:18 | 显示全部楼层
应该不是你描述的问题,你手动触发中断,也可能是中断响应了很多次。另外,你要想进行试验,可以使用其他管脚产生一个单独脉冲来试验。
回复

使用道具 举报

11

主题

2149

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4926
金钱
4926
注册时间
2015-1-10
在线时间
618 小时
发表于 2021-1-26 00:36:36 | 显示全部楼层
syt1128 发表于 2021-1-26 00:50
我刚想起来,是不是有个功能:定时器计数器?

定时器输入捕获,直接根据频率计算流速,定时器有硬件滤波,然后你可以看一下你的流量计输入频率最大是多少,如果只是通过中断的方式计数然后定时计算流速的话也可以,但是EMC的EFT可能会过不了
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-18
在线时间
5 小时
 楼主| 发表于 2021-1-26 00:50:33 | 显示全部楼层
我刚想起来,是不是有个功能:定时器计数器?
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
发表于 2021-1-26 13:55:25 | 显示全部楼层
示波器抓下,触发的时候,电平到底是啥样的?
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-18
在线时间
5 小时
 楼主| 发表于 2021-1-26 19:45:39 | 显示全部楼层
阿侑kevin 发表于 2021-1-26 13:27
定时器输入捕获,直接根据频率计算流速,定时器有硬件滤波,然后你可以看一下你的流量计输入频率最大是多 ...

谢谢
我用的流量传感器是个霍尔传感器。
我想先直接短接io来测试下,是否能正确收到一个脉冲信号。
另外,我以前测试过可以短接一下io就能正确收到一次信号(监控mdk里面的一个自定义变量),不过我忘记是用的stm32还是用的51系列的的单片机、用的是中断还是定时器了。
现在只想用一种简单的方法能解决问题,不想浪费很多时间
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-18
在线时间
5 小时
 楼主| 发表于 2021-1-26 19:46:46 | 显示全部楼层
jermy_z 发表于 2021-1-26 13:55
示波器抓下,触发的时候,电平到底是啥样的?

没有
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-18
在线时间
5 小时
 楼主| 发表于 2021-1-26 23:19:52 | 显示全部楼层
刚才查看了下正点原子的stm32开发板源程序,发现在中断函数中有个10ms的延时,结果触发一次数值只增加2(按住io时,和离开io时各增加1)
去掉10ms延时函数,触发一次数值增加上百。
有可能我上次用的是at89s51的计数器模式,那样触发一次才产生1个中断,记不清了。
再去复习下计数器模式。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
发表于 2021-1-27 10:02:42 | 显示全部楼层

示波器都没有,那就。。。
学无止境
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2021-1-18
在线时间
5 小时
 楼主| 发表于 2021-1-27 23:00:57 | 显示全部楼层
ma3264175 发表于 2021-1-27 09:28
应该不是你描述的问题,你手动触发中断,也可能是中断响应了很多次。另外,你要想进行试验,可以使用其他管 ...


刚才验证了下,用其他引脚产生脉冲来触发中断io,中断完全可靠。谢谢解决了问题。
从来没想过用这种方法模拟中断,一直都是靠手抖。
我受很久以前的一个程序影响,记忆中用手短接一下就可以触发一次,陷进去了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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