STM32中使用printf打印串口数据的实现原理
在C库中,printf()等输出流函数都是通过fputc()这个函数实现的,所以我们通过重映射的方式,修改这个函数的定义使它输出在STM32的寄存器中,便可以实现使用printf()函数在STM32串口上输出数据的功能。
盘点一下实现printf()函数打印字符串重定义到USART1的方法
方法一
1添加包含printf()函数的头文件:#include “stdio.h”
2.重写 stdio.h 头文件中的 int fputc(int ch, FILE *f) 函数
3.将该函数” int fputc(int ch, FILE *f) “放在main()函数能够调用到的文件中,KEIL-》Options for Target’xxx’-》Target-》Code Generation,勾选Use MicroLIB
方法二
//加入以下代码,支持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 & (1 《《 7)) );
USART_SendData(USART1,(uint8_t)ch);
return ch;
}
#endif
整合自:CSDN尘埃世界、Foresights
编辑:jq
-
Printf
+关注
关注
0文章
84浏览量
14282
发布评论请先 登录
【RA4L1-SENSOR】+ RA4L1-SENSOR开发版之使用Jlink的RTT打印功能代替串口
【RA4L1-SENSOR】+ RA4L1-SENSOR开发版串口打印功能printf实现
【RA-Eco-RA4M2开发板评测】使用RA4M2的串口实现任意任意类型任意长度的数据接收,并将接收到的数据显示在串口助手上
PRINTF函数无法打印出浮点数内容是为什么?
【RA-Eco-RA2L1-48PIN-V1.0开发板试用】——使用串口输出打印printf实现
【RA-Eco-RA2L1-48PIN-V1.0开发板试用】——使用Jlink的RTT实现串口打印功能
stdio.h实现了printf函数?
【敏矽微ME32G070开发板免费体验】使用JLINK的RTT功能实现类似串口printf打印功能
51单片机中为什么很少出现printf的身影

评论