双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

STM32F103按键中断消抖问题求教!

null_L null_L 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近在学习STM32,想实现4个按键的中断控制,现在有几个问题,想问下。
1:按键利用中断方式控制是不是就能避免抖动?
我认为是不行的,所以想在外部中断处理函数中加入延时起到消抖的目的,但是加入延时函数后,中断函数就无法运行,在网上搜索后我发现是不能在中断函数中加入延时的,延时函数如下:
void delay_ms(u32 time)
{
delaytime=time;
while(delaytime!=0);
}
...
void SysTick_Handler(void)
{
delaytime--;
}

2:那么现在有几个解决方案:
一:在中断函数中仅做状态标志传递,在主函数中用switch根据不同的状态值运行具体的程序,这个办法可以,但是我还是不清楚能不能做到消抖。
二:我在网上看到有人修改内核中的这个函数:
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */

SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}

里面的 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);,改为 NVIC_SetPriority (SysTick_IRQn, 1);然后在中断函数中加入延时函数,我试了一下,发现还是不行。
问题有点多,不过是确实想了很久,不知道应该怎么比较好地解决,希望大家不吝赐教!
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
null_L
单片机/工控 27,522 成员 28,796 内容