# 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 파일에서 확인할 수 있다.



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


끝.









LED_Toggle.zip



# STM32F429I-DISCOVERY 

# STM32F429ZIT6 (144Pin / 180Mhz)

# FreeRTOS (RTOS)

# GPIO (LED)

# 2017.06.13 Clock 설정 부분 수정하였음. 25Mhz → 8Mhz


• CubeMX에서 간단한 GPIO Pin 설정, Clock, 설정, FreeRTOS 포팅하는 방법을 기술하였습니다.

• CubeMX를 통해서 FreeRTOS를 쉽게 포팅하고, LED를 제어하는 방법을 기술하였습니다.

 

• New Project → STM32F4 → STM32F429/439 → LQFP 144 → STM32F429ZITx  

• 또는 New Project → STMicroelectronics → Discovery → STM32F4 → STM32F429I-DISC1 선택

필자는 개발보드를 선택하지 않고 STM32F429ZITx  선택하여 기술하였습니다.


• LED는 PORTG 13, 14번에 연결되어 있습니다.


• PG13, PG14를 클릭하고, GPIO_Output 를 클릭합니다.


• Debug Pin 설정

PA13, PA14 Pin를 JTCK-SWCLK, JTMS-SWDIO 설정하지 않을 경우 디버그를 하지 못하게 됩니다.


• Configuration → Peripherals  SYS → Debug → Serial Wire로 선택합니다.


• Pin 색이 초록색으로 변경되는 것을 확인합니다.


• Clock Pin 설정

회로도에는 PH0, PH1 Pin에 연결되어 있습니다.



• PH0 "RCC_OSC_IN", PH1 "RCC_OSC_OUT"으로 선택합니다.


• Configuration → Peripherals  RCC High Speed Clock (HSE) → Crystal/Ceramic Resonator으로 선택합니다.


Pin 설정을 완료한 화면입니다.


• Clock를 설정합니다. 해당 CPU는 최대 180Mhz으로 동작합니다.

• Input Frequency을 입력합니다. * DISCO Board는 Crystal 8Mhz를 사용함.

HSE, PLLCLK를 선택하고, HCLK (Mhz)를 180을 입력합니다. 또는 원하는 속도롤 변경합니다. PLL Source Mux를 자동으로 설정됩니다.



• FreeRTOS 포팅

FreeRTOS 포팅 방법은 Configuration → FREERTOS를 체크하는 것으로 끝입니다.


• GPIO 설정

GPIO 버튼을 클릭합니다.


PG13, PG14 Pin을 아래와 같이 설정합니다.


• Generate Code 

Project → Generate Code 버튼을 클릭합니다.


• Project Settings

Project Name, Location 설정합니다.

# 설정에 대한 설명은 추 후 기술하기로 하겠습니다.


# 설정에 대한 설명은 추 후 기술하기로 하겠습니다.


• Main Project Settings

코드 생성 후 초기 화면입니다.


• 코드 입력

freertos.c → StartDefaultTask() 함수에 아래 코드를 입력합니다.


#include "stm32f4xx_hal.h"

HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13);

osDelay(500);

HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_14);

osDelay(500);



• Compile 

F7 또는 Project → Make를 클릭합니다.


• Download and Debug

Ctrl + D 또는 Project → Download and Debug / Debug without Downloading을 클릭합니다.


• 실행

F5 또는 Debug → Go를 클릭합니다.


• Debug 종료

Ctrl + Shift + D 또는 Debug  → Stop Debugging을 클릭합니다.



끝.

+ Recent posts