임베디드 | 라즈베리파이 | ARM | 리눅스 | Qt | 딥러닝

STM32 GPIO 

STM32 F103 칩을 이용한 OpenCM 보드

이 보드를 사용하여 LED On, Off 해보려고한다.


STM32를 하면서 가장 중요한 것은 

개발환경이다.


이 개발환경은 어떻게 구축하여도 상관없으나

나는 오로카 카페 http://cafe.naver.com/openrt 에서 바람(필명)님이 구축한 개발환경을 기본으로 작업을 진행하도록 하겠다.

굳이 개발환경 따라서안해도 상관없다. 본인이 구축한 아름다운 개발환경이 있다면 그것을 사용하면된다.


일단 부트로더에 관한 것은 다음번에 설명하도록 하고 GPIO 포트 사용  방법에 대해

정리하고자한다.


일단 소스 부터 봐야 한다. 





위와같이 GPIO 코드를 정의하였다.


GPIO관련 registers 에는 아래와 같이 존재한다. 

0x40010800 은 시작번지를 의미한다.

CRL - Port Control Register low

CRH - Port Control Register High

IDR - Input Data Register

ODR Output Data Register

BSRR Bit Set Reset Register

BRR Bit Reset Register

LCKR Lock Register 


0x40010800은 GPIO 시작 번지인데

데이타시트를 통해 볼 수 있다.

http://www.st.com/web/en/resource/technical/document/datasheet/CD00161566.pdf




CRL, CRH 레지스터는





위와같이 설정해주면 된다.

포트의 각 핀 설정이 가능한데 

CRL 은 0~7까지

CRH는 8~15까지 설정을 해줄 수 있다.


MODE와 CNF 설정이 가능한데

MODE는  speed를 설정해 줄 수있다.

00:Reserved  

01:10MHz  

10:2MHz  

11:50Mhz

이 값을 3으로 설정하면 50Mhz로 동작



CNF 설정은 아래 8가지로 지정해줄 수 있다.

Analog Input  

Input Floating(Reset State) 

Input pull-Up

Input Pull-down 

Output  Push-Pull 

Output Open-Drain 

AF Push-Pull 

AF open-Drain


각각에 설정 내용은 스스로 공부하시기 바랍니다.






GPIO LED 불켜기는 이게 전부이다.

GPIO 값을 선택해준후

GPIO MODE와 CNF 값을 설정해주면 끝


그리고 ODR(Output Data register) 을 설정 



잠깐, 여기서

비슷한쓰임새의

ODR , BRR, BSRR 이 있는데 뭐가 다른 것일까?

이름을 보면 이해하기 쉽다.

ODR : Port output data register

BSRR  : Port bit set/reset register

BRR : Port bit reset register

BSRR, BRR은 비트단위로 셋할 수 있다 

BSRR이 셋되면 해당비트를 셋

BRR 은 해당 비트를 클리어

ODR은 16비트값을 동시에 제어