2017-12-21 5 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

과 같은 방식으로 해결할 수 없습니까? 타이머 인터럽트를 사용해야합니다. –

관련 문제