你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32f103触发外部中断后再检测断开异常

[复制链接]
paul_ttl 提问时间:2022-10-12 19:54 / 未解决
现象如下,使用stm32f103c8t6PA11端口检测下降沿信号,外部中断采用的是下降沿触发,信号脉宽大于100us,现在现象是每次脉冲信号过来都会触发外部中断,然后我在中断里面延时20us后再次判定IO口状态时,检测到信号端口值为1,偶尔出现为0的情况,目前很费解,明明下降沿中断已经进来了,但是读取端口的状态确和预想的不一样,下面是初始化和检测部分的代码
IO端口初始化程序

外部中断初始化和检测程序


里面的MAGNETRON_WORK_ERR_IN变量是宏定义的
#define MAGNETRON_WORK_ERR_IN   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)
收藏 评论8 发布时间:2022-10-12 19:54

举报

8个回答
butterflyspring 回答时间:2022-10-14 10:07:52
检查一下,还有没有其他的外部中断,恰好也用到了端口11呢?因为外部中断入口是几组IO口公用的。 或者在IO初始化时不小心打错了。
paul_ttl 回答时间:2022-10-13 09:20:03
代码没有显示,我重新上传下

IO初始化

IO初始化
中断处理子函数1.jpg
外部中断初始化1.jpg
杨小杨 回答时间:2022-10-13 09:40:58
中断里面不能加延时,加了中断运行就不正常。
wenyangzeng 回答时间:2022-10-13 10:22:11
中断到来时需要保护堆栈等一系列操作,需要耗费一段时间,再加上20uS延时,估计已经接近脉冲上升沿了,把延时20uS去掉试看看。
butterflyspring 回答时间:2022-10-13 10:31:04
还有没有其他中断,也许被其他中断导致处理导致延时。另外外部信号是否有扰动,确实读到了高电平。
paul_ttl 回答时间:2022-10-13 14:04:44
wenyangzeng 发表于 2022-10-13 10:22
中断到来时需要保护堆栈等一系列操作,需要耗费一段时间,再加上20uS延时,估计已经接近脉冲上升沿了,把延 ...

延时去掉试了,也改短试了,都不行;触发信号用示波器直接测量到单片机口的,每次低电平持续时间都会大于100us,按道理说这个时间只是做一个端口的判定是完全足够的
paul_ttl 回答时间:2022-10-13 14:06:05
butterflyspring 发表于 2022-10-13 10:31
还有没有其他中断,也许被其他中断导致处理导致延时。另外外部信号是否有扰动,确实读到了高电平。 ...

干扰的话目前看没有的,系统确实还有其他的中断,不过我已经把外部中断的优先级调整到最高了,其他中断的优先级都比他低
paul_ttl 回答时间:2022-10-13 14:07:31
杨小杨 发表于 2022-10-13 09:40
中断里面不能加延时,加了中断运行就不正常。

应该不会吧,我理解进入中断后再没有其他事件打断的情况下,应该是一直执行下去的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版