연구 & 공부/STM32

STM32 Cube IDE UART 및 Printf 연결 - STM32F746NG Discovery Board

RacoonSensei 2021. 5. 11. 10:22

STM32F746 Discovery 보드에는 Arduino connector 부분에 핀을 연결할 수 있도록 되어 있습니다. 따라서 저는 그 부분에서 USART 부분을 찾아 UART 모듈과 연결하여 PC와 통신을 진행하도록 하였습니다.

 

핀연결은 다음과 같고 UART PC 연결용 모듈은 CP2102입니다.

STM32 pin과 외부 Pin이 설명되어 있는 데이터 시트의 일부를 발췌한 것입니다. 보이듯이 STM32  pin에서는 PC6, PC7인 것이 Arduino Connectors에는 D0, D1로 각각 되어 있는것을 확인할 수 있습니다.

 

이를 선으로 연결한 뒤 ( USART6_RX - CP2102_TX, USART6_TX - CP2102_RX, GND 연결 )

저번 포스팅에서 보여드렸던 Pin Setting에서 USART 설정을 해줍니다. ( PC6, PC7에 )

 

USART_6 부분 핀 위치

그리고 Connectivity에 USART를 Enable 해주기 위해서 Mode를 Asynchronous로 변경해줍니다.

 

그리고 External Clock HSE를 사용하기 위해서 RCC(Reset Clock Controller를 Crystal/Ceramic Resonator로 변경합니다.

External Clock과 관련한 이야기는 다음에 한번 직접 공부한 것을 포스팅하고자 합니다.

지금은 더 높은 클럭을 만들어내기 위해서 내부보다 외부 Clock을 사용하는 정도로 알고 계시면 될 것 같습니다.

 

그 뒤, 전에 포스팅 한 글을 보지 않으셨다면 보고 오셔서 Clock Configuration에서 HCLK를 216으로(Max) 설정을 해주시고 코드를 생성 해주시면 됩니다. ( generate code )

 

 

그러면 위 그림과 같이 USART_Init 및 우리가 필요한 Initialize 구문이 생성된 것을 볼 수 있습니다.

여기서 Init 부분을 들어가 보면

USART 6 Init 내부 코드

이와 같이 우리가 따로 설정을 해주지 않아도 동작이 되도록 세팅이 되어져 있고, 우리가 필요하면 여기서 하나씩 수정을 해가면 됩니다. 보통 BaudRate를 115200으로 하기 때문에 우리도 이부분만 수정 후 넘어가도록 하겠습니다.

 

 

추가 및 수정한 코드 부분

 

stm32f7xx_it.c

 

USART IRQHandler로 interrupt가 발생 시 들어오는 함수입니다. 제가 참고한 사이트에서 uart interrupt를 발생시킨 후 데이터가 제대로 출력되는지를 확인하는 코드가 있어서 이를 참고하여 작성하였습니다.

 

main.c

 

출력할 데이터 부분과 Rx Callback 유저 정의 함수입니다.

그리고 main함수 내부에 UART Init 아래에 다음과 같은 코드를 추가하였습니다.

여기서 USART6->TDR에 데이터를 쓰는것은 한바이트씩 데이터를 전송한다는 의미이며 제대로 전송이 되어 Register가 빈 것을 확인 후 다시 다음 데이터를 전송하도록하여 a~z까지 데이터를 전송하도록 하였습니다.

 

그 후 저희가 정의했던 start_msg를 string형태로 한번에 보낼 수 있는 HAL_UART_Transmit함수와 uart interrupt mask를 이용하여 tx interrupt를 발생하는 방법으로 데이터를 전송하는 것 까지를 작성해보았습니다.

 

실제 실행 후 다음 그림과 같이 제대로 출력이 되는 것을 확인할 수 있습니다.

 

 

그리고 printf문으로 uart출력을 하기 위해서는 간단하게 이 함수만 추가를 해주시면 됩니다.

이 함수를 main.c의 USER CODE BEGIN 0 영역에 정의하여 주시고 실행하면 printf로도 데이터가 출력이 되는 것을 확인할 수 있습니다.

 

실행 결과

 

 

 

오늘은 stm32보드로 uart 및 printf로 데이터를 전송하는 방법까지 포스팅을 해보았는데요, 참고한 사이트가 있어서 출처를 밝힙니다. 감사합니다.

UART 통신 (STM32F746) : 네이버 블로그 (naver.com)