* 목표 : 스위치를 누를 때 외부인터럽트가 발생하여 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 시킴
'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 |