0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的疑難雜癥之一:Printf的使用

朱老師物聯(lián)網(wǎng)大講堂 ? 2024-04-02 08:09 ? 次閱讀

一、Printf簡(jiǎn)介

Printf是一個(gè)標(biāo)準(zhǔn)的C庫(kù)API,用來(lái)打印信息顯示的。Printf的底層輸出調(diào)用,在windows環(huán)境下是fputc函數(shù),在GNUC環(huán)境下是__io_putchar函數(shù)。Printf主要做兩件事:第一件是將參數(shù)字符串以及可變參數(shù)進(jìn)行解析,格式化成 一串字符串。第二件事就是將格式化的字符串一個(gè)字節(jié)一個(gè)字節(jié)的輸出出去(至于以什么樣的方式輸出那就得看底層的實(shí)現(xiàn)了,比如有OS的情況下就是輸出在命令行下的)。52a1b8ce-f085-11ee-9118-92fbcf53809c.gif

二、Printf和串口

嵌入式設(shè)備中一般有兩種調(diào)試方法,一種是硬件調(diào)試無(wú)需軟件干預(yù)(利用廠商提供的仿真器和應(yīng)用軟件),另一種是軟件調(diào)試(利用串口發(fā)送調(diào)試)。一般在系統(tǒng)初始階段串口無(wú)法使用的情況下都是用的硬件進(jìn)行調(diào)試但是這種方式不太靈活,限制很多,能用軟件調(diào)試盡量都用軟件,這種方式比較靈活。

串口設(shè)備本身只能將我們寫(xiě)入數(shù)據(jù)寄存器的數(shù)據(jù)發(fā)送出來(lái),無(wú)法支持更多的功能。比如將存放十進(jìn)制的數(shù)據(jù)的變量轉(zhuǎn)換成字符形式再發(fā)出去,這樣我們?nèi)瞬抛R(shí)別。而標(biāo)準(zhǔn)庫(kù)的printf就是實(shí)現(xiàn)了這些功能。

printf的第一件事主要是軟件實(shí)現(xiàn),這個(gè)已經(jīng)由C標(biāo)準(zhǔn)實(shí)現(xiàn)了我們不用管;而第二件事就是將printf格式化好的字符串輸出到那個(gè)設(shè)備。所以我們只需要將fputc或者_(dá)_io_putchar函數(shù)實(shí)現(xiàn)為串口的發(fā)送,然后通過(guò)USB轉(zhuǎn)串口硬件發(fā)送到上位機(jī)上,上位機(jī)再通過(guò)串口助手程序顯示出來(lái)。代碼如下:

52b08cf0-f085-11ee-9118-92fbcf53809c.png

除此之外,我們還要再做一點(diǎn)配置工作—禁用半主機(jī)模式,禁用了半主機(jī)模式才能使用標(biāo)準(zhǔn)庫(kù)函數(shù)printf()打印信息到串口,在程序中加入以下代碼即可。

那么什么是半主機(jī)模式?為什么不用它?半主機(jī)模式是ARM單片機(jī)的一種調(diào)試機(jī)制,跟串口調(diào)試不一樣的是,它需要通過(guò)仿真器來(lái)連接電腦和ARM單片機(jī),并調(diào)用相應(yīng)的指令來(lái)實(shí)現(xiàn)單片機(jī)向電腦顯示器打印信息(或者從電腦鍵盤(pán)讀取輸入)。簡(jiǎn)而言之,這種方法比串口調(diào)試更復(fù)雜(需要進(jìn)行更多的配置操作),也更不靈活(一定要用仿真器)。

5309d120-f085-11ee-9118-92fbcf53809c.png

上面的配置似乎有點(diǎn)麻煩,要加入這么一堆難懂的代碼,難道沒(méi)有更簡(jiǎn)便點(diǎn)的方法嗎?有,但不推薦

方法是使用微庫(kù)(MicroLIB),只要在Keil的“Options for Target -> Target ->Use MicroLIB”上打勾,即可使用串口打?。╢putc()函數(shù)還是要實(shí)現(xiàn),但上述的禁用半主機(jī)代碼不用加)。

