办法来自博客:https://blog.csdn.net/dongdong_csdn/article/details/123756095
Bug:
简单的使用STM32F103串口1通过重写fputc函数使用printf发送串口数据,发现程序无法正常运行,程序好像无法进入main,在通过Debug查看时发现,按一次运行就会停一次,然后也没进入main函数,发现按三次运行Run才能正常进行main函数
Reason:
重定义fputc函数时没有在设置中勾选 “Use MicroLIB”使用微库,可能导致找不到fputc函数而使得程序跑飞
Resolution:
两个方法:
- 一:在“Options for Target”-> “Target" -> “Code Generation” 选项中勾选 “Use MicroLIB”,这样直接重写fputc函数即可实现重定义
- 二:通过代码实现,将以下代码加入程序中也可以不用勾选就能重定义
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _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`