OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3605|回复: 3

MDK中STM32程序无法printf给串口

[复制链接]

17

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
181
金钱
181
注册时间
2013-10-9
在线时间
0 小时
发表于 2013-10-9 09:42:52 | 显示全部楼层 |阅读模式
问题1:(与编译器无关)在程序中加入printf语句实现串口的输出,但未写重定向函数fputc
解决方法:int  fputc(int  ch, FILE  *f)
{
                  USART_SendData(USART1,(uint8_t)  ch);
                  while  (USART_GetFlagStatus(USART1, USART_FLAG_TC)  == RESET )
                 {}
                 return ch;             
}
 
问题2(与编译软件有关):fputc编写无误,使用的是MDK4.22-3.40之间的编译环境,未使用微型库(MicroLIB),
因为printf()之类的函数,使用了半主机模式。使用微型库的话,不会使用半主机模式,所以就没有问题。
解决方法:在Option中勾上MicroLIB,重新编译
 
问题3:fputc编写无误,不用微库,依然可以使用printf
解决方法:在程序中加入下列程序

#pragma import(__use_no_semihosting) 
_sys_exit(int x) 

x = x; 

struct __FILE 

int handle; 
/* Whatever you require here. If the only file you are using is */ 
/* standard output using printf() for debugging, no file handling */ 
/* is required. */ 
}; 
/* FILE is typedef’ d in stdio.h. */ 
FILE __stdout;

问题4:不想修改程序

解决方法:使用3.4以下版本

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-9 10:39:42 | 显示全部楼层
回复 支持 反对

使用道具 举报

7

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
745
金钱
745
注册时间
2016-1-20
在线时间
78 小时
发表于 2016-3-29 17:33:49 | 显示全部楼层
非常感谢,我的printf已经可以使用!
回复 支持 反对

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-5-8
在线时间
20 小时
发表于 2019-5-9 10:02:09 来自手机 | 显示全部楼层
还是用不了  请问跟硬件有关吗  用485发送可以就是不可以打印
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 05:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表