※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.
오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
아래 글은 STM32F429ZI datasheet와 Reference manual를 기준으로 작성되었습니다.
(임베디드 개발자에게 datasheet와 Reference manua을 지도와 나침판과 다름없이 존재)
GPIO란?
-> General Purpose Input/Output의 약자
-> 다용도 입출력 포트 또는 핀
-> CPU 입장에서 입력, 줄력 장치를 연결하여 제어 할 떄 사용하는 포
STM32 GPIO 레지스터
1. 포트
- PA ~ PH 포트까지 있다
- 한 PORT 당 총 16개 핀이 있다
2. 역할에 따른 분류
1). Configuration
- 역할 : GPIO configuration 설정
- 레지스터 개수 : 4
- 크기 : 32bit
(1) GPIOx_MODER : 레지스터 내 인접한 2개의 비트 조합으로 16개 핀의 모드를 설정
00 : 해당 핀을 입력으로 사용
01 : 해당 핀을 출력으로 사용
11 : 해당 핀을 아날로그로 사용
10 : Alternate function 상태, 해당 핀을 주변기기와 UART, I2C, SPI등 연결시 사용
reset values : cpu가 reset이 된 상태 -> 시작 셋팅값
(2) GPIOx_OSPEEDR : GPIO 핀 출력 신호 설정시 출력 신호(PWM) 내보내는 속도 설정
(3) GPIOx_OTYPER : GPIO 핀 출력으로 설정된 핀의 출력 상태 설정
0 : 출력을 push-pull
1 : 출력을 push-drain
(4) GPIOx_PUPDR :입출력 시 해당 레지스터 상태 내부 풀업/ 풀다운으로 설정
00 : 설정하지 않음
01 : pull-up
10 : pull-down
11 : 예약
외부에 따로 풀업/풀다운 저항을 달 필요가 없음.
2). Data
(1) GPIOx_IOR (GPIO port input data register)
16개의 레지스터(0~15bit)로 Read가 가능. 각 비트들이 r로 표시
각 비트에 대응하는 핀에 외부로부터의 전압 인사 여부를 나타낸다
0 : 해당 핀의 입력 전압 레벨이 "0V" 표시
1 : 해당 핀의 입력 전압 레벨이 "3.3V" 표시
(2) GPIOx_ODR(GPIO port output data register)
16개의 레지스터(0~15bit)로 Write가 가능. 각 비트들이 r로 표시
0 : 해당 핀의 입력 전압 레벨이 "0V" 출력
1 : 해당 핀의 입력 전압 레벨이 "3.3V" 출력
ex) GPIOC->ODR = 0xf0fe; //GPIOC에 0xf0fe를 출력
3) set/reset
(1) GPIOx_BSRR( Port bit set/reset register)
크기 : 32bit
해당 핀 레벨을 1(SET) 또는 0(RESET) 으로 설정
Set은 해당 핀의 레벨을 1로 만들고, Reset은 0으로 만든다는 의미
ex) GPIOC->BSRR = 0x0010; 또는 GPIOC->BSRR = (1<<8);
(2) GPIOx_BRR(Port Reset register)
크기 : 16bit
해당 핀 레벨을 0으로만(RESET) 설정
ex) GPIOC->BRR = 0x0001; 또는 GPIOC->BSRR = (1<<2);
4) locking
1) GPIOx_LCRK : GPIO에 잠금으로 설정되어 사용되어지면 매크로가 재설정될 떄까지 잠금 설정
5) alternate selection : 부가 기능 레지스터
1) GPIOx_AFPL
2) GPIOx_AFRH
아래는 GPIO 레지스터 map이다.
※ GPIO 주소 찾기
- Datasheet Memory map 확인하여 GPIO 레지스터 주소를 찾을 수 있다.
- Address offset : 시작 주소로부터 떨어진 주소값
'Stm32 > 개인 학습' 카테고리의 다른 글
Timer[3] - PWM (0) | 2024.06.19 |
---|---|
Timer[2] - 타이머 인터럽트 (0) | 2024.06.13 |
Interrupt(EXTI) (0) | 2024.06.08 |
TIMER [1] (0) | 2024.05.09 |
GPIO(3) 입력 제어 (0) | 2024.05.09 |