[开发工具] Stm32 - Printf重定向(不)使用微库(Keil MDK)

[复制链接]
4313|24
 楼主| rosemoore 发表于 2021-8-15 13:32 | 显示全部楼层 |阅读模式
Stm32芯片调试中经常用到串口来打印一些数据,因此如果能使用类似windows的Console中的printf就很完美了~

方法1--使用微库:

1、使用微库(平台式keil-MDK),点击“魔术棒” Target标签下有个Use MicroLIB---勾选。
2、包含头文件:#include "stdio.h"
3、Printf重定向,修改fputc()函数的内容~
int fputc(int ch, FILE *f)
{
USART_SendData(DEBUG_USART, (unsigned char) ch);
while (!(DEBUG_USART->SR & USART_FLAG_TXE));
return (ch);
}
这里的:USART_SendData(DEBUG_USART, (unsigned char) ch);
while (!(DEBUG_USART->SR & USART_FLAG_TXE));
就是往串口发送一个字节的代码,修改相应的串口,初始化。这样就能使用printf了~可以一试。
方法2--不使用微库(那么就要强调不使用半主机(no semihosting)模式)
1、包含头文件#include "stdio.h"
2、重写fputc,但需要先加点东西:
#pragma import(__use_no_semihosting)
_sys_exit(int x)
{
x = x;
}

struct __FILE
{
int handle;
};

FILE __stdout;

int fputc(int ch, FILE *f)
{
USART_SendData(DEBUG_USART, (unsigned char) ch);
while (!(DEBUG_USART->SR & USART_FLAG_TXE));
return (ch);
}

这样,就完成了,同样可以使用printf语句了~

Bobby13 发表于 2021-8-15 18:24 | 显示全部楼层
可以自己撸一个 xprintf,参考:
https://gitee.com/eegithub/xprintf_demo
https://gitee.com/suanite/xprintf
https://gitee.com/swabc/ChaN_xprintf

都来源于:
http://elm-chan.org/fsw/strf/xprintf.html
http://elm-chan.org/fsw/ff/00index_e.html
呐咯密密 发表于 2021-8-25 17:29 来自手机 | 显示全部楼层
很实用,感谢分享之前就遇到过这个问题
redone 发表于 2021-8-26 13:29 | 显示全部楼层
这两种,我都见过,
之前只是知道这样就能用了
今天才知道所以然~~
隐去 发表于 2021-8-27 13:57 | 显示全部楼层
感谢分享
kkzz 发表于 2021-9-1 21:12 | 显示全部楼层
printf()怎么重定向?  
hudi008 发表于 2021-9-1 21:12 | 显示全部楼层
把 原来的 cout 向屏幕输出 改为输出到文件。   
lzmm 发表于 2021-9-1 21:12 | 显示全部楼层
需要重定向fputc函数   
minzisc 发表于 2021-9-1 21:13 | 显示全部楼层
必须重定义标准库函数里调用的与输出设备相关的函数
selongli 发表于 2021-9-1 21:13 | 显示全部楼层
调用MDK微库(MicroLib)的方法  
fentianyou 发表于 2021-9-1 21:13 | 显示全部楼层
重写int fputc(int ch, FILE *f)函数  
xiaoyaodz 发表于 2021-9-1 21:14 | 显示全部楼层
重定义fputc函数吧   
febgxu 发表于 2021-9-1 21:14 | 显示全部楼层
这个经常用到的。   
sdlls 发表于 2021-9-1 21:15 | 显示全部楼层
#include "stdio.h"才是最重要的。
pixhw 发表于 2021-9-1 21:15 | 显示全部楼层
可以自己写这个代码吗   
lzmm 发表于 2021-9-1 21:15 | 显示全部楼层
让字符串数据输出到指定串口  
hudi008 发表于 2021-9-1 21:15 | 显示全部楼层
以使用USART_SendData(USART1, (uint8_t) ch);  
kkzz 发表于 2021-9-1 21:16 | 显示全部楼层
printf本身没有重定向吧  
pixhw 发表于 2021-9-1 21:16 | 显示全部楼层
例如填写一些自己的数据。  
sdlls 发表于 2021-9-1 21:16 | 显示全部楼层
#include "stdio.h"不包含这个头文件会报错的。  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

1612

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部