GPIO Input을 이용한 LED Control

STM32F407G 데모보드는 2개의 버튼을 가지고 있으며,  PA0 Pin을 GPIO Input으로 설정하여 Blue 버튼을 입력하게 되면, PA0 High로 변경되며 이때 LED를 켜지도록 할 예정이다. 아래 회로도를 참고하기 바란다.

STM32CubeIDE에서 PA0는 GPIO Input으로 설정하고 PD12 ~ PD15는 GPIO Output으로 설정하고 저장하면 각 Pin type과 초기값을 설정하는 템플릿 코드가 생성된 것을 확인할 수 있다.

위와 같이 CubeIDE에서 MCU 초기 설정에 대한 코드가 생성되므로, Pin 타입과 초기값에 대한 고민없이 바로 Blue 버튼 입력시 LED를 어떻게 제어할 것인가만 고민하면 된다.

 

위 회로도처럼 Blue 버튼이 입력되면 PA GPIO는 High 설정되고, Blue 버튼의 입력이 없다면 Low로 설정되는 것을 확인할 수 있으며, 우리는 PA GPIO 상태를 폴링하여 그 값에 따라 LED를 끄고 키는 코드를 추가하면 된다.

 

아래코드는 PA0 Pin에 설정된 GPIOA의 Pin0 상태를 확인하여 LED에 할당된 PD12 ~ PD15 GPIO Output 값을 변경하여 LED를 끄고 키는 것을 처리한 코드이다.

int main(void)
{
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();

	while(1)
	{
		GPIO_PinState pin_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
		if(pin_state == GPIO_PIN_RESET)
		{
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
		}
		else
		{
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);
		}
	}
}

위 코드를 실행하면 아래 동영상과 같은 동작하는 것을 확인할 수 있다.

다음 포스트에서는 GPIO Input을 폴링하는 방식이 아닌 인터럽트 방식으로 LED 제어를 할 예정이다.