keil软件中常见问题(4):printf打印函数重定向

在stm32等单片机中使用printf函数,将printf函数打印的显示到串口,需要进行重定向,因为printf函数默认输入是屏幕,单片机没有屏幕,故需要使用重定向。

Fputc跟printf的关系,fputc是printf函数的底层。Printf函数打印时就是不断调用fputc函数一个个打印的,将fputc函数重定向到串口,printf就输出到了串口。

步骤如下:

1、使用printf前勾选:MicroLIB 是keil为嵌入式平台优化的一个精简库

2、头文件添加 include<stdio.h>

3、对fputc 函数进行重写,代码如下:

#if 1
#pragma import(__use_no_semihosting)            

//标准库需要的支持函数                

struct __FILE

{
       int handle;
};


FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   

void _sys_exit(int x)

{
       x = x;
}

//重定义fputc函数

int fputc(int ch, FILE *f)

{     
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕  
    USART1->DR = (unsigned char)ch;     
    return ch;
}

#endif

在使用stm32串口收发数据时,可使用下面这段代码:

void Serial_SendByte(uint8_t Byte)  //发送单个数据
{
    USART_SendData(USART1, Byte);
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);   //等待标志位,避免数据重复
    //这里标志位不需要手动清零
}


int fputc(int ch, FILE *f)   //对printf进行重定位,单个串口时可用
{
	Serial_SendByte(ch);
	return ch;
}

具体可根据实际需要进行修改。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值