1. Push-Pull
- BJT 회로에서 2개의 TR Base에 모두 0V를 인가하면 위의 PNP TR만 ON이되어 Output 쪽으로는 3.3V가 흐른다.
- 반대로 2개의 TR Base에 모두 3.3V를 인가하면 아래 TR만 ON이되어 Output 은 0V가 된다.
- MOSFET 회로도 결국 TR과 동일한 동작을 함.
- 위 회로 요약
2) Open Drain
- Drain이 Open되어 있기때문에 Open Drain이라고 함.(TR을 사용하면 Open Collector)
- Gate 전압이 High이면 Output은 0V임.
- Output에 외부 전압을 연결하여 MCU 내부 전압이 아닌 다른 전압을 사용할 때 쓰임.(모터 구동 전압 등)
3) Maximum output speed
- GPIO 핀이 얼마나 빠른 속도로 출력 상태값의 변화를 빠르게 가지고 갈 것인지 설정하는 것으로 고속으로 그 상태를 전환할 때 유용하게 사용할 수 있음.
- 아래 그림에서 Trise, Tfall의 Slope를 말함.
1) 회로
- 사용 MCU: STM32F103C8T6
- 주변 회로(LED, Switch)
2) Pin Setting
- Pinout preview
- PA0
- Switch Input pin
- Pull-up
- User Label: GPIO_SW
- PC13
- LED Controll pin
- Output Push-Pull(MCU 내부 3.3V 사용)
- Pull-up
- Maximum output speed: High
- User Label: GPIO_LED
- pinout 설정을 완료하고 Code Generate하고 'main.h' 확인하면
설정한 핀들이 Define되어 있다.
- Main 함수
int main() { HAL_Init(); //Hal Driver 초기화 SystemClock_Config(); // SystemClock 설정 MX_GPIO_Init(); // GPIO 초기화 while() { if(HAL_GPIO_ReadPin(GPIO_SW_GPIO_Port, GPIO_SW_Pin)) // 스위치가 안눌렸을 때 if문 조건이 1(True)이므로 실행 { HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin,SET); // SET이면 LED의 Anode도 3.3V, PC13도 3.3V이므로 LED OFF } else // 스위치가 눌려있을 때는 else 문으로 이동 { HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, RESET); // RESET이면 LED Anode는 3.3V, PC13은 RESET이므로 0V니 LED ON } } }