起因
最近在除錯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...