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");
测试现象