STM32 강좌

STM32CubeMX - EXTI(External Interrupt) Code생성

plainy 2 17,602 2017.04.28 10:55

STM32CubeMX에서 EXTI를 사용하는 방법을 알아보겠습니다.

 

EXTI Pin 설정

EXTI로 사용할 Pin을 설정합니다.

Pinout창에서 EXTI로 사용할 Pin을 GPIO_EXTIx로 선택합니다.

1b2c326854089e594a4d7c9632f3307b_1493344480_0089.png



 

 

 

 

EXTI Mode설정

Signal Edge와 Event/Interrupt를 선택합니다.

Configuration탭에서 GPIO를 선택하면 GPIO Mode를 설정할 수 있습니다.

EXTI에서 사용할 Signal Edge(Rising,Falling, Rising & Falling)와 Event/Interrupt를 선택합니다.

1b2c326854089e594a4d7c9632f3307b_1493344486_8029.png

 

 

 

EXTI Interrupt사용

NVIC에 EXTI를 등록하여야 Interrupt가 발생됩니다.

설정한 핀이 Interrupt를 발생시킬 수 있도록 NVIC에 등록합니다.

NVIC에서 EXTI lineX Interrupt를 Check합니다.

1b2c326854089e594a4d7c9632f3307b_1493344493_3174.png

 

 

Code Generate

코드와 프로젝트 생성

Project 메뉴의 Generate Code를 눌러 Code를 생성합니다.

 

 

 

생성된 소스코드 확인

GPIO설정과 Interrupt Handler, User Callback을 추가합니다.

GPIO Pin을 EXTI로 설정하는 Code가 추가되었습니다.


1b2c326854089e594a4d7c9632f3307b_1493344501_0615.png
 


 

 

stm32f4xx_it.c 파일에 EXTI IRQ Handler가 추가되었습니다. EXTI가 발생하면 이 IRQ Handler가 호출됩니다.

 

1b2c326854089e594a4d7c9632f3307b_1493344508_4256.png

 

 

HAL_GPIO_EXTI_IRQHandler함수를 따라 들어가면 stm32f4xx_hal_gpio.c 파일에 아래와 같은 함수가 정의되어 있습니다.

Pending Bit를 Clear하는 매크로가 실행되고 있으며 사용자가 사용할 수 있는 Callback함수를 호출하고 있습니다.

사용자가 EXTI발생 시 구현할 동작은 Callback함수에 작성하여야 합니다.

그러나 아래 함수를 수정하여 바로 소스코드를 작성하면 안됩니다. 이 함수가 포함되어 있는 stm32f4xx_hal_gpio.c는 STM32CubeMX에서 생성되는 파일로 사용자가 작성한 내용이 모두 삭제되기 때문입니다.

Callback 함수를 복사하여 사용자 파일에 작성하여야 합니다.

 

1b2c326854089e594a4d7c9632f3307b_1493344514_2477.png

 

 

 

HAL_GPIO_EXTI_Callback함수를 복사하여 사용자 파일에 추가합니다.

아래 예제에서는 main.c파일의 USER CODE BEGIN...END 4에 추가하였습니다.

또한 이와 같이 두 개의 함수가 선언될 경우를 방지하기 위해 __weak를 삭제합니다.

함수내에 EXTI가 발생될 경우 동작해야 할 Code를 작성합니다.

 

1b2c326854089e594a4d7c9632f3307b_1493344522_358.png
 


Comments

tony 2017.12.28 14:55
댓글내용 확인
plainy 2018.01.03 13:47
동작 방식은 동일합니다만 위와 같은 방식으로 처리할 경우 동작을 구분할 수 있는 장점이 있습니다.
interrupt핸들러 내에서 어떤 동작이 이루어지는지 callback함수로 빼서 별도로 처리할 수 있습니다.
Category
Facebook Twitter GooglePlus KakaoStory NaverBand