在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32—串口輸出字符串的幾種方法

冬至子 ? 來源:一禾嵌入式開發 ? 作者:季鵬 ? 2023-07-22 10:44 ? 次閱讀

C語言中有個很好用的函數:printf()。printf()是格式化輸出函數,可以按照規定格式輸出消息。相信每個工程師開始學習的C語言第一課都會遇到printf(“Hello World! n”);這條語句。

嵌入式開發中,我們調試時時常需要輸出一些調試信息,那這時候printf語句就非常有用了。但是遺憾的是,C標準庫函數中默認的輸出設備是顯示器,所以當我們進行嵌入式開發的時候,是不能夠直接使用printf的。如果我們想要方便的在嵌入式開發中進行printf操作,那么就必須重定向printf語句。

我們可以查一下C標準庫函數,printf語句其實是使用了一個函數int fputc(int ch, FILE *f); 此函數原本是將字符ch打印到文件指針所指向的文件流中去的,現在我們不需要打印到文件流,而是打印到串口1。我們只需要重新編寫這個函數。當系統檢測到用戶編寫的fputc函數時,就會調用用戶所編寫的函數,而不是使用原本的fputc了。

函數如下:

圖片

注意這里需要使用到頭文件stdio.h,否則FILE類型未定義。以上是基于MDK環境下,使用MicroLib的情況下重定向printf。還有一種方法是使用半主機模式。半主機模式是ARM的一種機制,不使用microLib庫,實現ARM應用程序代碼的輸入/輸出請求傳至運行著調試器的主機,這樣就可以使用主機的顯示器和鍵盤,而不需要再ARM系統上搭配顯示器和鍵盤。當然,這種做法并不常見,有興趣的同學可以自己研究一下。

如果這篇文章到這里就結束了,那么就太常規了。下面我還要講一個非常規的操作以實現串口輸出字符串。

Printf重定向的方法是非常常規的,但是我就是不想用,而且我還想調用一個函數就能輸出一串任意的字符串,怎么辦?我就想出了另一種寫法,先貼代碼:

圖片

乍一看,這段代碼非常簡單啊,就是使用了一個指針,然后串口輸出的時候指針指向的地址不停+1啊!但是我們再看一下調用:

圖片

我們這里直接將一個字符串作為參數進行了傳遞,編譯器報了一個警告:warning: ‘char[25]’ to parameter of type ‘uint8_t *’ (aka ‘unsigned char *’) converts between pointers to integer types with different sign。

很明顯,數據類型沖突了。但是在程序中我們將兩種方式都進行了輸出,最后發現調試結果是正確的。如下圖所示。

圖片

圖片

