Keil中对STM32串口重定向printf的坑

一段时间没有使用呢STM32和Keil开发
在使用呢CubeMX生成HAL代码后,在Keil中写了串口的重定向函数后,却发现printf一直无法正常使用。在确保代码无误后,发现了一个小坑(之前也有学习过但是太久就忘了,所以这次又踩坑做一下笔记)

  • 解决方法:如图,勾选Use MicroLIB(CubeMX生成的keil工程默认没有勾选)
    Keil中对STM32串口重定向printf的坑_第1张图片
  • Use MicroLIB:microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行
  • 当然也可以参考正点原子的代码,加入避免使用半主机模式的代码
#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 = (unsigned char)ch;      
	return ch;
}
#endif 

你可能感兴趣的:(开发工具与环境,stm32,单片机,arm)