본문 바로가기

MCU 제어/STM32Cube Mx

[STM32] External Interrupt(외부인터럽트)

인터럽트란?

https://how-to-make-a-quadcopter.tistory.com/13

 

인터럽트(Interrupt) 방식

폴링 방식은 CPU의 효율이 떨어지는 것과 동시에 여러 작업이 진행될 때 하나의 작업이 실행이 지연되거나 실행할 수 없는 단점이 있다고 했다. 이러한 문제점을 해결할 수 있는 방식 중 하나가 �

how-to-make-a-quadcopter.tistory.com

 쿼드콥터의 항공등을 개발하기 위해 외부 인터럽트를 사용할 것이다. 항공등은 주로 기체의 앞뒤방향이나 어두운 곳에서의 위치을 표시하기위해 사용한다. 

드론의 항공등

 드론에 장착한 스위치를 이용하여 항공등의 점멸 속도를 조절하거나 On/Off하려한다. 이 스위치는 주기적으로 계산해야하는 값들(PID계산, 라즈베리파이와 통신)들과는 좀 다르다. 스위치 입력을 받는 상황은 예외상황이라고 할 수 있다. 그래서 폴링이나 타이머 인터럽트가 아닌 전기신호의 입력에 의해서 발생하는 외부 인터럽트를 사용해야한다.

 

                        동시에 쓸 때 최대 16개를 외부인터럽트 핀으로 쓸 수 있다.                       여러 포트의 같은 숫자의 핀을 동시에 사용 못한다.

목표 설정

1. PC1과 PC2를 외부 인터럽트 핀으로 설정하여 스위치 값을 받는다. PE2를 GPIO OUTput으로 설정하여 LED제어를 한다.

2. PC1과 연결된 버튼을 누르면 LED의 불이 꺼지고 PC2와 연결된 버튼을 누르면 LED의 불이 켜지게 한다.

 

개발

1. STM32CubeMx 설정

외부인터럽트 및 GPIO 설정
GPIO 세부 설정

외부 인터럽트의 GPIO mode에는 falling edge, rising edge, both가 있다. falling edge는 전기적인 신호가 low로 떨어질때 인터럽트를 발생시키는 것이고 rising edge는 전기적인 신호가 high가 될 때 인터럽트를 발생시키는 것이다. both는 둘 다이다. 외부 인터럽트핀(PC1, PC2)이 풀업상태로 연결되있기 때문에 falling edge로 설정했다. PE2를 no pull up, no pull down으로 설정한 이유는 자체적으로 풀다운저항이 달려있기 때문이다.

인터럽트를 Enable해야한다.

2. 프로그램

사용 함수

1. EXTI1_IRQHandler(void), EXTI2_IRQHandler(void) - stm32f1xx_it.c에서 핸들러 함수를 찾을 수 있다.

2. HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); - stm32f1xx_hal_gpio.c 파일에서 콜백함수를 찾을 수 있다.

weak함수나 콜백, 핸들러 함수에 대해서는 예전에 했기 때문에 하지 않겠다.

 

코드

 

 

 

결과 영상

 

 

'MCU 제어 > STM32Cube Mx' 카테고리의 다른 글

[STM32]PWM을 이용하여 BLDC 모터 구동하기  (0) 2020.03.21
[STM32] Basic Timer  (1) 2020.03.02
[STM32]UART 인터럽트 송수신 실습  (3) 2020.02.29
Cube MX란?  (0) 2020.02.21
[STM32]ST-Link 사용법 및 IAR 디버깅 방법  (0) 2020.02.02