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

STM32cubeIDE PA0口外部中断改变LED灯状态时,GPIO翻转函数放在外部中断回调函数中不被调用,放在EXTI0_IRQHandl函数才起作用

[复制链接]
一路生花 提问时间:2023-10-29 09:43 / 未解决
收藏 评论4 发布时间:2023-10-29 09:43

举报

4个回答
STMCU-管管 回答时间:2023-10-30 08:36:44
看看你配置的的中断优先级
xmshao 回答时间:2023-10-30 10:10:23
如果你的代码是基于hal库组织的,中断回调函数只是中断服务函数的一部分。如果说你能进外部中断函数体而没法进一步运行相关回调函数,看看你是否在调用回调函数前把相关中断事件标志清除了,而调用回调函数前往往会先检查相关事件标志的,若标志无效了自然不会继续调用回调函数。你不妨自己好好检查下相关标志和代码逻辑。
butterflyspring 回答时间:2023-10-30 10:37:25
可以断点放在中断服务函数起点,单步调试一下,看看为什么没有走进回调函数。
xu@xupt 回答时间:2023-10-30 21:42:11

在STM32CubeIDE中,当使用外部中断时,通常需要在外部中断回调函数(例如HAL_GPIO_EXTI_Callback)中处理中断事件。在这个回调函数中,您可以执行一些操作,例如GPIO翻转函数来改变LED的状态。

但是,有时候在回调函数中执行GPIO翻转函数可能不起作用,这可能是因为回调函数的执行时间过长或者优先级不正确导致的。在这种情况下,您可以考虑将GPIO翻转函数放在EXTI0_IRQHandler函数中,该函数是外部中断的实际中断处理函数。

EXTI0_IRQHandler函数是由STM32CubeIDE自动生成的,用于处理外部中断0的中断事件。在这个函数中,您可以直接调用GPIO翻转函数来改变LED的状态。这样,当外部中断0发生时,中断处理函数会立即执行GPIO翻转操作,而不需要等待回调函数的执行。

需要注意的是,将GPIO翻转函数放在EXTI0_IRQHandler函数中可能会导致中断处理时间变长,因此需要根据具体应用场景进行评估。如果中断处理时间过长,可能会影响其他的中断响应或系统性能。

总结起来,如果在外部中断回调函数中执行GPIO翻转函数不起作用,您可以尝试将它放在EXTI0_IRQHandler函数中。但请注意评估中断处理时间和系统性能的影响。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版