STM32 GPIO

살캉쿠·2023년 4월 17일
0

IO Output포트 설명


1) GPIO 핀 설정 항목

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를 말함.

2. GPIO LED 제어


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

Code

  • 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 
	  	}
   	}
}

0개의 댓글