2017-12-21 17 views

答えて

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タイマーの使用を検討することができます(割り込みありまたはなしで)。 )インターネット上でそれについて多くの情報があります;

+1

ボタンのEXTI割り込みを使用することは大きな間違いであり、避けるべきです。 –

+0

なぜそうですか?連絡バウンスのために?もしそうなら、それは私が提案したのと同様の方法で解決することができませんでしたか?それとも悪いスタイルと思われますか? – MemAllox

+0

デバウンスの時間中に割り込みでプログラムの実行をブロックする必要があるからです。タイマー割込みを使用する必要があります。 –

関連する問題