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

- 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开发中使用Keil时遇到的printf无法正常工作的问题。通过启用UseMicroLIB选项并提供自定义的半主机模式替代函数来实现串口输出。
5303

被折叠的 条评论
为什么被折叠?



