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 구조를 나타내는 표다.
'Embedded > 1. STM32, Arduino' 카테고리의 다른 글
STM32 - Clock Configuration (0) | 2024.05.25 |
---|---|
STM32 - GPIO / 7_segment Counter 0~9까지 숫자 나타내기 (0) | 2024.05.22 |
STM32 - (GPIO 구동용 함수 분석 / Board Select & MCU/MPU 차이) (0) | 2024.05.19 |
STM32 - HAL Driver / 프로잭트 생성 / GPIO (+실습) (0) | 2024.05.17 |
디지털 타이머 - (아두이노, C언어(포인터)) (0) | 2024.05.10 |