embeded/Cortex-M3 STM

stm32 pwm interrupt

구차니 2025. 6. 2. 17:23

그나저나 stm32f4xx_hal_tim.c 에서 내가 만든 파일의 함수를 호출하게해서

pwm이 끝나면 카운트를 갂아 원하는 횟수만큼 소리내려고 했는데

interrupt 내에서 호출한 변수가 증가만 하고 리셋되지 않는 이상한 현상이 발생

해결책은 나중에 찾아봐야겠다.

/* stm32f4xx_hal_tim.c */


void HAL_TIM_IRQHandler(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);
      HAL_TIM_PeriodElapsedCallback(htim);
    }
  }
  ...중략
}

[링크 https://m.blog.naver.com/eziya76/220934409487]

 

__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
__HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);

void TIM3_IRQHandler(void)
{
    if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) {
        __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
        // PWM 1회 출력 후 이벤트 처리
    }
}

 

쉬운 방법으로 One pulse mode도 있다