如何使用keil为stm32f429i发现板实现长按键事件?

时间:2017-12-21 11:18:08

标签: button stm32 stm32f4discovery long-press

我将键盘连接到stm32f429i板,并且能够在板的LCD屏幕上显示键盘的相应按钮。短按工作正常,但我不知道如何实施长按键事件。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

编辑:作为suggested by PeterJ_01,使用定时器中断是最优雅的方式。不要将GPIO中断用于按钮!

如果您使用的是Hardware Abstraction Layer (HAL)库,则可以在GPIO中断中执行以下操作:

static int timestamp_pressed = -1;  // -1 means not pressed

if (timestamp_pressed == -1) {
    // user just pressed the button
    timestamp_pressed = HAL_GetTick();  // milliseconds since startup
} else if (HAL_GetTick() - timestamp_pressed > 2000) {
    // 2000 milliseconds = 2 seconds are over
    // << your code

    timestamp_pressed = -1;
}

如果您不使用HAL并且不想使用常规定时器中断(来自TIM1,TIM2,TIM3,......),您可以考虑使用SysTick定时器(带中断或不带中断)。互联网上有很多关于它的信息;)