stm32中實現printf列印

2021-09-27 10:03:55 字數 1208 閱讀 2714

起因

最近在除錯stm32**,在除錯的時候發現,原來的專案**中沒有實現printf函式,一直使用較為原始的列印方式:將需要列印的內容存在陣列中(下稱資源池),通知dma進行搬運,最終通過usart輸出到螢幕中。

分析

由於源**中已經實現了stm32 中dma、usart的配置,且輸功能正常,只需要簡單的將輸入到資源池中的資料流進行整形即可。考慮使用庫函式

int

vsnprintf

(char

* str, size_t size,

const

char

* format, va_list ap)

;

來實現。

實現

根據文章分析需要開啟mdk project中的microlib

/*va_start、va_end、vsnprintf等需要的標頭檔案*/

#include

#define wprintf_bufsize 1024

uint8 wprintf_buf[wprintf_bufsize]

;void

wprintf

(const

char

* fmt,..

.)

測試隨便在原來的stm32的task中加入一些列印,進行測試

wprintf

("hello:%d.\n\r"

,cmd[7]

);char

*p =

"okkk"

;float my_fl =

12.35

;wprintf

("output:%s.\n\r"

, p)

;wprintf

("float:%f.\n\r"

,my_fl)

;

終端顯示:

現在可以湊合使用了。

參考文章:

STM32通過UART使用printf列印資料

首先進行各項初始化,並新增stdio標頭檔案之後新增如下 庫函式 int fputc int ch,file f int getkey void 暫存器 int fputc int ch,file f fputc 是printf 的底層函式,通過fputc 來使告知微控制器列印資料到串列埠並將資料逐...

STM32多個串列埠printf

網上講的新增printf 到程式中一般都是這樣的 簡要提一下 1.配置gpio usart,rcc 的configuration 2.勾選usb micro lib 3.在程式中新增 標頭檔案需要新增 include ifdef gnuc define putchar prototype int i...

STM32多串列埠 printf

網上很多多串列埠的教程,但是效果因人而異。我現在寫一篇正點原子精英板直接可以複製使用的教程,其他開發板也可參考我這種修改例程的方法。正點原子的串列埠實驗直接複製乙份,修改裡面的檔案即可。例程的標頭檔案是 ifndef usart h define usart h include stdio.h in...