32F429IDISCOVERY TrueSTUDIO에서 타이머 인터럽트 사용하기

2019. 7. 10. 10:09임베디드/32F429IDISCOVERY

 

STM32F4 시리즈의 타이머에 대한 요약이다. AVR 시리즈와 다르게 타이머의 유형이 여러 개 존재한다. 일단 이번 예제에서는 PWM이 아닌 카운터만을 이용할 것이기 때문에 Basic 타이머인 TIM7번을 사용할 것이다. TIM7번은 APB1에 연결되어 있다

  

 

내부 클럭은 오차가 크므로, 보다 오차가 적은 정확한 외부 클럭은 타이머 클럭으로 사용하는 것이 올바른 방법이다. 외부 클럭을 8MHz이므로 만일 잘못 기입이 되어 있다면 8MHz로 수정을 하고 HSE와 PLLCLK를 클릭해서 타이머 7번의 APB1 클럭을 84MHz로 맞춘다

 

Pinout & Configuration은 다음과 같다

 

 

 

타이머의 Prescaler과 Counter Period에 대해서 말하면 각각 AVR에서 Prescaler과 OCRn(Auto Reload)값과 같다. 따라서 1초 마다 LED를 toggle시킬 것이기 때문에, 1/84M * 10000 * 8400 = 1s가 된다. 각각 1을 뺀 이유는 0부터 시작해서 1을 세기 때문이다

 

프로젝트를 생성하자

 

프로젝트 상에서 타이머 인터럽트 부분을 보면, 타이머 update 부분인 갱신될 때의 인터럽트 소스를 보면 결국엔 HAL_TIM_PeriodElapsedCallback 함수를 호출하게 된다

 

 

해당 함수는 __weak 옵션으로 되어 있어서 main.c에 복사해 원하는 동작을 기술하면 된다

그리고 타이머를 인터럽트로 시작시키기 위해선 HAL_TIM_Base_Start_IT(&htim7);을 추가해줘야 한다

 

전체코드