Embedded/1. STM32, Arduino

STM32 - GPIO 레지스터에 대하여 (MODER ~ AFRH)

잇(IT) 2024. 5. 22. 08:37

GPIO 레지스터 종류

 

GPIO 레지스터는 GPIO_TypeDef 구조체에 10개가 정의되어 있다.

 

1. MODER

2. OTYPER

3. OSPEEDR

4. PUPDR

5. IDR

6. ODR

7. BSRR

8. LCKR

9. 10. AFR[2] (AFRL, AFRH)


Configuration(설정)과 관련된 레지스터

1. MODER

2. OTYPER

3. OSPEEDR

4. PUPDR

 

Data와 관련된 레지스터

5. IDR

6. ODR

 

Set/Reset과 관련된 레지스터

7. BSRR

 

Locking과 관련된 레지스터

9. 10. AFR[2] (AFRL, AFRH)

 

위와 같이 register들이 선언된 것을 확인할 수 있다.

 

 

GPIOA~K까지 각 Port는 각자의 시작 주소가 있으며, 각 레지스터 마다 offset을 통해 해당 레지스터의 시작 주소를 나타내며 Reset Value를 통해 초기화 시 셋팅되는 값을 표현하고 있다.


1. MODER

MODER은 2bit당 하나의 포트를 나타내고 있다.

 

00 : 입력 상태

01 : 출력 상태

10 : Alternate function 상태 - GPIO가 아닌 다른 특정한 모드로 사용한다는 의미다.

11 : Analog 모드 상태 - 해당 핀을 Analog 입력이나 출력으로 사용한다는 의미다.

 

2bit를 통해 각 Pin의 상태를 지정할 수 있다.

 

2. OTYPER

GPIOx_MODER로 output 설정을 하게되면 해당 output의 종류를 설정하는 레지스터다.

 

해당 Pin을 push-pull로 하려면 0으로 open-drain으로 하려면 1로 설정한다.

(push-pull은 두개의 트랜지스터(또는 MOSFET)가 사용되는 출력 구성 방식이며, open-collector는 트랜지스터의 드레인 단자가 출력으로 사용되고 소스 단자가 접지에 연결된 구성 방식이다. (BJT가 이에 해당한다.)

 

3. OSPEEDR

GPIO를 output으로 설정했을 때 출력신호를 내보내는 속도를 설정하는 레지스터다.

 

00 : 저속

01 : 중간속도

10 : 고속

11 : 초고속


4. PUPDR

칩 내부에 pull up, pull down 저항이 있어 외부에 pull up, pull down 저항을 달 필요가 없다.

 

 

5. IDR

Input 설정일 때 핀에 실리는 레벨을 알려주는 레지스터다.

Read만 가능하며 해당 Pin의 신호를 받아 전달하는 용도다.

 

6. ODR

Output 설정일 때 핀에 실리는 레벨을 결정하는 레지스터다.

Pin 하나에 1bit를 가지고 있다.

 

 

7. BSRR

Output 설정일 때 핀에 실리는 레벨을 결정하는 레지스터로, ODR 레지스터와 기능은 동일하나 제어 방식이 약간 다르다.

Set은 해당 핀의 레벨을 1로 만들고, Reset은 0으로 만든다.

BSRR, ODR 레지스터 전부 0, 1 제어가 가능하다.

 

8. LCKR

9. 10. AFR[2] (AFRL, AFRH)

GPIO 기능 이외에 여러가지 alternate function을 가지고 있으며 이를 결정하는 레지스터다.


GPIO register map

 

위 GPIO Map은 Register의 전체적인 bit 구조를 나타내는 표다.

728x90