# STM32F429I-DISCOVERY

# STM32F429ZIT6 (144Pin / 180Mhz)

# FreeRTOS (RTOS)

# KEY (PA0)

# 2017.09.08 Callback 함구 구현


KEY_EXTI_TEST.zip


• CubeMX에서 외부 인터럽트를 설정하고 Key 입력에 따라 LED를 켜고 끄도록 한다.


• 회로도


• 아래 데이터시트를 보는 것과 같이 PA0은 EXTI0 인터럽트와 매칭된다.


• 아래 사진과 같이 핀 설정을 한다.



• LED GPIO_Output, SWCLK, SWDIO 설정


• Peripherals 설정


• 클럭 설정


• Configuration → NVIC 버튼을 클릭하고, 외부 인터럽트 함수를 체크해준다.

# Premption Priority, Sub Priority는 추후 기술하겠음


• GPIO 버튼을 클릭하고, GPIO mode, Pull-up/Pull-down을 설정한다.

필자의 경우 Rising edge에 동작하도록 하였다.



• 인터럽트 핸들러

Cube에서 코드를 생성하면 "stm32f4xx_it.c" 파일에 인터럽트 핸들러가 추가 된다.



HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); 이 함수를 따라가 보면 실제 인터럽트 처리가 구현되어 있고,

마지막에 Callback 함수를 호출 하고 있다.



HAL_GPIO_EXTI_Callback(GPIO_Pin); 함수를 따라가 보자.

이 함수를 직접 수정하지 말고,  HAL_GPIO_EXTI_Callback 함수를 사용자 파일에 구현 하라고 되어있다.



필자는 "stm32f4xx_it.c" 파일에 Callback 함수를 복사하였다. 


• 코드 입력

Callback 함수를 복사 후 아래 코드를 입력한다.

__weak attribute는 삭제한다.


HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13 | GPIO_PIN_14);



• 외부 인터럽트와 핀설정은 gpio.c 파일에서 확인할 수 있다.



#인터럽트 우선 순위에 대한 내용은 추후 기술 하겠음.


끝.









+ Recent posts