Hyokyun Yim bio photo

Hyokyun Yim

Koreatech Computer Science Engineering undergraduate 4 grade.

Facebook Github

Cortex-M4 의 GPIO에 대해 알아보자

Overview

GPIO

소개

  • GPIO(General Purpose Input Output)는 마이크로 프로세서 입장에서 Input, Ouput을 하는것을 말한다.
  • GPIO를 쉽게 말하면 여러 버스들을 규격화 해놓것을 말한다.
  • 컴퓨터는 2진수로 동작된다. 즉 High, Low 로 동작을 하는데 이러한 High, Low 신호를 버스가 읽어서 동작을 한다. GPIO가 이런 신호를 읽는 역할을 한다.
  • GPIO는 마이크로 프로세서와 여러 센서들 사이에서 하나의 인터페이스 역할을 한다.

GPIO 레지스터들

32bit configuration registers

  • GPIO의 환경을 잡아주는 레지스터들
  • GPIOx_MODER : Input/Ouput 설정
  • GPIOx_OTYPER : Ouput시에 타입설정 -> push-pull(기본)/Open-drain or Open-collector
  • GPIOx_OSPEEDR
  • GPIOx_PUPDR : 풀업, 풀다운 설정

32bit data registers

  • I/O 데이터를 보내고, 읽는 용도의 레지스터
  • GPIOx_IDR : Input 할때 사용된다.
  • GPIOx_ODR : Ouput 할때 사용된다.

32bit alternative function selection registers

  • PA, PB, .. 등 여러 핀을 GPIO 가 아닌 다른 기능(ADC, PWM) 등으로 쓸때 사용
  • GPIOx_AFRH
  • GPIOx_AFRL

32bit etc registers

  • GPIOx_BSRR : 한번에 reset/set 설정시에 사용
  • GPIOx_LCKR : Locking 시 사용하는 레지스터 , 즉 동기화를 위해사용하며 세마포어와 같은 역할

GPIO 레지스터 사용법

GPIO 레지스터 블럭

  • 위 그림은 관련잇는 레지스터가 묶여있는 하나의 레지스터 블럭이다.
  • GPIOx_IDR 레지스터를 건드리기위해선 그 레지스터의 시작주소를 알아야한다. 이를 계산하기 위해서는 레지스터 블럭의 시작주소와 사용할 레지스터의 offset을 알아낸뒤 그 합을 계산하여 시작 위치를 찾아낸다.

GPIOx_MODER

  • GPIOx_MODER 비트 옵션
  • 00 : Input
  • 01 : Output
  • 10 : 다른기능사용(DAC,PWM 등)
  • 00 : ADC 사용

  • 위 그림은 1번, 5번, 6번 핀에 연결된 LED에 불을 켜기위해서 MODER 을 설정하는 법이다.
  • MODER1, 5, 6 을 01로 bitset 을 해놓으면 output으로 사용한다는 설정이다.
  • 최종 비트설정값을 0x00001404 이다.
  • Base Addr : 0x10000 , MODER offset : 0x100 이라 가정하자
  • 0x10000 + 0x100 = 0x10100이 MODER 시작주소가 된다.
    //구현 코드
	int *MODER = (int *)0x10100
	*MODER = 0x1404;
	
  • 다른 레지스터들 모두 위와같은 방식으로 활성화 한다.

정리(GPIO 동작 순서)

  1. 전압으로 밥을 주고
  2. RCC_configuration 으로 시간을 생성한 후
  3. GPIO에 생성한 시간을 준다.
  4. GPIO 환경설정(input / output, pupd ..)을 하고
  5. 데이터 전송 레지스터에 high 또는 low 를 준다.

참고

Open Collector / Open Drain

  • 오픈 컬렉터, 오픈 드레인이란 트렌지스터의 타입을 말한다.
  • 오픈이 붙은 이유는 전압을 고정시키는 것이 아니라 유동적으로 유저가 조절을 할 수 있다.
  • GPIOx_OTYPER : Push_pull(고정) , open_drain(유동)

싱크(Sink) / 소스(Source) 방식

  • 전하는 전압이 높은곳에서 낮은곳으로 이동한다는 특성을 가지고 있다 이를 이용하여 싱크/소스방식을 구현할 수 있다.
  • 싱크 방식이 빛이 더 강하게 출력이된다. 단 GPIO가 low 신호일때 켜진다.

Reference: Sang Youn Kim - Micro processor , Korea university of technology & education