車規(guī)級(jí)MCU開(kāi)發(fā),不像PC端,包含stdio.h頭文件就可以使用Printf()函數(shù)。為了實(shí)現(xiàn)PC端Printf()接口功能,需要在MCU端實(shí)現(xiàn)Printf()接口的"重定向"。所謂的重定向,就是重新定義Printf()接口函數(shù)里調(diào)用的與輸出設(shè)備相關(guān)的函數(shù),eg:使用Printf()接口將MCU中的信息,通過(guò)串口或者Ethernet輸出到終端上位機(jī)。
所以,如果要實(shí)現(xiàn)Printf()接口的重定向,選擇合適的MCU驅(qū)動(dòng)是第一步,本文選擇UART(Universal Asynchronous Receiver-Transmitter)實(shí)現(xiàn)Printf()接口的重定向,討論如何實(shí)現(xiàn)Printf()接口重定向到UART。
1、UART驅(qū)動(dòng)實(shí)現(xiàn)
對(duì)于UART驅(qū)動(dòng)的實(shí)現(xiàn),根據(jù)芯片類型而定。本文使用TC397,文末給出源碼,不做具體討論。
2、重定向Printf()
重定向Printf()接口,本文重新命名為Debugger_printf(),在Debugger_printf()接口中調(diào)用UART驅(qū)動(dòng)發(fā)送接口sendUARTMessage(),Debugger_printf()接口代碼示意如下:
(一)頭文件
Debugger_printf()接口中需要包含頭文件,因?yàn)樵谌缟洗a中使用到了宏va_list,而宏va_list在頭文件中定義。頭文件并不在工程文件中,而是在Mingw64編譯環(huán)境庫(kù)中,示意如下:
除了宏va_list之外,使用到的va_start(v,l)、va_end(v)等也在頭文件中。
3、Debugger_printf()使用
完成Debugger_printf()接口重定向以后,即可在程序任意需要輸出信息的位置打印log,之后在串口終端中顯示信息。eg:在main線程中打印信息,代碼示意如下:
輸出的log信息如下所示:
-
mcu
+關(guān)注
關(guān)注
146文章
17829瀏覽量
360272 -
接口
+關(guān)注
關(guān)注
33文章
8933瀏覽量
153189 -
uart
+關(guān)注
關(guān)注
22文章
1265瀏覽量
103228 -
代碼
+關(guān)注
關(guān)注
30文章
4886瀏覽量
70242 -
Printf
+關(guān)注
關(guān)注
0文章
84瀏覽量
14079
發(fā)布評(píng)論請(qǐng)先 登錄
STM32使用串口重定向系統(tǒng)
實(shí)現(xiàn)printf函數(shù)的重定向
如何實(shí)現(xiàn)printf()函數(shù)與scanf()的串口重定向?
STM32使用串口重定向printf打印時(shí)程序不執(zhí)行是為啥呢?
如何去實(shí)現(xiàn)STM32 printf的串口重定向呢
如何去實(shí)現(xiàn)printf()函數(shù)與scanf()的串口重定向呢
怎么去解決STM32串口重定向printf出現(xiàn)FILE未定義的問(wèn)題呢
把printf()函數(shù)重定向到LCD怎么實(shí)現(xiàn)呢
使用printf()函數(shù)時(shí)默認(rèn)UART0輸出,請(qǐng)教如何重定向printf()到UART1?
實(shí)現(xiàn)重定向printf()和scanf() 函數(shù)案例分析

Keil下使用STlink重定向printf的配置

評(píng)論