其實在 ST 範例包中就可以找到範例,我找了一下 在 STM32F411RE-Nucleo 裡的 UART 有一項 UART_printf 專案。
只要在 main.c 裡加兩段程式碼,在 Define 自變數 段加入以下
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
然後再任一處 加入以下這個 Function , 我的習慣是放在 SystemClock_Config(void) 前
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
huart1是在程式定義 UART 自變數,依你的環境做適當調整。
這樣就完成了。
在 main() 不免俗的來一下 Hello
printf("Hello!\r\n");
..... 等等。
undefined reference to `_sbrk'
在最近的 STM32CUBE 版本中已經加入了 syscall.c 可以不用再手動加入。
範例連結
https://github.com/cold63/STM32F031x6Project/tree/master/UARTPrintf相關連結
printf 後記
https://www.makdev.net/2018/08/stm32-printf.html