[SYS 설정]
- USART2를 선택한 뒤에 Mode를 "Trace Asynchronous Sw"로 맞춘다.
[syscalss.c파일에 대해서]
- printf()함수를 처리하기 위해서는 syscals.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 사용)
참고되었습니다. 감사합니다. ^^