본문 바로가기

카테고리 없음

[STM32 (ARM Cortex - M)] 타이머 인터럽트(TIM)

Clock 설정은 다음과 같이한다.

Sys Clock은 최대인 180MHz로 했고 APB1 Timer Clocks는 90MHz이다.

 

Datasheet를 확인하면 Timer가 어떤 Bus의 Clock Source를 사용하는지 확인할 수 있다.

 

 

 

Prescaler : Timer에 공급되는 Clock을 원하는 값으로 분주하는 것

EX)

공급되는 Clock : 90MHz

Prescaler : 9000-1

이면

10KHz 이고 이를 시간으로 나타내면 0.1ms이다

0.1ms 마다 Counter(CNT) 레지스터의 값이 1씩 증가한다.

 

ARR(Auto-Reload Resister)로 설정된 값과 동일해지면 Overflow가 나면서 Update Interrupt가 Trigger되고 CNT의 값은 다시 0으로 돌아간다.

ARR을 10000-1으로 설정해주면 최종적으로 1Hz(1s)가 얻어진다.

-1을 해주는 이유는 0부터 Count하기 때문이다.

 

TIM2,3,4 각각에 대한 Prescaler와 Counter Period를 입력하고 각각 Global Interrupt를 Enable해준다.

 

 

TIMER의 Prescaler와 Period를 구하는 식은 아래와 같다.

 

Timer Clock[Hz] / TIM_Period + 1 / TIM_Prescaler + 1 = Frequency[Hz] 

 

그래서 각각 0.1초, 0.5초, 1초를 뽑아내려면 주기는 주파수의 역수이니까 10Hz, 2Hz, 1Hz로 설정하면 된다

 

각각 MX_TIM2_Init(); 함수를 따라가보면 아까 MX툴에서 설정해둔 값이 들어가 있는것을 볼 수 있다.

그리고 LED PB0, PB7, PB14 를 Output으로 설정한다.