안녕하세요?
오늘은 UART통신에서 Polling방식에 대해 다뤄보겠습니다.
먼저 UART를 알아보기전에 Polling이란 개념을 설명하겠습니다.
폴링 방식이란? 폴링방식은 정해진 시간 또는 순번을 확인하여 상태 변화가 있는지 없는지를 체크 하는 방식입니다.
위의 형태를 보면 먼저 if문을 통해 BTN1(버튼1)이 눌렀는지 검사를 하며, 버튼을 누르지 않았다면 else부분을 실행합니다.
그리고 else 문이 다 끝나면 순차적으로 다른 작업을 실행합니다.
그리고 나서 다시 if문을 검사합니다.
위의 예시 처럼 MCU가 정해진 순번 OR 시간에 버튼의 상태변화를 확인해서 그에 맞는 작업을 하는것이 Polling 방식 입니다.
여기서 많이 USART와 UART를 혼동을 합니다.
UART (Universal Asynchronous Receiver Transmit) : 비동기 모드로서 사용되는 시리얼통신
USART (Universal Synchronus Receiver Transmit) : 동기 모드로서 사용되는 시리얼통신
이므로 동기모드는 동기시키기 위한 Clock선이 하나 더 들어간다는 큰 차이점을 가지고 있습니다.
여기서는 UART를 다루기 때문에 USART에 대한 설명은 시간이 되면 나중에 올리도록 하겠습니다.
UART는 비동기 송수신이며, 사용방법과 하드웨어 구성이 간단하기 때문에 많이 사용하는 방식입니다.
CLK을 사용하지 않는 UART는 시간간격으로 bit를 구분하며, 두 장치간 Baud rate를 맞춰야 통신을 할 수 있습니다.
위에 UART 통신의 그림을 볼 수 있는데 TX와 RX가 교차로 연결되어 있는것을 볼 수 있습니다.
이는 전이중(Full duplex)방식이며, 송신선과 수신선이 각각 존재하므로, 데이터 송신과 수신이 동시에 이뤄질 수 있습니다.
또한 UART frame foramt을 보시게 되면 (8 - N - 1)이라고 되어 있는데 이는 데이터 bit 8, no parity bit, stop bit 1개를 사용한다는 의미 입니다.
이제 위에 언급한대로 Baud Rate , Word Length, parity, Stop Bits를 설정해야합니다.
너는 115200-8-N-1로 설정을 하였습니다.
여기서 저는 UART2를 설정하였는데 데이터시트를 참고하게 되면 UART2는 USB-to-UART IC로 연결되어 있기 때문에 PC와 UART통신이 가능합니다.
이를 이용하여 저는 UART2를 가지고 Putty프로그램을 이용하여 통신을 할 생각입니다.
UART2와 Putty프로그램을 통하여 통신을 하기 위해서 STM32CubeMX 설정한 대로 맞춰 주시면 됩니다.
저는 UART통신을 사용하여 입력한 문자를 화면에 띄우고 엔터를 입력하게 되면 NUCLEO보드를 통해 Loop Back 받는 형식으로 프로그램을 작성하였습니다.
코딩내용은 아래와 같습니다.
먼저 HAL_UART_Recevie 함수를 통해 수신된 문자가 있는지 확인합니다.
수신된 문자를 바로 화면에 띄어주기 위해 바로 아래에 Transmit함수를 통해 전송합니다.
그다음 if( '\r' == uart_test)부분을 통해 엔터입력에 유무를 판단합니다.
엔터입력이 확인 되었으면 rx_data를 통하여 엔터전에 입력한 문자를 모두 보내고 엔터가 입력되지 않았다면 rx_data에 입력한 문자를 저장합니다.
읽어주셔서 감사합니다.