프로그래밍/STM32

[STM32] USART를 활용한 print찍기

Beginner:) 2023. 9. 30.
320x100

먼저 환경은 Ubuntu 20.04에 NUCLEO-F411RE를 사용

 

1. USART 설정

먼저 NUCLEO-F411RE는 USART 1, 2, 6이 존재하는데, USART2는 ST-LINK로 통신이 가능하기 때문에 별도의 통신하드웨어가 필요 없다.

stm32f411re_datasheet.pdf
2.13MB

 

만약 ST-LINK가 없는 board 같은 경우 TX와 RX, Vcc GND를 연결시켜주어야 한다.

 

USART에서는 Polling, interrupt, DMA가 있는데,

간단히 설명하자면 Polling은 신호를 특정 주기로 하염없이 감시/기다리는 것이고 interrupt는 이벤트로 인한 통신, DMA는 interrupt가 무수한 신호가 전달될 때 CPU의 가용시간을 과도하게 잡아먹을 수 있는데, DMA controller를 이용하여 CPU의 가용시간을 줄여주는 방식이다. 자세한 내용은 아래 링크에서 확인한다.

 

2021.12.23 - [0. 이론] - DMA란? (Direct Memory Access?)

 

DMA란? (Direct Memory Access?)

DMA란 Direct Memory Access의 약자로 말 그대로 메모리에 직접적으로 접근하는 방법을 말한다. 데이터를 가져오거나 사용할 때에는 항상 CPU가 필요하다. 근데 CPU는 접근 속도가 느릴뿐더러 이외에도

park-duck.tistory.com

 

이 글에서는 Polling, interrupt, DMA를 고민할 정도의 내용은 아니니 기본적인 Polling을 사용한다.

 

[Connectivity]에서 USART2의 [Mode]를 "Asynchronous"를 선택

2. 소스코드 작성

"Generate Code"를 실행하고 돌아와 main.c의 상단에 include와 함수를 정의

#include <stdio.h>

int __io_putchar(int ch) 
{
     (void) HAL_UART_Transmit(&huart2, (uint8_t*) &ch, 1, 100);
     return ch;
}

 

테스트를 위해 main.c의 while안에 printf문을 1초마다 출력

  while (1)
  {
    printf("HELLO\n");
    HAL_Delay(1000);
  }

 

3. 실행

Linux에서는 아래의 명령어로 확인이 가능하나, 간편하게 putty, teraterm 등 Serial 통신 프로그램으로 진행한다.

 

+) 편리한 로그 출력 전처리기 만드는 방법

2023.03.29 - [프로그래밍/C,C++,C#] - [C/C++] 간편하게 LOG 남기기(feat. 가변인자)

 

[C/C++] 간편하게 LOG 남기기(feat. 가변인자)

C언어에 가변인자라는 개념이 존재하는데 파이썬에서 *args 또는 **kargs와 같은 개념이라 생각할 수 있다. 백문이 불여일타 사용환경 : debian gcc (컴파일러에 따라 조금씩 다를 수 있으니 참고) #inclu

park-duck.tistory.com

 

반응형

댓글