這是為什么呢?其實也很簡單,我們這里進行了一個非法操作。當我們調用該函數時,將字符串數組作為實參,在函數定義中強制轉換成了一個指針。而這個指針,指向的是字符串數組的第一個地址,所以該函數運行時就能夠正確輸出我們所編寫的字符串了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 顯示器
    +關注

    關注

    21

    文章

    5065

    瀏覽量

    141425
  • STM32
    +關注

    關注

    2290

    文章

    11018

    瀏覽量

    362701
  • ARM處理器
    +關注

    關注

    6

    文章

    361

    瀏覽量

    42473
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140560
  • 調試器
    +關注

    關注

    1

    文章

    312

    瀏覽量

    24198
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    輸出字符串數組問題

    3. 要求輸出字符串數組“ APPLy:sin 頻率,幅度” 其中幅度為數值類型,由輸入控件設定。頻率范圍和步長由輸入控件設定。例如幅度為2,頻率范圍為1000-8000Hz,步長1000Hz,輸出字符串
    發表于 10-20 11:05

    Python字符串的特點和修改字符串的常見四種方法

    Python中修改字符串幾種方法
    發表于 02-26 16:52

    為什么stm32程序使用printf函數無法通過串口輸出字符串

    為什么stm32程序使用printf函數無法通過串口輸出字符串呢?怎樣去解決這個問題呢?
    發表于 11-25 06:35

    解決讀取TXT文件時輸出字符串亂碼問題

    解決讀取TXT文件時輸出字符串亂碼問題打開TXT文件時如果內容中存在中文,輸出時會出現亂碼問題,因為labview默認的編碼格式是UTF-8
    發表于 12-23 14:23

    python字符串拼接方式了解

    ()方法拼接 用string模塊中的Template對象 例子: fruit1 = ‘apples’ fruit2 = ‘bananas’ fruit3 = ‘pears’ 要求: 輸出字符串
    發表于 12-06 10:09 ?1092次閱讀

    如何利用STM32單片機串口發送字符串

    最近由于要調試一個SMS發送短信的模塊,該模塊需要發送一系列AT指令,且需要字符串發送,但是STM32官方給的usart.c中并沒有直接發送字符串的函數,因此寫了一個發送字符串的函數。
    發表于 12-10 16:01 ?1.7w次閱讀

    基于STM32單片機發送字符串的函數

    最近由于要調試一個SMS發送短信的模塊,該模塊需要發送一系列AT指令,且需要字符串發送,但是STM32官方給的usart.c中并沒有直接發送字符串的函數,因此寫了一個發送字符串的函數。
    發表于 01-04 15:05 ?5102次閱讀

    C語言中字符串拷貝函數有幾種方法

    strcpy,即string copy(字符串復制)的縮寫。 是C語言標準庫中實現字符串拷貝的一個函數。 各大公司筆試題最喜歡考的一道題,快來看看,你會幾種方法? 問:你會如何實現這個函數呢? 1
    的頭像 發表于 03-12 14:16 ?5017次閱讀

    利用STM32單片機串口發送字符串

    最近由于要調試一個SMS發送短信的模塊,該模塊需要發送一系列AT指令,且需要字符串發送,但是STM32官方給的usart.c中并沒有直接發送字符串的函數,因此寫了一個發送字符串的函數。
    發表于 11-19 10:36 ?13次下載
    利用<b class='flag-5'>STM32</b>單片機<b class='flag-5'>串口</b>發送<b class='flag-5'>字符串</b>

    STM32串口的介紹與使用(原理、結構體、發送字符串、printf函數重定向)

    串口相關知識1.定義2.通信概念3.USART簡介串口的結構體串口發送字符STM32發送到上位機)串口
    發表于 12-24 19:08 ?20次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>的介紹與使用(原理、結構體、發送<b class='flag-5'>字符串</b>、printf函數重定向)

    python字符串有哪些特定方法

    python字符串序列操作也適用于列表和元組。 python字符串還有獨有方法,即字符串對象的函數,其他對象不可調用,只有字符串對象可
    的頭像 發表于 02-23 15:02 ?919次閱讀

    C語言定義字符串幾種方法

    C語言中定義字符串有哪些方法
    的頭像 發表于 03-31 09:41 ?3925次閱讀

    STM32串口格式化輸出幾種方法介紹

    在前兩天介紹的串口輸出中,函數Usart1_SendStr只能輸出字符串,如果想輸出一個整型或者其他類型的數據,單獨用這個函數是不能實現的。
    的頭像 發表于 07-22 10:16 ?3863次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>格式化<b class='flag-5'>輸出</b>的<b class='flag-5'>幾種方法</b>介紹

    串口屏LUA教程6-運算和字符串處理

    串口屏LUA教程6-運算和字符串處理
    發表于 04-29 13:11 ?11次下載

    python輸出固定長度的字符串

    Python 是一種強大而靈活的編程語言,具有許多用于處理字符串的功能。在 Python 中,有多種方法可以輸出固定長度的字符串。下面將詳細介紹這些
    的頭像 發表于 11-22 10:41 ?3970次閱讀
    主站蜘蛛池模板: 欧美色一级 | 视频一区中文字幕 | 天天综合天天做 | 国产亚洲一区二区三区在线 | 级毛片| 2021久久天天躁狠狠躁夜夜 | 中文字幕在线观看第一页 | 五月欧美激激激综合网色播 | 一级毛片一级毛片一级级毛片 | 在线理论视频 | 伊人久久大 | 日本不卡在线视频 | 久久大伊人 | 性欧美大战久久久久久久野外 | 超级狂色而且免费又超好看 | 天天操天天艹 | 日本黄色www | 天天色天天摸 | 日韩成人毛片高清视频免费看 | 色偷偷91综合久久噜噜 | 亚洲人成网站在线在线 | 成人欧美一区二区三区的电影 | 天天色天天舔 | 6080yy午夜不卡一二三区 | 李丽莎尤物福利视频 | 国产专区青青草原亚洲 | 日本不卡视频一区二区三区 | 色播图片| 日本在线一本 | 欧美精品videofree720p | 日本三区四区免费高清不卡 | 午夜爱爱小视频 | 免费一区二区三区 | 综合黄色 | 青草悠悠视频在线观看 | 亚洲成色www久久网站 | 欧美黑人粗暴另类多交 | 一区二区在线免费视频 | 天天干国产| 亚洲三级视频在线观看 | 天天看天天射天天碰 |