UART 통신을 해보자

김지성·2022년 7월 13일
2

Embedded

목록 보기
8/19

1.1 UART 모듈

(모듈)DTR

(모듈)RX[송신부] ----- (MCU) TX [PA9를 브레드 보드 60번에 연결]

(모듈)TX[수신부] ----- (MCU) RX [PA10를 브레드 보드 55번에 연결]

(모듈)VCC

(모듈)CTS

(모듈)GND ----- (브레드 보드) 마이너스

(MCU)GND ----- (브레드 보드) 마이너스


1.2 UART 깊게 파보기


Asynchronous : 비동기
Synchronous : 동기


huart는 UART_HandleTypeDef라는 구조체에서 huart1으로 선언되어 있다.


구조체의 변수인 huart1에 접근 및 값을 채워준다.


HAL_UART_Transmit()의 매개변수를 보면 위와 같다. UART_HandleTypeDef는 포인터 변수 *huart를 가리키므로 &huart1을 해야 한다.

[ huart1의 주소값은 &(huart1.Instance)의 주소값과 같은걸로 보아 HAL_UART_Transmit()은 구조체의 정보를 가져와 사용한다. ]

HAL_UART_Transmit(UART번호, 출력할 문자열, 문자 갯수, Timeout)


최종적인 코드는 위와 같다.


이런식으로도 표현이 가능하구나~

//Direct Write
HAL_UART_Transmit(&huart1, "anyang", 6, 1000);
//Select Write
uint8_t tx_data = 'anyang'
HAL_UART_Transmit(&huart1, &rx_data, 6, 1000);
//String Write
uint8_t *tx_data = 'anyang'
HAL_UART_Transmit(&huart1, tx_data, sizeof(tx_data), 1000);

2.1 동기와 비동기

비동기 방식 = 클럭 없음(시간이 조금 불정확해도 사용이 가능)
동기 방식 = 클럭 있음(시간을 정확하게 쪼개서 사용)

UART(Universal Asynchronous Receiver Transmit) : 비동기 모드로서 사용되는 시리얼 통신
USART(Universal Synchronus Receiver Transmit) : 동기 모드로서 사용되는 시리얼 통신

2.2 Baud Rate

Q : 동기 방식에서는 시간을 쪼갠다고 했는데 어떻게 쪼개는건가요?

Baud Rate를 이용하여 쪼갭니다. 예를 들어 Baud Rate가 9600이라면 1초를 9600번 쪼갠것과 같은 의미를 가집니다.

Q : Baud Rate가 작아진다면 어떤 현상이 발생하나요?

Baud Rate를 줄이게 된다면 송신하는 속도가 느려질 수도 있습니다.
추가적으로 송신과 수신의 Baud Rate를 맞춰야지만 원활한 통신이 가능합니다. 그리고 디버그를 할 때는 9600보다는 115200를 선호합니다.

2.3 Word Length

데이터를 송수신 할 때는 시작부분에 Start bit, 끝 부분에 Stop bit를 둬서 바이트의 경계를 나눕니다.


Word Length는 Start bit 이후에 데이터를 8bit를 보낼것인지 9bit를 보낼것인지 결정해주는 역할을 합니다.
(마무리는 항상 Stop bit입니다.)

TX에서 Word Length를 8bit로 설정하고, RX에서 Word Length를 9bit로 설정한다면 오류가 날 가능성이 있다.

2.4 사실 시리얼 통신은..

시리얼 통신은 노이즈, 오류가 많은 편이다.

3.1 printf()를 이용하여 UART 통신을 해보자


++ 동기와 비동기 방식은 또 뭘까?
++ strlen과 sizeof의 차이점
++

  uint8_t *tx_data = "jiseong\r\n";
  while (1)
  {
	  HAL_UART_Transmit(&huart1, tx_data, sizeof(tx_data), 1000);

sizeof를 했더니 "jise"까지만 출력되는걸 확인할 수 있었다. 하지만 strlen을 하면 "jiseong"전부 다 나온다 이유가 뭘까?
++uart 데이터시트를 읽어보는게 좋을거 같다.
++https://kgkang.tistory.com/279
++https://m.blog.naver.com/musk95/221872674042

profile
JUST DO IT

0개의 댓글