STM32-TIM_Interrupt_2

이상윤·2022년 8월 30일
0

STM32

목록 보기
2/8

구현(실습)

TIM7을 Activated를 check한다.

값을 지정해줄 때, -1을 해준다.
Code generation 을 진행하면

main함수 내부에 위의 함수가 사용되고 있다.

static void MX_TIM7_Init(void)
{

  /* USER CODE BEGIN TIM7_Init 0 */

  /* USER CODE END TIM7_Init 0 */

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM7_Init 1 */

  /* USER CODE END TIM7_Init 1 */
  htim7.Instance = TIM7;
  htim7.Init.Prescaler = 10000-1;
  htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim7.Init.Period = 9000-1;
  htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM7_Init 2 */

  /* USER CODE END TIM7_Init 2 */

}

함수 내부를 보면 지정해주었던 Prescaler값과 Period 값이 사용자 설정대로 초기화 했다.

그리고 나서 update Interrupt가 발생했을 때, 어떻게 동작할 지 구현해야한다.
stm32f4xx_hal_tim.c에 보면 아래와 같이 구현되어 있다.

__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(htim);

  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_TIM_PeriodElapsedCallback could be implemented in the user file
   */
}

__weak 심볼이 설정되어 있는데 이는 프로그래머가 직접 다른 파일애서 재정의 할수 있고,
재정의 한다면 그 재정의한 함수대로 실행한다.

따라서 main함수에서 아래와 같이 정의했다.

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */

  /* USER CODE END Callback 0 */
  if (htim->Instance == TIM4) {
    HAL_IncTick();
  }
  /* USER CODE BEGIN Callback 1 */
  else if(htim->Instance == TIM7){
  	printf("%d\n", tim);
  	tim += 1;
   }
  /* USER CODE END Callback 1 */
}

else if 부분이 TIM7에서 동작할 내용이다.
예상 동작은 1초 간격으로 0부터 1씩 증가하고, 해당 내용이 TeraTerm을 통해 출력될 것이다.

참고

https://www.inflearn.com/course/stm32f4/unit/15634?tab=curriculum

0개의 댓글