이번에는 PA0번에 연결되어 있는 버튼을 외부 인터럽트로 설정하여 사용해보겠습니다.
일단 PA0을 GPIO_EXTI0으로 설정합니다.
NVIC탭에 들어가서 Interrupt를 활성화 시킵니다. (그림처럼 체크)
그리고 Generate Code 실행하세요~
한번 GPIO가 어떻게 설정되었는지 살펴봅시다. 기존에 GPIO_OUTPUT으로 했던 내용을 제외하고
EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_0;
EXTI_InitStruct.LineCommand = ENABLE;
EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING;
LL_EXTI_Init(&EXTI_InitStruct);
요 부분이 추가되었네요.
일단
Mode = LL_EXIT_MODE_IT
Trigger = LL_EXTI_TRIGGER_RISING
이 두문장만 확인해도 RISING Edge에서 IT 인터럽트가 발생한다고 추측이 가능하네요 ^^
그럼 인터럽트가 발생시에 행 할 함수를 작성해야겠죠
stm32f4xx_it.c 파일을 한번 보시면 하단에 EXTI0_IRQHandler(void) 함수가 생성되어 있네요.
이 함수가 외부 인터럽트가 발생시에 행하는 Handler네요 ^^
앞으로는 인터럽트에 관련된 함수는 해당 파일을 살펴보면 되겠네요?
저는 일단 간단히 인터럽트 발생시 LED Toggle을 진행하겠습니다.
void EXTI0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI0_IRQn 0 */
/* USER CODE END EXTI0_IRQn 0 */
if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_0) != RESET)
{
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_0);
/* USER CODE BEGIN LL_EXTI_LINE_0 */
LL_GPIO_TogglePin(GPIOD, LL_GPIO_PIN_13 | LL_GPIO_PIN_14);
/* USER CODE END LL_EXTI_LINE_0 */
}
/* USER CODE BEGIN EXTI0_IRQn 1 */
/* USER CODE END EXTI0_IRQn 1 */
}
코드를 주석 제외하고 보시면 인터럽트 플래그를 확인하네요 ??
코드는 0번 외부 인터럽트가 발생하면 해당 플래그를 Clear해주고
LED를 토글 시키는 구문입니다.
Clear를 안해주면 다음부터 인터럽트가 발생되더라도 해당 인터럽트는 구동하지 않을거라고 보이네요??
이건 한번 구동해보면 알수 있을것 같아요...
막상 구동해보면 정상적으로 토글이 안됨을 알수 있습니다.
이건 버튼에서 발생하는 채터링 문제인데 버튼 회로를 다시 보면
왼쪽 버튼에 Not Fitted 라고 표시된 커패시터가 부착되어 있지 않아서 하드웨어적으로 Debounce 처리가 안되네요.
이부분은 커패시터를 부착하면 정상적으로 동작할 것으로 예상하고
아니면 다른 방법을 통해서 Debounce처리를 해야겠네요 ^^;
'b. 임베디드 > STM32' 카테고리의 다른 글
[STM32F407VGT Discovery] Timer Output Compare Mode (0) | 2019.06.21 |
---|---|
[STM32F407VGT Discovery] Timer FND(7segment)초 단위 동작 (0) | 2019.06.20 |
[STM32F407VGT Discovery] Timer PWM으로 LED 밝기 조절 (0) | 2019.06.19 |
[STM32F407VGT Discovery] Timer UPDATE INTERRUPT (1) | 2019.06.18 |
[STM32F407VGT Discovery] GPIO 버튼 (1) | 2019.06.15 |
[STM32F407VGT Discovery] GPIO LED점멸 (0) | 2019.06.15 |
[STM32F407VGT Discovery] CubeIDE 환경설정 (0) | 2019.06.15 |
[STM32F407VGT Discovery] RNG함수를 이용한 난수 발생 방법 (0) | 2019.04.03 |