外部中断无法触发的问题记录

本文探讨了STM32中SysTick中断的优先级问题,指出其默认优先级最低,可能导致外部GPIO中断无法触发。作者发现误以为SysTick的优先级高于外设中断,实际上并非如此。解决方法是通过延迟消抖避免在中断中调用HAL_Delay导致死循环。参考了相关博客,提供了解决此类问题的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

GPIO外部中断一直无法触发

分析

CUBE生成的程序中, SysTick是中断型延时(利用中断来查询时间到了没)。

   /* Use systick as time base source and configure 1ms tick (default clock after Reset is MSI) */ 
    HAL_InitTick(TICK_INT_PRIORITY);
    #define  TICK_INT_PRIORITY            ((uint32_t)0x000F)    /*!< tick interrupt priority */  

SysTick是内核中断,优先级别默认最低。

(可以用内核函数来修改~ 当然,这就要看内核M3的书了,而不是看STM32的参考手册那么简单。暂时就不深入研究,日后更新。)

总结起来就是,就是传说中优先级别默认最低,虽然SysTick一直在跑,但是没进入到中断来读取它的值~
(不知是哪里让我潜意识地认为SysTick级别比外设都高,导致这问题)
如果中断里调用HAL_Delay就会停在那里,因为根本不会进入那个级别更低的中断。

解决办法

延迟消抖改为
unsigned int count = 2500;
while(count–); //消抖

参考博客

1、为何HAL库的工程“进入不了”外部中断?
2、中断里调用HAL_Delay()进入死循环的原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值