STM32—printf函式重定義
阿新 • • 發佈:2019-01-09
為了便於除錯,我們經常要使用到printf函式,打印出除錯的資訊。在Keil軟體中,要使用printf輸出函式的話,注意需要先把use MicrolLIB選項選上,如下圖。
接著 ,在main函式的新增標頭檔案下方新增printf函式的宣告,程式碼如下:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
// 新增的程式碼如下,進行函式重構
#ifdef __GNUC__ //gcc編譯器巨集定義
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/*上面的意思是:
如果定義了巨集__GNUC__,即使用GCC編譯器,則定義巨集#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
如果沒有定義巨集__GNUC__,即不使用GCC編譯器,則定義巨集#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) */
//新增printf重構函式的實現部分
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
在mian函式的while(1)迴圈中新增列印輸出函式,測試效果。
while (1)
{
printf("printf teset\r\n");//列印輸出
HAL_Delay(1000);//延時1S
}
測試效果如下圖,可是實現printf函式的列印。