該方法適用於
stm32
,實現了使用
printf
等標準c
流函式輸出資料的辦法,極大的減少了輸出串列埠資料時所需要做的資料處理。 在
c庫中,
printf()
等輸出流函式都是通過
fputc()
這個函式實現的,所以我們通過重對映的方式,修改這個函式的定義使它輸出在
stm32
的暫存器中,便可以實現使用
printf()
函式在stm32
串列埠上輸出資料的功能。 在
stm32
的keil
開發環境中,
c的庫函式有兩種實現方式
就是我們平常在
pc window
平台上用的
c庫函式,此庫的的優點在於實現的功能全面。但是由於這個庫基本上是專為
pc設計的,故而如果在嵌入式晶元中呼叫時將會使得工程檔案變得十分龐大。
將下列**加入工程,無需使用#include呼叫即可生效。
/*
* libc_printf.c
* * created on: dec 26, 2015
* author: yang
* * 使用標準c庫時,重對映printf等輸出函式的檔案
* 新增在工程內即可生效(切勿選擇semihost功能)
*/#include //include "stm32f10x.h"
#pragma import(__use_no_semihosting)
//標準庫需要的支援函式
struct __file
;file __stdout;
//定義_sys_exit()以避免使用半主機模式
_sys_exit(int x)
//重對映fputc函式,此函式為多個輸出函式的基礎函式
摘自keil
官網介紹
<
>
基本就是說:
microlib
是預設c
庫的備選庫。 它旨在與需要裝入到極少量記憶體中的深層嵌入式應用程式配合使用。 這些應用程式不在作業系統中執行。
microlib
進行了高度優化以使**變得很小。 它的功能比預設
c 庫少,並且根本不具備某些
iso c
特性。 某些庫函式的執行速度也比較慢,例如,
memcpy()。
同樣的將下列**加入工程,並在
keil
設定中勾選
use microlib
/*
* microlib_printf.c
* * created on: dec 26, 2015
* author: yang
*
* keil工程內勾選使用microlib時,重對映printf等輸出函式的檔案
* 新增在工程內即可生效(注意:僅在使用microlib有效)
*/#ifdef uart_print
#include //include "stm32f10x.h"
//重對映fputc函式,此函式為多個輸出函式的基礎函式
int fputc(int ch, file *f)
//輸入函式,如上
在gcc
開源開發環境中,則可以呼叫
nano_printf.c
等多種方式重映流函式輸出埠
STM32程式中使用printf列印中文字元亂碼
作者 李剴 出處 或者 前言 相信同我一樣,有一部分同學在寫微控制器程式的時候喜歡用printf列印相關資訊到串列埠,然後在串列埠除錯助手看資料變化。但是我之前在使用printf去列印中文字元的時候,出現了亂碼,這種問題以前也碰到過,只是沒去深究為什麼,往往都是重新建工程,寫 但是時隔很久,又再次碰...
STM32通過UART使用printf列印資料
首先進行各項初始化,並新增stdio標頭檔案之後新增如下 庫函式 int fputc int ch,file f int getkey void 暫存器 int fputc int ch,file f fputc 是printf 的底層函式,通過fputc 來使告知微控制器列印資料到串列埠並將資料逐...
STM32中如何使用printf 函式
stm32串列埠通訊中使用printf傳送資料配置方法 開發環境 keil rvmdk 在stm32串列埠通訊程式中使用printf傳送資料,非常的方便。可在剛開始使用的時候總是遇到問題,常見的是硬體訪真時無法進入main主函式,其實只要簡單的配置一下就可以了。下面就說一下使用printf需要做哪些...