[STM32] UART_printf()

이채윤·2022년 4월 25일
1

임베디드

목록 보기
19/70

[SYS 설정]

  • USART2를 선택한 뒤에 Mode를 "Trace Asynchronous Sw"로 맞춘다.

[syscalss.c파일에 대해서]


[Embedded에서의 printf()]

  • Embedded에서는 그냥 출력하는 것이 아니라, STM의 경우 Low-Level에서

printf -> putchar -> fput -> __write

이런 식으로 연결된다.
따라서, Low-Level 함수를 오버라이딩 하는 것이 필요하다. (OS에서는 printf()를 손쉽게 쓰지만,,)

[printf()로의 중간다리 역할]

  • 위의 코드는 main.c에서 while(1)안에 printf()를 실행시켰을때 해당 UART에 연결시켜서 (위 코드에서는 USART1에 해당된다.) 해당 포트에 출력해주는 역할을 한다.
  • 즉, 먼저 설정해준 UART는 HAL_UART_Transmit등의 함수를 쓸 수 있도록 만들어준 것이고, 위의 코드는 그 중간다리 역할이다.

[출력]


  • main안에 위처럼 코드를 작성해주게되면, 도스창에 "hello world!"가 출력된다.

[출력이 되지 않을때 고려해볼 사항]

1) Baudrate를 확인

  • 위처럼 UART의 Baudrate를 9600 Bits/s로 맞췄다면, 아래처럼 Tera term의 speed도 9600으로 맞춰줘야 한다.
    • tera term의 speed 설정 위치 : Setup/Serial port...


2) USB 연결 가능한 USART 확인 (datasheet 참고)

  • 각각의 보드마다 ST-LINK와 연결되는 UART가 다르다.
    • 필자의 경우, USART1를 사용했을때는 계속 출력이 안됐는데 USART2를 사용하니까 정상적으로 출력이 됐다. (NUCLEO STM32F446RE 사용)

1개의 댓글

comment-user-thumbnail
2023년 7월 6일

참고되었습니다. 감사합니다. ^^

답글 달기