微庫(kù)是區(qū)別于C標(biāo)準(zhǔn)庫(kù)的另一個(gè)庫(kù),當(dāng)使用微庫(kù)時(shí),就默認(rèn)關(guān)閉了半主機(jī)模式,也就不用添加上面的代碼。這樣雖然方便,但個(gè)人建議能不用就不用,原因:

第一,微庫(kù)是為小內(nèi)存嵌入式設(shè)備而設(shè)計(jì)的,使用它可以減少代碼所占空間,但對(duì)現(xiàn)在STM32等單片機(jī)來(lái)說(shuō),內(nèi)存一般都?jí)蛴?,微?kù)并非必需。

第二,微庫(kù)相對(duì)于C標(biāo)準(zhǔn)庫(kù)而言,支持的功能更少,主要體現(xiàn)在對(duì)操作系統(tǒng)的支持上。總的來(lái)說(shuō),標(biāo)準(zhǔn)的東西總是相對(duì)更可靠,所以為了不必要的掉坑,還是用C標(biāo)準(zhǔn)庫(kù),不用微庫(kù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352468
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61965
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    解決射頻電路的疑難雜癥的方法分享

    射頻電路板設(shè)計(jì)由于在理論上還有很多不確定因素,因此統(tǒng)稱(chēng)為“疑難雜癥”。對(duì)于初入茅廬的工程師而言,缺乏實(shí)戰(zhàn)經(jīng)驗(yàn),自己獨(dú)立應(yīng)變能力較差,本文更適合給剛剛踏入電源行業(yè)的工程師,希望有助于工程師們遇到那些“疑難雜癥”時(shí),可以從容應(yīng)對(duì)。
    發(fā)表于 10-21 13:48

    二層板的射頻RF信號(hào)如何控阻抗 四層板的射頻RF信號(hào)如何控阻抗?射頻信號(hào)是否可以不控阻抗,精選資料分享

    來(lái)自專(zhuān)治PCB疑難雜癥主群(五大群群友突破2000人啦,添加楊老師微信號(hào)Johnnyyang206,可添加入群)的疑難雜癥討論:二層板的射頻如何走線 四層板的射頻如何控阻抗 射頻信號(hào)是否可以不控阻抗
    發(fā)表于 07-27 07:44

    飛控疑難雜癥解決方法匯總

    (pixhawk)飛控疑難雜癥解決方法匯總(持續(xù)更新)by 怒飛垂云2019年11月4日APM無(wú)法解鎖/飛控連不上/黃燈閃爍/起飛側(cè)翻/定點(diǎn)定不住/定高不穩(wěn)/電臺(tái)連不上/地面站連不上……無(wú)人機(jī)調(diào)試
    發(fā)表于 08-06 06:21

    DC/DC電源輸入輸出要隔離嗎

    DC/DC電源輸入輸出要隔離還是要保證短距離回路?關(guān)注微信公眾號(hào):專(zhuān)治pcb疑難雜癥 (PCBDoctor) 解決遇到的各種PCB疑難雜癥。整理:楊老師 專(zhuān)治PCB疑難雜癥群平臺(tái)簡(jiǎn)介專(zhuān)治PCB
    發(fā)表于 11-16 07:28

    減少DC-DC輸出端紋波的方法

    來(lái)自專(zhuān)治PCB疑難雜癥總?cè)旱?b class='flag-5'>疑難雜癥解析(添加楊醫(yī)生微信號(hào):johnnyyang206可入群討論): 關(guān)注楊醫(yī)生微信公眾號(hào):專(zhuān)治pcb疑難雜癥 (PCBDoctor) 解決遇到的各種PCB疑難
    發(fā)表于 11-17 06:54

    電源平面是否可以作為RF信號(hào)

    轉(zhuǎn)自專(zhuān)治pcb疑難雜癥Q:來(lái)自專(zhuān)治PCB疑難雜癥首群:四層板,層疊走TOP-GND-POWER-BOTTOM,做共面阻抗,參考第三層的話,剛好天線下面的第三層區(qū)域走的電源3V3,有影響嗎?還是天線
    發(fā)表于 12-31 08:17

    人工智能解決了許多的疑難雜癥

    深度學(xué)習(xí)目前取得重大進(jìn)展,解決了人工智能界的盡最大努力很多年仍沒(méi)有進(jìn)展的疑難雜癥。
    發(fā)表于 06-29 10:25 ?724次閱讀

    3D打印康復(fù)輔具 為疑難雜癥的治療帶來(lái)新的可能

    句祝你平安、愿你健康,飽含的是祝福者滿(mǎn)滿(mǎn)的真誠(chéng)與心意。當(dāng)身體遭受病痛的折磨時(shí),人們心中懷有的心愿就是早日恢復(fù)健康,能夠像往常樣自由的嬉笑打鬧、蹦蹦跳跳。高科技的迅速發(fā)展,正為疑難雜癥的治療帶來(lái)新的可能。醫(yī)生和患者,也成為了接
    的頭像 發(fā)表于 03-17 14:12 ?1876次閱讀

    在vscode上用gcc征服debug過(guò)程中遇到的各種疑難雜癥

    vscode上用gcc征服debug過(guò)程中遇到的各種疑難雜癥! 2. 安裝MinGW MinGW是什么東西,怎么安裝?這里就不詳述了,隨便百度出來(lái)堆。
    的頭像 發(fā)表于 11-18 16:18 ?4996次閱讀

    RF射頻信號(hào),高速信號(hào)能將電源平面作為參考平面嗎?

    來(lái)自專(zhuān)治PCB疑難雜癥主群(五大群群友突破2000人啦,添加楊老師微信號(hào)Johnnyyang206,可添加入群)的疑難雜癥:Q:來(lái)自專(zhuān)治PCB疑難雜癥首群:四層板,層疊走
    發(fā)表于 11-06 21:06 ?10次下載
    RF射頻信號(hào),高速信號(hào)能將電源平面作為參考平面嗎?

    DC/DC電源輸入輸出要隔離還是要保證短距離回路?

    來(lái)自專(zhuān)治PCB疑難雜癥主群(群友突破1200人啦,添加楊老師微信號(hào)Johnnyyang206,可添加入群)的疑難雜癥:DC/DC電源輸入輸出要隔離還是要保證短距離回路?關(guān)注微信公眾號(hào):專(zhuān)治pcb
    發(fā)表于 11-09 15:51 ?16次下載
    DC/DC電源輸入輸出要隔離還是要保證短距離回路?

    如何減少DC-DC輸出端的紋波?

    ?來(lái)自專(zhuān)治PCB疑難雜癥總?cè)旱?b class='flag-5'>疑難雜癥解析(添加楊醫(yī)生微信號(hào):johnnyyang206可入群討論):????關(guān)注楊醫(yī)生微信公眾號(hào):專(zhuān)治pcb疑難雜癥 (PCBDoctor) 解決遇到的各種PCB
    發(fā)表于 11-09 19:06 ?2次下載
    如何減少DC-DC輸出端的紋波?

    Linux問(wèn)題故障定位大全

    有時(shí)候會(huì)遇到疑難雜癥,并且監(jiān)控插件并不能眼立馬發(fā)現(xiàn)問(wèn)題的根源。
    的頭像 發(fā)表于 07-10 10:27 ?410次閱讀
    Linux問(wèn)題故障定位大全

    羅盤(pán)為什么會(huì)出現(xiàn)Bad Compass Health

    pixhawk飛控疑難雜癥解決方案
    發(fā)表于 11-27 09:38 ?0次下載

    STM32編程疑難雜癥

    疑難雜癥
    的頭像 發(fā)表于 03-28 23:29 ?331次閱讀
    <b class='flag-5'>STM32</b>編程<b class='flag-5'>疑難雜癥</b>