GPIO(General Purpose Input/Output)는 마이크로컨트롤러(MCU)나 임베디드 시스템에서 범용적으로 사용할 수 있는 입출력 핀을 의미합니다.
GPIO는 입력(input) 모드와 출력(output) 모드를 가지며, 필요에 따라 추가적인 기능을 수행할 수 있습니다.
MCU가 외부의 디지털 신호를 읽는 용도로 사용됩니다.
버튼, 스위치, 센서의 출력을 MCU가 감지할 때 사용됨.
입력값은 HIGH(1) 또는 LOW(0) 상태를 가짐.
풀업(Pull-up) 또는 풀다운(Pull-down) 저항을 사용하여 신호 안정성을 유지함.
MCU가 외부 장치에 신호를 보내는 용도로 사용됩니다.
LED를 켜거나 끄는 경우
모터, 릴레이 등을 제어하는 경우
✅ 풀업(Pull-up) / 풀다운(Pull-down) 모드
신호가 불안정하거나 부정확한 입력(플로팅, Floating)이 발생하는 것을 방지하기 위해 사용됨.
내부적으로 저항을 통해 HIGH 또는 LOW 상태를 유지함.
✅ 인터럽트(Interrupt) 모드
특정 이벤트(예: 버튼이 눌리는 순간)를 감지하여 즉시 특정 코드를 실행하도록 하는 모드.
CPU가 계속해서 GPIO를 감시하지 않아도 되므로 전력 소비를 줄이고, 효율적인 코드 실행이 가능.
✅ PWM (Pulse Width Modulation) 모드
GPIO를 이용하여 아날로그 신호를 흉내내는 방식.
LED 밝기 조절, 모터 속도 조절 등에 사용됨.
하드웨어 타이머를 활용하여 설정 가능.

PB6 - 3.3V이면 LED OFF / GND이면 LED ON

다리 긴 쪽이 +(전원), 짧은 쪽 -(GND)

220R = 빨, 빨, 갈, (?)

LED ON 상태

검정색 선 - GND
빨간색 선 - 전원

노란색 선 - PB6
GPIO output - LED

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_WritePin(PB6_LED1_GPIO_Port, PB6_LED1_Pin, 0); // ON
HAL_Delay(1000);
HAL_GPIO_WritePin(PB6_LED1_GPIO_Port, PB6_LED1_Pin, 1); // off
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}

스위치를 누르지 않으면, 회로가 연결되지 않기 때문에 PB0 = 1
스위치가 눌리면, 회로가 연결되어 PB0 = 0

한 면에 나란히 있는 부분이 1,2 / 반대편 3,4

4.7K = 노 + 보 + 빨 + ?

주황선 - PB0


: PB6 연결
PB6 = 1 이면, LED OFF
PB6 = 0 이면, LED ON
: PB0 연결
SW를 누르지 않으면, PB0 = 1
SW를 누르면, PB0 = 0

/* Infinite loop */
/* USER CODE BEGIN WHILE */
int button;
while (1)
{
button = HAL_GPIO_ReadPin(PB0_SW_GPIO_Port, PB0_SW_Pin);
if(button){
HAL_GPIO_WritePin(PB6_LED1_GPIO_Port, PB6_LED1_Pin, 1); // OFF
HAL_Delay(1000);
}else{
HAL_GPIO_WritePin(PB6_LED1_GPIO_Port, PB6_LED1_Pin, 0); // ON
HAL_Delay(1000);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}