본문 바로가기
Stm32/개인 학습

Timer[2] - 타이머 인터럽트

by [Akashic Records] 개발의선지자 2024. 6. 13.

 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.

    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

    아래 글은 STM32F429ZI datasheet와 Reference manual를 기준으로 작성되었습니다.

    (임베디드 개발자에게 datasheet와 Reference manual을 지도와 나침판과 다름없이 존재)

 

해당 글에서는 STM32 TIMER 제어용 레지스터와 HAL_DRIVER 함수를 정리하고자 한다.

STM32 타이머는 다양한 기능들은 내장하고 있다. 지난 포스트에서 기본 타이머와 카운터에 대해 살펴 보았다. 

일반적으로 실무에서는 인터럽트 모드에서 타이머와 카운터를 사용하곤 한다.(ADC + 타이머 인터럽트)

 

이번 포스트에서는 타이머 인터럽트에 대해 적어보고자한다.

Memory map

 

위 메모리 맵을 보면 TIM 별로 사용되는 APB1, APB2 버스 라인이 다르고,  BUS 라인 별로 MAX CLOCK SPEED가 다르다. 따라서 TIM 별 MAX CLOCK SPEED를 확인하고 사용해야한다.

 

1. While문에서 코드 동작

2. 인터럽트가 걸리면 callback 함수가 호출되고

3. callback 함수 실행이 완료

4. 원래 While문으로 돌아간다.

 

타이머 인터럽트 과정 :

1. TIM Time Base Start_IT(TIM_HandleTypeDef *htim )

2. HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) 

3. HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

/* TIM Update event */
  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET)
  {
    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET)
    {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
      htim->PeriodElapsedCallback(htim);
#else
      HAL_TIM_PeriodElapsedCallback(htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
    }
  }
 * @brief  Period elapsed callback in non-blocking mode
  * @param  htim TIM handle
  * @retval None
  */
__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  //해당 블록 안에 실행 코드 작성
}

 

참고

https://unknownpgr.com/posts/timer/index.html

'Stm32 > 개인 학습' 카테고리의 다른 글

ADC란?(PCM)[1]  (0) 2024.07.05
Timer[3] - PWM  (0) 2024.06.19
Interrupt(EXTI)  (0) 2024.06.08
TIMER [1]  (0) 2024.05.09
GPIO(3) 입력 제어  (0) 2024.05.09