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으로 설정한다.