본문 바로가기
프로젝트 기록/23SEMA_Control_STM32

USART, UART차이점 정리/ 시리얼 통신(USART)

by 소요이 2022. 9. 28.
728x90

정리: 클락의 유무 (유:USART, 무:UART)

 

USART(Universal Synchronus/asynchronous R T) = 범용 동기/비동기화 송수신 (반이중)

: 데이터 동기화를 위해 별도 클록 신호 전송. 클락의 유무만 체크하여 데이터 송수신, 효율이 높고 동기식이라 속도도 빠름, 클락 핀때문에 비싸고 어려움

클락때문에 데이터, 타이머가 모두 필요하고 속도가 고정되어 있음(빠름), 데이터를 일반적인 블럭 형태로 전송

 

UART(Universal Asynchronous Receiver Transmitter)= 범용 비동기화 송수신 (전이중)

: 데이터만 보냄. 데이터 시작과 끝을 알기 위해 Start Bit(항상 0), Stop Bit(항상 1)가 필요함 (+오류검출 Pariry비트)

속도가 고정X, 일반적으로 한바이트(8bit)씩 전송,  최대속도는 115200bps. 

 

일반적으로 UART 시리얼 통신 = USART 비동기 모드

 

- 얘네를 하려면 포트 규격은 물론 포트간 통신 Protocol(통신 규약)이 같아야 함, 

- Tx, Rx, Gnd핀이 잘 연결되어야 함(Tx와 Rx는 서로 cross되어 연결, Gnd핀도 잘 연결되어야 전압 접지 레벨이 같아져서 정상적인 데이터 송수신 가능)

 

 

 


실습내용

 

  • 테라텀 시리얼 통신으로 설정하고, 보오 레이트 115200으로 맞춰주기(아니면 외계어로 깨짐)
  • 먼저 IDE로 코드 run 시키고 tera term 켜면 확인 가능
  • printf함수 처리하려면 syscalls.c 파일 필요. (해당프로젝트-Core-Src- syscalls.c 에서 확인가능)
  • ifdef는 뒤에 적힌 GNUC가 정의되어 있다면 다음 코드들을 실행하는 거임
  • 포팅 코드 (중요 중요 중요!) !!!!!!표준 출력장치를 USART2 장치로 포팅해야함
    • 포팅 코드: HAL_UART_Transmit 함수에서 출력하려는 UART 페리페럴을 정확히 지정해야함