#技术资源#
(涉及到的图片见附件) 该笔记记录了基于APM32F103ZET6的mini板上实现格式化输出数据的4种方法,配置总结方法如下: 1 方法一:printf + Use MicroLIB1.1 配置Keil工程 1.2 在完成好初始化串口的代码上包含头文件、添加代码#include "stdio.h" //重定向c库函数printf到串口,重定向后可使用printf函数 int fputc(int ch, FILE *f) { USART_TxData(USART1,(char) ch); while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET); return(ch); } //重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数 int fgetc(FILE *f) { while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET); return(int)USART_RxData(USART1); } 1.3 编写测试代码,连接好串口,现象如下:测试代码:printf("begin\n\r"); 测试现象: 2 方法二:pritnf + Not Use MicroLib2.1 配置Keil工程 2.2 在完成好初始化串口的代码上包含头文件、添加代码#include "stdio.h" #pragma import(__use_no_semihosting) //这条语句可以关闭半主机模式 //标准库需要的支持函数 struct __FILE { inthandle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { x = x; } //重定向c库函数printf到串口,重定向后可使用printf函数 int fputc(int ch, FILE *f) { USART_TxData(USART1,(char) ch); while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET); return(ch); } //重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数 int fgetc(FILE *f) { while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET); return(int)USART_RxData(USART1); } 2.3 编写测试代码,连接好串口,现象如下:测试代码:printf("begin\n\r"); 测试现象: 3 方法三:自行撰写USART1Printf+ Use MicroLIB3.1 配置Keil工程 3.2 在完成好初始化串口的代码上包含头文件、添加代码#include <stdarg.h> void TP_USART1SendString(char *s) { while (*s!= '\0') { USART_TxData(USART1,*s); while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET); s++; } } void USART1Printf(char *fmt,...) { __va_listap; charstring[400]; va_start(ap,fmt); vsprintf(string,fmt,ap); TP_USART1SendString(string); va_end(ap); } 3.3 编写测试代码,连接好串口,现象如下:测试代码:USART1Printf ("begin\n\r"); 测试现象: 4 方法四:自行编写USART1Printf+ Not Use MicroLIB4.1 配置Keil工程 4.2 在完成好初始化串口的代码上包含头文件、添加代码#include <stdarg.h> #pragmaimport(__use_no_semihosting) //这条语句可以关闭半主机模式 //标准库需要的支持函数 struct __FILE { inthandle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { x = x; } void TP_USART1SendString(char *s) { while (*s!= '\0') { USART_TxData(USART1,*s); while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET); s++; } } 4.3 编写测试代码,连接好串口,现象如下:测试代码:USART1Printf ("begin\n\r"); 测试现象:
|