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을 확인한다.
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]
Instance가 TIM7인 HAL_TIM_PeriodElapsedCallback함수가 10us마다 호출되므로
PB12 Pin이 10us마다 toggle되는 것을 확인 할 수 있다.
[STM32]8bit parallel-in/serial-out shift registers (0) | 2022.12.12 |
---|---|
[STM32]8bit Serial-in/Parallel-out Shift register Control (0) | 2022.12.12 |
[STM32]Uart 통신 (HAL_UART_Receive_IT/HAL_UART_Transmit) & printf (0) | 2022.12.09 |
[STM32]GPIO_Output/GPIO_Input/GPIO_EXTI & Systick (0) | 2022.12.09 |
[STM32]IDE Project 생성하기 (0) | 2022.12.08 |