STM32 UART 통신 - Polling 방식

지금까지는 STM32F407G 데모보드로 간단한 테스트를 진행하였지만, 지금부터는 MCU의 특정 Pin에 와이어를 연결하여 주변 장치를 제어할 예정이다. 첫번째로 개발할 때 가장 중요한 디버그 메시지를 보기 위해 UART를 연결하려고 한다.

 

데스크탑 PC에는 시리얼 포트가 있지만, 점점 없어지는 추세이므로 USB2Serial IC을 사용하여 UART 메시지를 출력할 것이다. USB2Serial IC는 인터넷에서 쉽게 구할수 있으며, 이 포스트에서는 CH340을 사용하였다.

UART4 사용하여 시리얼 통신를 하기 위해 STM32CubeIDE를 사용하여 다음과 같이 Pin을 설정하였다. UART4-TX는 PA0을 사용하지만, PA0에 GPIO_EXTI0을 할당하여 PC10으로 할당된 것을 확인할 수 있다.

UART Pin을 할당한 다음 Baud Rate 및 Parity bit 등의 UART 환경설정을 해야 한다. 특이사항이 없다면 비동기식 방식이기 때문에 기본값을 그대로 사용하면 된다.

 

UART 인터럽트 설정은 전혀하지 않았기 때문에 UART RX/TX를 Polling 방식으로 처리하는 코드는 아래와 같다. 사용자가 입력한 값을 RX로 읽은 다음 TX를 사용하여 화면에 출력한 것이다.

int main(void)
{
	uint8_t data[32];

	HAL_Init();
	SystemClock_Config();

	MX_GPIO_Init();
	MX_UART4_Init();

	while(1)
  	{
		memset(data, 0x00, sizeof(data));
		if(HAL_UART_Receive(&huart4, data, 1, 10) == HAL_OK)
  		{
  			HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
  			if(HAL_UART_Transmit(&huart4, data, 1, 10) == HAL_OK)
  				HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);
  		}
  	}
}

RTOS 환경이 아니라면 UART를 Polling 방식을 거의 사용하지 않을 것이다. 다음 포스트에서는 인터럽트로 UART 출력하는 것을 알아보고 printf를 uart에 연결하는 방법까지 찾아볼 예정이다.