STM32中使用printf打印串口數據的實現原理
在C庫中,printf()等輸出流函數都是通過fputc()這個函數實現的,所以我們通過重映射的方式,修改這個函數的定義使它輸出在STM32的寄存器中,便可以實現使用printf()函數在STM32串口上輸出數據的功能。
盤點一下實現printf()函數打印字符串重定義到USART1的方法
方法一
1添加包含printf()函數的頭文件:#include “stdio.h”
2.重寫 stdio.h 頭文件中的 int fputc(int ch, FILE *f) 函數
3.將該函數” int fputc(int ch, FILE *f) “放在main()函數能夠調用到的文件中,KEIL-》Options for Target’xxx’-》Target-》Code Generation,勾選Use MicroLIB
方法二
//加入以下代碼,支持printf函數,而不需要選擇use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//標準庫需要的支持函數
struct __FILE
{
int handle;
};
FILE __stdout;
//定義_sys_exit()以避免使用半主機模式
_sys_exit(int x)
{
x = x;
}
//重定義fputc函數
int fputc(int ch, FILE *f)
{
while( !(USART1-》SR & (1 《《 7)) );
USART_SendData(USART1,(uint8_t)ch);
return ch;
}
#endif
整合自:CSDN塵埃世界、Foresights
編輯:jq
-
Printf
+關注
關注
0文章
84瀏覽量
14077
發布評論請先 登錄
【RA-Eco-RA4M2開發板評測】使用RA4M2的串口實現任意任意類型任意長度的數據接收,并將接收到的數據顯示在串口助手上
PRINTF函數無法打印出浮點數內容是為什么?
【RA-Eco-RA2L1-48PIN-V1.0開發板試用】——使用串口輸出打印printf實現
【RA-Eco-RA2L1-48PIN-V1.0開發板試用】——使用Jlink的RTT實現串口打印功能
stdio.h實現了printf函數?
【敏矽微ME32G070開發板免費體驗】使用JLINK的RTT功能實現類似串口printf打印功能
51單片機中為什么很少出現printf的身影

評論