재잼재잼의 티스토리

6. UART 문자열 송/수신 본문

MCU

6. UART 문자열 송/수신

재잼재잼 2019. 1. 16. 12:34

문자를 송/수신 했지만, 실제 MCU관련 프로젝트를 진행할 때는 문자보다는 문자열을 주고받는 경우가 많다.


문자열 송/수신은 문자 송/수신을 문자열 마지막까지 반복하는 형태로 구성되는데, 여기서 문자열이 어떻게 구성되어 있는지를 알아보자.


Hello Worl라는 문자열을 송신하고자 하면,


char *str = "Hello World"; 로 작성을 한다.


메모리의 str 위치부터 1바이트씩 배열의 형태로 저장이 되는데,


 str[0]

str[1] 

str[2] 

str[3] 

str[4] 

str[5] 

str[6] 

str[7] 

str[8] 

str[9] 

str[10]

str[11] 

 H

e

 

W

\0


로 마지막에 '\0'을 포함하여 문자열의 끝임을 표시한다.


예를 들어 ATmega128에서 PC 시리얼 모니터로 출력하기 위해서는 이러한 문자열의 특성을 사용하여



와 같이 코드를 작성할 수 있다.(UART1_transmit는 문자를 전송하는 코드)


반대로, PC의 시리얼 모니터에서 입력한 값을 MCU에서 처리하기 위해서는 PC에서 문자열을 입력할 때 어떻게 처리가 되는지 알아야 한다.


PC에서 Enter키를 누를 경우 발생하는 CR(carriage return) LF(Line Feed)에 대해서 알아보자.


CR은 '\r'로 표현되고, LF는 '\n'으로 표현된다. 일반적인 윈도우 환경에서는 Enter 키를 누르면 CR과 LF가 전송된다.


즉, Hello world를 입력하면  "Hello World\r\n"이 전송된다고 볼 수 있다.


반면에 리눅스 환경에서 Enter키를 입력하면 CR이 붙어서 전송이 되는데, "Hello World\r"가 전송된다고 볼 수 있다.


이런 특성을 사용하여 MCU에서 문자열의 수신작업을 수행할 수 있다.



윈도우 환경에서는 엔터 입력시 \r\n이 입력되므로, \n을 수신할 때 까지 buffer 배열에 저장한다.



시리얼 모니터로 사용하는 ComPortMaster 프로그램이다. 문자열을 3가지 기록해두고 send 버튼을 눌러서 MCU로 송신을 한다.


처음 할 때는 동작하지 않았는데, 엔터키로 입력하는 것이 아니라 send버튼으로 입력을 하기 때문에 문자열에 CR/LF가 붙어서 전송되지 않았다고 생각한다.


프로그램 사용설명서를 보니까 ASCII왼쪽에 체크박스에 체크를 하고 send하면 CR/LF이 붙어서 전송된다고 해서 그렇게 테스트 한 결과다.


----------------------


추가로 PuTTY는 리눅스 방식을 사용하므로 문자열 마지막에 CR 이 붙어서 전송된다.


그래서 시리얼 모니터로 PuTTY를 사용한다면, 문자열 검사할 때 \n 대신 \r 을 검사하면 정상적으로 동작을 한다.

'MCU' 카테고리의 다른 글

8. CLCD 사용하기(2)  (0) 2019.01.23
7. CLCD 사용하기  (0) 2019.01.22
5.UART 문자 송/수신  (0) 2019.01.15
4. UART사용 - 초기화  (0) 2019.01.14
3. UART 개요  (0) 2019.01.13