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