본문 바로가기

STM32/touchGFX_STM32

[stm32F746] 3. 외부인터럽트 + 타이머

728x90

* 목표 : 스위치를 누를 때 외부인터럽트가 발생하여 LED가 3초 켜지고 꺼진다.

 

 - 인터럽트 루틴은 시간이 많이 걸리는 코드를 실행하면 문제가 생길 수 있음. 따라서 인터럽트는 flag를 처리하고 메인 무한루프 안에서 flag를 체크해서 처리하도록 작성함

 

- MX 설정은 이전의 2 와 동일

 

1. 코드 작성(main.c)

 

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_11)
{
flag = 1;   // 인터럽트 발생 시 콜백함수에서는 flag 값만 변경
}
}

 

---------------------------------------------------------------------------------------

 

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  if(flag)
  {
  HAL_TIM_Base_Start_IT(&htim3);   // 플래그 체크하여 타이머 시작 함수 호출
  }
  }
  /* USER CODE END 3 */

 

------------------------------------------------------------------------------------------------

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);
gTimer++;
if(gTimer == 3000)
{
gTimer = 0;
flag = 0;
HAL_TIM_Base_Stop_IT(&htim3);
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_RESET);
}
}

=> 타이머 시작하면 LED를 on 하고 3초 지나면 flag 초기화 / 타이머 정지 / LED off 시킴

728x90

'STM32 > touchGFX_STM32' 카테고리의 다른 글

[stm32F746] 100ms마다 USART1 1byte tx test  (0) 2020.09.01
[stm32F746] UART 송신  (0) 2020.09.01
[stm32F746] 2. EXTI (외부인터럽트)  (0) 2020.08.31
[stm32F746] 1. 타이머 만들기  (0) 2020.08.31
[touchGFX] Font 추가  (0) 2020.08.31