在前兩天介紹的串口輸出中,函數Usart1_SendStr只能輸出字符串,如果想輸出一個整型或者其他類型的數據,單獨用這個函數是不能實現的。今天跟大家簡單介紹下格式化輸出,讓輸出不再只有字符串。
格式化輸出有****3種方法 :sprintf結合usart輸出;使用MicroLIB調用printf輸出;重定向輸出。
1、sprintf結合usart輸出
sprintf指的是字符串格式化命令,主要功能是把格式化的數據寫入某個字符串中。sprintf 是個變參函數。
函數原型
int sprintf( char *buffer, const char *format, [ argument] … );
參數列表:
buffer :char型指針,指向將要寫入的字符串的緩沖區。
format :格式化字符串。
[argument]... :可選參數,可以是任何類型的數據。
通過sprintf把想要輸出的數據格式化為字符串數據,再調用Usart1_SendStr就能輸出任意想要輸出的數據了。
2、使用MicroLIB調用printf輸出
勾選Use MicroLIB,調用printf,再開啟半主機模式,就可以輸出數據了。但是使用MicroLIB存在bug,在跑操作系統時偶爾會出現死機的現象,所以這種方法不推薦使用。
3、重定向輸出
在Keil的下載路徑下找到Retarget.c文件,打開并復制整個文件,粘貼到串口源文件中,做一定的修改,如下所示。
#pragma import(__use_no_semihosting_swi)
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
int fputc(int ch, FILE *f) {
while((USART1- >SR & (1< 7)) == 0);
USART1- >DR = ch;
return ch;
}
int ferror(FILE *f) {
/* Your implementation of ferror */
return EOF;
}
void _sys_exit(int return_code) {
while (1); /* endless loop */
}
修改完成后,就可以直接調用printf輸出任意類型的數據了。這種方法跑操作系統時不會有bug,為了避免后期跑操作系統出現死機或其它bug,推薦使用這種重定向輸出的方法。
-
STM32
+關注
關注
2266文章
10871瀏覽量
354794 -
printf函數
+關注
關注
0文章
31瀏覽量
5880 -
USART串口
+關注
關注
0文章
32瀏覽量
6805
發布評論請先 登錄
相關推薦
評論