반도체, 임베디드 Study/STM32

STM32 - UART 이론 - (1)

잇(IT) 2024. 5. 26. 18:16
728x90

장비 간의 유선 디지털 통신 방식은 Parallel, Serial 통신이 있다.

Parallel 통신은 디지털 데이터의 각 비트 별로 장비 통신 회선을 하나씩 할당하여 한꺼번에 데이터를 전송한다.

Serial 통신은 모든 비트들이 공통의 선을 이용하여 순차적으로 데이터를 전송한다.

 

UART는 시리얼 통신을 하기 때문에 시리얼 통신에 대해 자세히 알아보도록 할 것이다.


장치와 장치 간의 타이밍을 결정하는 방식은 크게 두가지가 있다.

1. 하나의 장치에서 하나의 비트마다 클록 펄스를 생성하고 그 신호를 다른 장치에 함께 전송하는 방법

2. 장치 간에 타이밍 길이를 서로 약속한 상태에서 근사적으로 비트를 전송하는 방법

 

1. 방법은 클록에 의해 시간 동기를 맞추기 때문에 동기식(Synchronous)통신 방식이라하고, 2. 방법은 비동기식(Asynchronous)통신 방식이라고 부른다.

 

STM32F4는 동기식, 비동기식을 모두 지원한다. 이를 USART(Universal synchronous asynchronous receiver transmitter)라고 부른다.(UART는 비동기식만을 뜻한다.)


비동기 시리얼 통신은 RS232C라고 하는 통신 표준으로 PC에서 많이 사용하던 통신 방식이었다.

최근 컴퓨터에서는 USB-COM 변환기를 이용하여 사용한다. Nucleo는 보드에 ST-LINK를 내장하고 있고 ST-LINK에서 USB-COM 변환 기능을 내장하고 있다.

ST-LINK와 STM32F4의 USART2가 서로 비동기 방식으로 연결되어 있으며,  ST-LINK와 PC는 USB로 연결한다.


UART 통신은 한 바이트의 데이터를 전송할 때 10~12비트를 필요로 한다.

TXD는 평상시 HIGH를 유지한다. TXD에서 데이터를 보내고자 하면 HIGH -> LOW가 되는 구간을 1비트만큼 유지하게 되는데 이를 Start bit라고 한다.

 

1비트의 Start bit 이후에 데이터를 D0부터 D7까지 8비트를 보내고 난 후에 Parity bit라는 신호를 보낸다. 패리티는 데이터가 온전히 보내졌는지, 아니면 오전송 되었는지 RXD 측에서 검출하기 위한 용도다.

 

Parity bit는 다시 짝수 패리티, 홀수 패리티로 나눌 수 있다. 짝수 패리티는 데이터의 1로 표시된 비트의 개수를 센 후에 패리티 비트를 포함한 전체 비트에서 값이 1인 비트가 짝수 개가 되도록하고, 홀수 패리티는 이와 반대이며 만약 짝수(홀수) 패리티로 약속한 장치 간의 통신 결과 1의 개수가 홀수(짝수)로 나온다면 이 데이터는 오류가 발생한 것이라고 볼 수 있다.

Parity는 선택 사항이며 짝수, 홀수, 없음 중 하나를 선택하면 된다.

 

Parity 비트 이후에는 HIGH 상태로 전환하는 정지 비트(stop bit)가 발생한다. 정지 비트는 1비트 또는 2비트 중에서 설정할 수 있다.

 

 UART 통신을 하기 위해서는 위 약속을 통신하고자 하는 두 장치에서 동일하게 미리 설정해 놓아야 한다.


UART에서 장치간 연결은 TXD <-> RXD간 서로 연결해야 한다.

 

RXD에서는 시작 비트가 발생한 후에 1.5비트 이후의 값을 읽어들인다. 시작 비트 이후 정확히 1비트 이후에는 데이터 값이 변하는 시기이므로 약간의 시간 오차로도 값이 변할 수 있기 때문이다.

반면 1.5비트 이후에는 데이터가 변하지 않는 구간이기 때문에 약간의 시간 오차가 있더라도 잘못된 값을 읽을 확률이 낮다.

 

첫번째 비트를 읽어온 후에는 1비트 간격으로 데이터를 읽으면 된다.


UART 통신의 통신 속도가 중요하다.

UART의 통신 속도는 1초에 몇 개의 비트를 전송할 수 있는가, 즉 초당 전송 비트 수를 의미하는 단위는 bps(bit per second)이다.

시간 당 신호가 얼마나 변할 수 있을까를 의미하는 보레이트(baud rate)라는 용어도 많이 사용하는데, bps와 buad rate는 다른 의미지만 UART의 경우 신호가 HIGH와 LOW밖에 없기 때문에 같은 단위로 사용한다.

baud rate의 단위는 baud이다. 아두이노에서 9600bps를 주로 사용한다.

UART의 통신속도 설정은 클록 속도와 연관되어 레지스터 값을 계산해야 하는데,  STM32CubeMX는 간단하게 설정을 할 수 있도록 지원한다.

UART의 경우 하나의 문자를 보내는데 최소 8bit(문자 하나의 크기) + 1bit(시작) + 1bit(정지) = 10bit가 필요하기 떄문에 9600bps인 경우 1초에 960개를 보낼 수 있다.

UART에서 사용하는 초당 전송 문자수는 cps(characters per second)라는 단위를 별도로 사용한다.

728x90