STM32
登录
直播中
王军
7年用户
1774经验值
私信
关注
[问答]
怎样用printf()函数实现通过串口打印信息呢
开启该帖子的消息推送
printf函数
串口打印
字符串
怎样用printf()函数实现通过串口打印信息呢?
如何实现printf()函数打印字符串重定义到USART1呢?
回帖
(1)
颜小玲
2021-11-30 10:30:52
问题:在使用STM32调试时,经常使用串口发送信息,为了方便调试与串口发送信息,用printf()函数实现通过串口打印信息。
方法一:
1.添加包含printf()函数的头文件:#include “stdio.h”
2.重写 stdio.h 头文件中的 int fputc(int ch, FILE *f) 函数
int fputc(int ch, FILE *f)
{
//等待先前数据传输到移位寄存器
while( !(USART1->SR & (1 << 7)) );
//发送字符
USART_SendData(USART1, (uint8_t) ch);
return ch;
}
//示例函数中使用了USART1来发送消息
//实际情况可以根据硬件板来决定使用哪个串口
注意:使用while循环先等待先前的字符数据传输到移位寄存器,避免造成字符串首字符发送丢失的问题。
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
方法三(不建议使用)
//加入以下代码,并且勾选使用MiroLIB
int fputc(int ch,FILE *f)
{
//将Printf内容送往串口
USART_SendData(USART1,(unsigned char)ch);
//等待发送完成
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return (ch);
}
使用以上任一方法,均可实现printf()函数打印字符串重定义到USART1。
如果不想从USART1输出数据,可以更改USART1为USART2、3,都可以进行数据打印输出。
问题:在使用STM32调试时,经常使用串口发送信息,为了方便调试与串口发送信息,用printf()函数实现通过串口打印信息。
方法一:
1.添加包含printf()函数的头文件:#include “stdio.h”
2.重写 stdio.h 头文件中的 int fputc(int ch, FILE *f) 函数
int fputc(int ch, FILE *f)
{
//等待先前数据传输到移位寄存器
while( !(USART1->SR & (1 << 7)) );
//发送字符
USART_SendData(USART1, (uint8_t) ch);
return ch;
}
//示例函数中使用了USART1来发送消息
//实际情况可以根据硬件板来决定使用哪个串口
注意:使用while循环先等待先前的字符数据传输到移位寄存器,避免造成字符串首字符发送丢失的问题。
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
方法三(不建议使用)
//加入以下代码,并且勾选使用MiroLIB
int fputc(int ch,FILE *f)
{
//将Printf内容送往串口
USART_SendData(USART1,(unsigned char)ch);
//等待发送完成
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return (ch);
}
使用以上任一方法,均可实现printf()函数打印字符串重定义到USART1。
如果不想从USART1输出数据,可以更改USART1为USART2、3,都可以进行数据打印输出。
举报
更多回帖
rotate(-90deg);
回复
相关问答
printf函数
串口打印
字符串
STM32是
怎样
使用
printf
函数
给
串口
打印信息
的
2021-12-01
564
STM32是
怎样
使用
printf
函数
给
串口
打印信息
的
2021-12-02
792
STM32是如何使用
printf
函数
给
串口
打印信息
的
2021-12-02
692
printf
()
函数
怎样
才能像C语言一样输出
打印信息
呢
2021-12-01
715
DM8168的OSD算法中,
用
Vps_
printf
()不能输出
打印信息
?
2018-05-31
2535
如何用
Printf
()
函数
打印信息
?
2021-12-15
895
请问STM32如何使用
printf
函数
给
串口
打印信息
?
2021-12-01
547
怎样
去使用
printf
函数
往控制台
打印信息
呢
2021-11-30
1200
STM32重定向
printf
的方法总结
2021-11-30
1324
STM32调试之
串口
发送
信息
2021-10-21
719
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分