文章目录
STM32Cube配置1.1 晶振引脚配置1.2 配置SYS Mode1.3 时钟树配置1.4 串口配置1.5 Cube工程配置
二、Keil配置2.1 打开Reset and Run2.2 实现printf重定向2.2.1 对printf有较高要求的看这里
三、演示
STM32Cube配置
1.1 晶振引脚配置
1.2 配置SYS Mode
1.3 时钟树配置
如果有外接晶振,那么需要根据晶振频率计算一下,这里外接8Mhz。
1.4 串口配置
1.5 Cube工程配置
二、Keil配置
2.1 打开Reset and Run
设置完后,点击OK保存,不能直接×掉
2.2 实现printf重定向
这里采用最简单的方式实现,只需要修改usart.c文件就行。 将以下下代码复制进usart.c文件中就可以,然后在需要用printf的地方 #include
注意将代码放在用户编辑区,不然Cube重新生成代码就把这些代码删除。
#include
/* 告知连接器不从C库链接使用半主机的函数 */
#pragma import(__use_no_semihosting)
/* 定义 _sys_exit() 以避免使用半主机模式 */
void _sys_exit(int x)
{
x = x;
}
/* 标准库需要的支持类型 */
struct __FILE
{
int handle;
};
FILE __stdout;
/* */
int fputc(int ch, FILE *stream)
{
/* 不同芯片的串口标志位不一定相同! */
while((USART1->SR & 0X40) == 0);
/* 串口发送完成,将该字符发送 */
USART1->DR = (uint8_t) ch;
return ch;
}
2.2.1 对printf有较高要求的看这里
我写了一篇关于printf重定向的博客,不同办法实现printf主要区别就是是否使用微库(MicroLIB)、是否利用中断、是否打开DMA、是否使用多串口。
文章链接:STM32 HAL库:使用C标准库或MicroLIB实现printf && 多串口使用printf输出 && 结合DMA实现printf && 常见问题总结
三、演示
在mian.c中包含stdio.h,在主函数中printf()