前言
關(guān)于printf函數(shù)和fputc函數(shù)聯(lián)系和區(qū)別
聯(lián)系:
1.共同目標:
printf 函數(shù)和 fputc 函數(shù)都用于將字符輸出到指定的輸出流中。
2.字符輸出:
兩個函數(shù)都可以用于輸出一個字符,但在實際使用時,printf 函數(shù)通常用于輸出格式化的數(shù)據(jù),而 fputc 函數(shù)更常用于單個字符的直接輸出。
區(qū)別:
1.功能差異:
printf 函數(shù)提供了更高級別的功能,可進行格式化輸出、數(shù)值轉(zhuǎn)換、對齊等操作。而 fputc 函數(shù)僅僅將單個字符寫入到指定的輸出流中。
2.參數(shù)類型:printf 函數(shù)接受格式化字符串和可變參數(shù)列表作為參數(shù),因此可以輸出多個不同類型的數(shù)據(jù)。而 fputc 函數(shù)接受一個字符和指向輸出流的指針作為參數(shù)。
3.使用場景:由于 printf 函數(shù)提供了豐富的格式控制和數(shù)據(jù)轉(zhuǎn)換功能,通常用于日常的輸出和調(diào)試。而 fputc 函數(shù)更適合在特定情況下,直接將單個字符輸出到指定設備或文件中。
為什么在stm32中要重定向printf函數(shù)?
在STM32微控制器中,printf 函數(shù)是用于將格式化的字符串輸出到標準輸出的函數(shù)。然而,默認情況下,STM32芯片并沒有直接連接一個用于標準輸出的終端設備,如串口或LCD顯示屏。因此,為了使用 printf 函數(shù)來輸出調(diào)試信息或結(jié)果,需要對其進行重定向。
====================================================
其實在printf函數(shù)內(nèi)部來說,是封裝了一個fputc函數(shù)來進行字符輸出操作
所以這就是本節(jié)內(nèi)容,如何在stm32中重定向printf,就是重定向fputc函數(shù),本節(jié)使用串口實現(xiàn),直接看代碼實現(xiàn)
直接在你寫的usart.c中添加即可
//重定向fputc函數(shù)
int fputc(int ch, FILE *f) //兩個標準參數(shù)
{
//將要發(fā)送的數(shù)據(jù)通過串口1發(fā)送出來(可以用電腦上的串口調(diào)試軟件接收)
USART_SendData(USART1, ch);
//等待發(fā)送是否完成
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
return ch;
}
如何找到這個函數(shù)和函數(shù)詳解如下:
以下是關(guān)于STM32F4芯片給的寄存器手冊,具體查找為何要這樣重寫
根據(jù)上圖,我已經(jīng)把為何重定向和如何重定向,以及重定向函數(shù)參數(shù)都做了仔細解讀
使用:
1.直接在main函數(shù)直接使用printf函數(shù)即可(其他地方也可以使用,注意添加頭文件)
int main(void)
{
Usart1_Init();
while(1)
{
//添加好stdio.h頭文件之后,就可以正常使用printf函數(shù)了,方便以后調(diào)試
printf("你好,熱愛代碼陌生人!\n");
delay_ms(1000);
}
2.在編譯的時候勾選標準c微庫
3.即可在電腦上的調(diào)試助手看到打印的數(shù)據(jù)
注意:
1.打印的是亂碼,原因如下文章來源:http://www.zghlxwxcb.cn/news/detail-774844.html
- 波特率設置不匹配:在使用串口進行輸出時,波特率必須與目標終端設備(例如PC)的波特率匹配。請確保在初始化串口時,將波特率設置為與終端設備相同的值。
- 時鐘配置錯誤:串口通信涉及到時鐘的配置。如果時鐘配置錯誤,數(shù)據(jù)傳輸可能會出錯,導致輸出結(jié)果亂碼。請仔細檢查時鐘配置是否正確。
- IO引腳配置錯誤:如果將串口的TX引腳連接到錯誤的引腳上,或者配置了錯誤的引腳復用功能,也可能導致輸出亂碼。請確保將TX引腳連接到正確的引腳,并正確配置引腳復用功能。
- 緩沖區(qū)溢出:如果使用的緩沖區(qū)大小不足以容納輸出的數(shù)據(jù)量,可能會導致數(shù)據(jù)溢出,從而產(chǎn)生亂碼。請確保使用足夠大的緩沖區(qū)。
- 中斷優(yōu)先級設置錯誤:如果串口中斷的優(yōu)先級設置得不正確,可能會導致數(shù)據(jù)傳輸錯誤,進而導致輸出亂碼。請確保中斷優(yōu)先級設置正確。
如此,STM32F4中printf函數(shù)重定向已經(jīng)完成,具體芯片還是要看具體的函數(shù)和寄存器進行重寫
最后如果覺得文章對您有幫助,請留下您免費的贊,祝生活開心!文章來源地址http://www.zghlxwxcb.cn/news/detail-774844.html
到了這里,關(guān)于關(guān)于STM32F4系列中printf重定向問題詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!