안녕하세요 이번에는 uart통신을 해봅시다.
먼저 이전에 GPIO제어를 했었던 프로젝트 폴더 경로에 uart프로젝트 폴더를 만들어줄게요
그다음 GPIO 프로젝트에 있던 MX파일을 더블클릭하여 들어가줄게요 저는 기존에 사용했던 MX프로젝트를 수정해서 사용하기 위함입니다.
먼저 UART통신을 하기위해서 저는 8bit, No Parity, 115200bps, 1 stop bit로 설정하겠습니다.
이러한설정으로 UART4~8을 활성화했어요
기존에 GPIO 프로젝트 생성할때 관련 설정을 해뒀기때문에 UART기능만 설정하고 바로 code generate를 해줍니다. 이때 MX파일을 다른이름으로 저장해서 이전에 생성했던 uart프로젝트 폴더에 저장해줬습니다.
아래 UART4_Init 함수를 보면 MX에서 설정했던 것들이 할당되있는걸 볼수있습니다.
UART4 RX,TX에 할당된 포트는 아래 사진과같군요 코드를 디버깅하고 PC 터미널프로그램과 연결할때 참고해야겠습니다.
코드 시작은 아래처럼 작성했습니다. 송신함수를 불러 uart5에 Hello World!라는 텍스트를 송신하는 간단한 코드입니다.
왜갑자기uart5를 쓰는 이유는 uart4로 계속 디버깅을 했는데 송신은 되지만 수신이 되지않는 현상이있어서 처음에는 코드 문제인줄알고 계속 삽질하다가 uart5로 바꾸니까 되더라고요;;; 정확한 원인을 못찾았지만 GPIO SW 포트와 겹치면서 생긴 문제인거같습니다.
터미널프로그램은 뭘사용해도 좋습니다. 저는 주로 사용하는comportmaster와 터미널1.9를 써봤습니다 둘에차이는 아직잘모르겠네요 ㅎㅎ; 먼저 보드에 GND와 uart5 RX, TX 포트가 할당된 핀을 찾아 아래사진처럼 연결했어요
그리고 터미널 프로그램에서 컴포트, uart설정과 동일하게 맞추고 open port를 눌러주면
아래처럼 텍스트가 계속 출력되는걸 볼수있습니다.
다음은 송신, 수신함수를 둘다사용하고 수신받은 데이터가 특정조건일때 다른텍스트를 송신하는 코드를 작성했어요
조건문은 UART5 데이터를 수신받았을때 -> 그 데이터가 O면 'G'를 송신, X면 'F'를 송신 그 외의 텍스트는 그대로 송신하는 코드입니다.
/* USER CODE BEGIN WHILE */
//uint8_t str[] = "Hello World!\r\n";
uint8_t data ='\0';
uint8_t g ='G';
uint8_t f ='F';
while (1)
{
if(HAL_UART_Receive(&huart5, &data, 1, 10)==HAL_OK)
{
if(data =='O')
{
HAL_UART_Transmit(&huart5, &g, 1, 10);
}
else if(data =='X')
{
HAL_UART_Transmit(&huart5, &f, 1, 10);
}
else
{
HAL_UART_Transmit(&huart5, &data, 1, 10);
}
}
//HAL_UART_Transmit(&huart5, (uint8_t*)str, 14, 10);
//HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
다음 게시글은 atmega128과 stm32보드간의 uart통신을 활용하여 제어해보는걸 해보려고합니다.
'stm32F429' 카테고리의 다른 글
stm32f429 보드에 printf 함수를 써보자 (0) | 2021.09.27 |
---|---|
STM32보드와 atmega128 보드를 UART통신 연결을 해보자 (0) | 2021.09.23 |
STM32CubeMX를 이용한 프로젝트 생성 과 STM32CubeIDE에서 GPIO 활용(스위치 LED 제어) (0) | 2021.09.01 |
STM32CubeMX, STM32CubeIDE 설치해보기 (0) | 2021.08.24 |
STM32F429 Discovery kit (0) | 2021.08.23 |