stm32 uart통신(폴링방식)

김상훈·2022년 8월 25일
1

stm32를 이용하여 uart통신을 해보자.

회로도를 보니 UART4가 DEBUG RX TX이므로 UART4를 써서 통신하면 된다.

비동기 통신을 할 것이기 때문에 Asynchronous 모드로 설정해주고 폴링 방식을 사용할 것이기 때문에 global interrupt도 enable 해줄 필요 없다.

오른쪽 보면 UART4를 설정하였더니 자동으로 그에 맞는 PIN도 Set되어 있는 것을 확인할 수 있다. (회로도랑 비교해보면 일치하다)

baud rate를 사진과 같이 맞혀준다.

그리고 File-Save를 누르면 generate code가 되는데 main.c를 보면

이게 생겼을 것이다.

F3을 눌러 자세히 보면 아까 우리가 설정한 것과 똑같이 돼있음을 확인할 수 있다.

위와 같이 변수 선언 및 while문 안에 함수를 선언해주면 된다.

huart4는 uart4에 대한 정보를 가지고 있는 구조체 변수라고 보면 된다.
우리가 주고 받을 데이터는 a이고 uint8_t a에서 선언해준 a이다.
uint8_t a = 'b'라고 적었는데 여기서 b이든 c이든 아무 문자 한글자라면 넣어도 상관 없다.

HAL_UART_Receive(uart번호, 데이터를 저장할 곳, 데이터 개수, 읽어드리는 시간)
이고 시간은 보통 10을 쓰더라.

이후 출력문자를 보려면 터미널 프로그램이 필요하다.
나는 tera term을 사용하였다.

tera term을 들어가서 Setup-Serial port를 들어가보면 위와 같은 사진이 나오는데 우리가 stm32cubeide에서 설정해준 것과 똑같이 설정해주면 된다.
port번호는 장치관리자에서 확인할 수 있다.

위와 같이 설정을 하고 키보드 입력을 하면 한문자씩 잘 출력됨을 알 수 있다.

profile
처음 접하는 소프트웨어

1개의 댓글

comment-user-thumbnail
2022년 12월 12일

동일하게 작성하여 진행하였는데,
if(HAL_UART_Receive(&haurt4, &a, 1, 10) == HAL_OK)
HAL_UART_Transmit(&huart4, &a, 1, 10);
이 부분에서 자꾸만

error: 'haurt4' undeclared (first use in this function); did you mean 'huart4'?
Error 1 "make -j8 all" terminated with exit code 2. Build might be incomplete
이런 에러가 뜨는데 이유를 알 수 있을까요 ?

답글 달기