STM32F103按键中断消抖问题求教!
最近在学习STM32,想实现4个按键的中断控制,现在有几个问题,想问下。
1:按键利用中断方式控制是不是就能避免抖动?
我认为是不行的,所以想在外部中断处理函数中加入延时起到消抖的目的,但是加入延时函数后,中断函数就无法运行,在网上搜索后我发现是不能在中断函数中加入延时的,延时函数如下:
2:那么现在有几个解决方案:
一:在中断函数中仅做状态标志传递,在主函数中用switch根据不同的状态值运行具体的程序,这个办法可以,但是我还是不清楚能不能做到消抖。
二:我在网上看到有人修改内核中的这个函数:
里面的 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);,改为 NVIC_SetPriority (SysTick_IRQn, 1);然后在中断函数中加入延时函数,我试了一下,发现还是不行。
问题有点多,不过是确实想了很久,不知道应该怎么比较好地解决,希望大家不吝赐教!
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);然后在中断函数中加入延时函数,我试了一下,发现还是不行。
问题有点多,不过是确实想了很久,不知道应该怎么比较好地解决,希望大家不吝赐教!
...全文
相关推荐
基于stm32f103的lcd按键可修改时间闹钟
LCD显示 按键修改实时时间 stm32F103 keil5
STM32F103R6芯片+Proteus仿真+Keil5实现按键中断点亮LED
STM32F103R6芯片+Proteus仿真+Keil5实现按键中断点亮LED 参考书目《STM32嵌入式微控制器快速上手》(第二版)第六章,实例6.5.1(连线图)
STM32F103 HAL状态机实现按键消抖,处理按键单击,双击,三击,长按事件,开启定时器中断处理
STM32F103 HAL状态机实现按键消抖,处理按键单击,双击,三击,长按事件,开启定时器中断处理
stm32f103zet6的按键实现长按、短按、双击
1、mcu:stm32f103zet6 2、实现功能: 长按实现:亮/灭LED7,并且data++;亮/灭LED8 短按:亮/灭LED6; 双击:亮/灭LED8 3、实现步骤: 利用外部中断监测按键是否被按下,按下标志位设为1; 定时器(20Ms)监测标志位、按键是否被按下,监测到不同的状态实现不同的功能; 长按时串口输出data值,使用了while,会有阻塞
STM32F103例程——用中断开启LED灯
我在编写利用中断控制开启LED灯时遇到了“按这个键,那个灯却亮了”的问题,随后我仔细而深入地分析了问题,并将程序修改完善。程序编写规范,条理清楚,注释完善。适合初学者深入研究。


单片机/工控

