본문 바로가기
임베디드 개발/STM32 (ARM Cortex-M)

STM32CubeIDE ] STM32 개발보드 GPIO 제어하기 ( by MCU/MPU Selector )

by eteo 2022. 5. 19.

보드명 : STM32F429ZI

 

개인 참고용 자료입니다.

 

 

새 프로젝트 생성

 

 

 

보드선택

 

 

 

 

프로젝트명 짓고 생성

 

 

 

 

프로젝트 매니저에서 다음 체크

주변장치 별로 소스파일, 헤더파일을 따로 생성해준다.

 

 

 

RCC (Reset and Clock Configuration) 을 수정

 

 

 

 

Debug는 Serial Wire로 설정

 

이 보도는 ST-Link/V2 가 보드에 포함되어 있어 외부에 별도 장비를 연결할 필요 없이 보드에 usb를 연결해서 디버깅할 수 있다.

 

 

 

 

타이머 설정

 

 

 

 

이더넷과 USB_OTG_FS는 disable 되어있는지 확인

 

 

 

 

 

 

클락 다음과 같이 설정

 

Clock은 External / Internal, Low speed / High Speed 에 따라 LSE, LSI, HSE, HSI 로 구분할 수 있다.

LSE (32.768 KHz)

LSI (32 KHz)

HSE(4-26 MHz)

HSI(16 MHz, CPU clock)

첨부 사진에서는 LSE를 RTC로 사용하고

HSI 를 PLL을 통해 필요한 주파수로 변경한 뒤 SYSCLK(시스템 클락소스)로 사용하며 이를 분주해서 AHB, APB1, APB2 등의 주파수를 설정한다.

 

 

 

 

그리고 아까 RCC 설정에서 HSE를 disable 해준 이유는 회로도를 보면 실장이 되어있지 않다.

 

 

그리고 LSE는 실장되어 있어서 Crystal/Ceramic Resonator 로 설정해 주었다.

참고로 다른 옵션인 Bypass Clock Source 는 다른 장치에서 Clock 을 전달 받아 사용할 때 선택한다.

 

 

 

 

 

 

 

유저 스위치를 누를 때 LED가 켜지도록 제어해 보겠다.

 

먼저 LED

원하는 핀은 아래에서 검색하면 찾을 수 있다.

 

 

PB7핀 output으로 설정

 

 

 

 

 

그리고 유저 스위치

 

PC13핀 input으로 설정

 

 

 

 

 

굳이 GPIO 설정은 따로 안바꿔주도 될 것 같다.

 

 

참고로 User Label 에 별칭을 정하면 헤더파일에 typedef 코드가 생성된다.

 

 

 

 

 

Alt+K를 눌러 코드 생성하기

 

main.c의 while문 내에 아래와 같이 코드 작성

	  if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))
		  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, 1);
	  else
		  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, 0);

 

 

 

Ctrl+space bar를 누르면 자동완성 기능이 있다.

 

 

 

Output으로 HIGH, LOW 신호를 내보내는 데 GPIO_PIN_SET/RESET 안쓰고 걍 숫자 1, 0을 썼다.

 

Ctrl을 누른채로 ReadPin 함수를 클릭해 정의를 따라가보면

ReadPin 함수의 반환값의 자료형은 GPIO_PinState이다.

 

 

다시 Ctrl을 누른채로 GPIO_PinState 자료형을 클릭해 따라가보면

 

GPIO 헤더파일 내에 아래와 같이 typedef enum으로 정의되어 있다. 0, 1 값을 가지는 사용자 정의 자료형이다.

 

 

 

 

 

 

아무튼 빌드 클릭

 

 

 

디버그 클릭

 

 

 

 

그럼 HAL_Init(); 에서 멈춘다.

 

여기서 여러 디버깅 툴을 사용해 볼 수 있다. (문장 단위/함수 단위로 뛰어넘기 등)

 

근데 지금은 그냥 F8 resume 을 선택해 보겠다.

 

 

 

 

유저스위치를 누를 때마다 LD2에 불이 들어오는 것을 확인할 수 있다.