1. CubeMX 설정
- NVIC Setting : 인터럽트 Enabled 체크
- Code generation
2. 코드 작성
1) main.c
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3); // Timer 시작
/* USER CODE END 2 */
2) stm32f1xx_it.c
// 인터럽트 발생 시, IRQ 핸들러 함수 호출 -> HAL_TIM_IRQHandler 함수 호출
void TIM3_IRQHandler(void)
{
/* USER CODE BEGIN TIM3_IRQn 0 */
/* USER CODE END TIM3_IRQn 0 */
HAL_TIM_IRQHandler(&htim3);
/* USER CODE BEGIN TIM3_IRQn 1 */
/* USER CODE END TIM3_IRQn 1 */
}
3. HAL_TIM_IRQHandler 함수 호출되면 함수 내부에서 비교 문의 모두 true 상태이면 HAL_TIM_PeriodElapsedCallback() 함수를 호출
/* 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 */
}
}
4. main 함수 아래에 HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 함수 작성
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
*/
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
< HAL Library 를 쓰지 않으려면 >
cubeMX 설정에서 call HAL handler 항목을 체크하지 않으면
stm32f1xx_it.c 에서 IRQHandler 함수에서 위와 다르게 HAL_TIM_IRQHandler 함수 호출이 되지 않는다.
IRQHandler 함수 내부에 직접 알맞은 코드를 작성하면 된다.
void TIM4_IRQHandler(void)
{
/* USER CODE BEGIN TIM4_IRQn 0 */
/* USER CODE END TIM4_IRQn 0 */
/* USER CODE BEGIN TIM4_IRQn 1 */
// -------------- 함수 작성 ------------------
/* USER CODE END TIM4_IRQn 1 */
}
'STM32 > STM32' 카테고리의 다른 글
Hard Fault(하드 폴트) - 0으로 나누기 (0) | 2024.05.27 |
---|---|
[STM32] multiple definition error (0) | 2024.03.14 |