//加入以下代码,支持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&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif
这种方法叫printf函数的重定向
半主机模式就是需借助仿真器连接电脑,我们要做的是去掉仿真器,使开发板独立运行,把printf函数的结果输出到单片机的外设,这里就是串口,其实也可以是LCD,SD卡等
而标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数.具体半主机的定义你可以查一查,简单来讲,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。如果要避免半主机模式
重定向是指将fputc函数重新定义,这里就是串口发送函数,因为fputc是标准库函数,你要使用串口收发,必须将它改为串口的待发送数据
|