一、前言
什么是重定向?重定向是指將fputc里面的輸出指向目標設備。
因printf函數調用了fputc,而fputc輸出有默認指向的目標,
且不同庫中的fputc輸出指向不同,所以需要重寫fputc
二、標準庫與HAL庫實現重定向到串口
若需要printf輸出到串口,則需要將fputc里面的輸出指向串口,這一過程稱為重定向。
1.標準庫(重定向到USARTx,代碼中為USART1)
int fputc(int ch,FILE *p)
{
USART_SendDate(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
2.HAL庫 (重定向到huartx,代碼中為huart1)
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
NOTES:
1.調用printf需先導入stdio.h頭文件
2.需勾選Target中的use MicroLIB
關鍵字:STM32 printf 重定向 串口輸出
引用地址:
STM32 printf重定向(串口輸出)
推薦閱讀最新更新時間:2025-06-06 15:52
STM32重定向C庫printf/scanf
參考例程 ///重定向c庫函數printf到串口,重定向后可使用printf函數 int fputc(int ch, FILE *f) { /* 發送一個字節數據到串口 */ USART_SendData(DEBUG_USART, (uint8_t) ch); /* 等待發送完畢 */ while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return (ch); } ///重定向c庫函數scanf到串口,重寫向后可使用scanf、getchar等函數 int fgetc(FILE *f) { /* 等待串口輸入數據
[單片機]
STM32單片機編程printf()函數重定向
在stm32單片機編程中,可以重定向printf()函數來輸出調試信息。 編寫fputc()函數 其實printf()函數在頭文件中被定義成了一個宏,會調用到fputc()函數,但在stm32單片機編程中不可以直接調用標準庫的fputc()函數進行輸出信息,需要自己編寫fputc()函數供printf()函數來調用。編譯器進行編譯時首先會調用自己編寫的fputc()函數,而不是庫函數。 int fputc(int ch, FILE*f) { USART_SendData(USART1, (uint16_t)ch); //通過串口輸出
[單片機]
STM32工程上printf()函數的方法實現
針對STM32的串口編程,可以通過USART1向計算機的串口調試助手打印數據,或者接收計算機串口調試助手的數據。 下面,我們可以實現STM32工程上的printf()函數了,方便用于程序開發中調試信息的打印。 方法1:使用MicroLIB庫 1.1 KEIL-MDK中的Use MicroLIB選項 在MDK開發環境中, MicroLib是缺省c庫的備選庫,它可裝入少量內存中,與嵌入式應用程序配合使用,且這些應用程序不在操作系統中運行。MicroLib進行了高度優化以使代碼變得很小,功能比缺省c庫少,不具備某些ISO C特性,部分庫函數的運行速度也比較慢,如內存拷貝函數memcpy()。 MicroLib與缺
[單片機]
STM32串口通信中使用printf發送數據配置方法
STM32串口通信中使用printf發送數據配置方法(開發環境 Keil RVMDK) 標簽: STM32 串口通信 printf方法 2011-06-29 23:29 在STM32串口通信程序中使用printf發送數據,非常的方便。可在剛開始使用的時候總是遇到問題,常見的是硬件訪真時無法進入main主函數,其實只要簡單的配置一下就可以了。 下面就說一下使用printf需要做哪些配置。 有兩種配置方法: 一、對工程屬性進行配置,詳細步驟如下 1、首先要在你的main 文件中 包含“stdio.h” (標準輸入輸出頭文件)。 2、在main文件中重定義函數 如下: // 發送數據 in
[單片機]
stm32使用中,printf函數不執行的問題
一、程序中已經添加了printf的庫函數 #include“stdio.h” 二、stm32串口通訊測試沒問題,此處可以通過調用 USART_SendData(USART1, 0xAA)函數來進行驗證; 三、現象。printf函數無法工作 四、解決辦法,使用自帶的迷你庫,就可以正常運行。
[單片機]
STM32 keil printf的使用
請在MDK(keil)工程屬性的 Target -》 Code Generation 中勾 選 Use MicroLIB 前提是你有一個完整keil的工程 比如ADC的調試的時候很多時候用到串口 這里教你怎么樣使 用Printf 函數 紅色字句為重點!!!!! 若使得在程序中使用Printf需做一下幾步 1,輸入輸出文件包含#include stdio.h 2,在程序下添加宏定義代碼 /* Private function prototypes -----------------------------------------------*/ #ifdef __GNUC__ /* With GCC/RAI
[單片機]
stm32 printf輸出到USART1
/************************頭文件*****************************************/ #include stm32f10x_lib.h //包含所有的頭文件 #include stdio.h /*******************************位綁定定義*****************************************/ //#define GPIOA_ODR_A (GPIOA_BASE+0x0C) //#define GPIOA_IDR_A (GPIOA_BASE+0x08) //#define GPIOB_ODR_A (GPIOB
[單片機]
如何高效地使用51單片機串口輸入輸出
51單片機一般使用串口的方法都是這樣的 #include reg52.h #define uint unsigned int void UART_Init(); uint num ; /* ****************************************** **函數名稱:主函數 ******************************************* */ int main() { UART_Init(); while(1); } /* ***************************************** **函數功能:串口初始化函數 **************
[單片機]