IAR +STM32實現printf()輸出到串列埠
阿新 • • 發佈:2019-02-09
搜尋網際網路上,關於此類問題的解決文章資料也比較豐富,不過按照其思路還是遇到了不少問題。
首先,貼程式碼,大部分程式碼都是類似的方案,重寫putchar或者fputc函式。
實際程式我定義了巨集 USE_IAR,也就是實現了putchar()函式,不過實際除錯,printf()函式會依次呼叫putchar()及fputs(),所以實際中實現其中任一一個函式即可。也就是上述的程式碼,即使我不定義USE_IAR,仍然是可用的。 需要注意的一點是重寫的putchar()函式必須要返回ch變數,否則只會列印首個字元一次。 使用STM32的串列埠傳送是阻塞的,也就是傳送完一個字元程式才會繼續執行傳送下一個字元。 記得配置IAR的環境 Options->General Options->Library Configuation的Library為Full。 加入printf()函式在未使用IAR的優化功能前提下,會增加8.5KBytes左右的readonly code memory,30Bytes的readonly data memory,及2.4KBytes左右的readwrite data memory。#ifdef USE_IAR #define PUTCHAR_PROTOTYPE int putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f) #endif PUTCHAR_PROTOTYPE{ HAL_UART_Transmit(&huart1, (char *)(&(ch)), 1, 10); return ch; }