상세 컨텐츠

본문 제목

[STM] TIM7(Timer) 타이머 인터럽트

Firmware/STM

by StephanosJ 2022. 12. 23. 14:02

본문

반응형

Timer(TIM7)를 이용하여 10us 마다 interrupt발생시키는 함수 구현하기

Timer event계산식은 다음과 같다.

Update Event(Hz) = (Time Clock) / ( (Prescaler + 1) * (Period + 1) )

 

1. Time Clock를 확인한다. (Time Clock = 84MHz = 84000000Hz)

ioc파일에서 Clock Configuration을 확인한다.

STM32F429ZI MCU를 사용중이며 STM32F429ZI Datasheet를 확인하면

TIM7은 APB1 BUS를 사용한다.

 

그래서 ioc파일의 Clock Configuration에서 APB1 Timer Clock을 확인한다.

Clock Configuration

2. TIM7을 Enable하고 Prescaler와 Period를 설정한다. (Prescaler = 83 , Period = 9)

 

3. NVIC Settings에서 interrupt를 enable한다.

4. 초기화할때 Timer(TIM7)를 start한다.

HAL_TIM_Base_Start_IT(&htim7) ; 

 

5. Interrupt Callback함수를 재정의한다.

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM7)
    {
     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12);
    }
}

 

 

6. Instance가 TIM7인 HAL_TIM_PeriodElapsedCallback함수가 10us마다 호출되는 것을 확인할 수 있다.

Update Event(Hz) = (Time Clock) / ( (Prescaler + 1) * (Period + 1) )

                               = 84000000 / (84 * 10)

                               = 100000 [Hz] = 1/100000[s] = 0.00001[s] = 10[us]

X축한칸이 10us

Instance가 TIM7인 HAL_TIM_PeriodElapsedCallback함수가 10us마다 호출되므로

PB12 Pin이 10us마다 toggle되는 것을 확인 할 수 있다.

반응형

관련글 더보기