Develop Knowledge/STM32F4 by ChrisP

5강. EXTI (외부 인터럽트)

정수열 2023. 2. 2. 23:03

본 단행본은 inflearn에 있는 ChrisP 강사님의 "HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌"를 정리한 글입니다.

 

강좌 바로 보기 >> https://www.inflearn.com/course/stm32f4/dashboard

 

[무료] HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌 - 인프런 | 강의

고성능 마이크로컨트롤러인 STM32F 시리즈를 처음 접하는 분들이 쉽게 시작할 수 있도록 무료 컴파일러 TrueSTUDIO 및 코드자동생성 프로그램 CubeMX 설치부터 칩 기능의 개념설명, 소스코드작성(HAL

www.inflearn.com

 

- 외부 인터럽트

앞에서는 GPIO로 High/Low 신호를 확인하는 방식을 "폴링 방식" 이라고 한다.

이번에는 EXTI, 외부 인터럽트는 Rising/Falling 신호를 확인할 수 있는 방식인 "인터럽트 방식"에 대해서 알아본다.

 

폴링 방식은 while문 안에서 상태를 체크해서 CPU 클럭을 소모해야 하지만,

인터럽트 방식은 물리적인 방식으로 상태를 체크해서 CPU 클럭을 소모하지 않는다.

 

STM32F4 에서는 EXT0,1,2,3,4는 개별 IRQHandler() 함수가 호출되지만,

EXT5~9, EXT10~15는 하나의 IRQHandler() 함수로 묶여서 호출된다.

이 때 주의할 점은, 인터럽트가 발생되면 호출되는 콜백 함수는 개별로 호출된다는 점이다.

 

- 회로도

없음

 

- CubeMX 설정

1. Pinout & Configuration

PE3, PC15, PD4, PD10 -> GPIO_EXTI

System Core -> NVIC -> EXTI line3, EXTI line4, EXTI line[15:10] 활성화(Enable)

System Core -> GPIO -> 핀 넘버에서 Rising/Falling/Rising or Falling 을 선택할 수 있다.

 

- 코드 생성

// 외부 인터럽트 발생 시, 이 콜백 함수가 호출된다.
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_3)
	{
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
	}

	if(GPIO_Pin == GPIO_PIN_15)
	{
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);
	}

	if(GPIO_Pin == GPIO_PIN_4)
	{
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
	}

	if(GPIO_Pin == GPIO_PIN_10)
	{
		HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
	}
}