用printf来发送字符到串口

 

用printf来发送字符到串口的方法:

(一) 在MDK中使用MicroLib重定向printf

(二) 在MDK中使用标准库重定向printf

 

注:(1)重定向printf其实就是重定向fputc。在MicroLib或者标准库中,printf最终都是通过fputc来输出字符串。而由于这些库只是提供了接口给我们调用,并没有提源码,所以我们只需要在程序添加库就能用了。

   (2)什么是重定向。重定向就相当于重新再写函数。重定向fputc就是重新再写fputc函数,那为什么可以重新再写,不是库里面都写好了吗?的确,库里面已经写好了,由于已经封装,我们无法从源码上去修改,所以我们在其他文件上进行再次编写。之所以再编写fputc函数不会报错,原因是库里面的fputc函数加了一个修饰符-----__attribute__((weak))。

     weak的作用呢就是当有两个相同函数名的函数定义了的时候,其中一个加了weak修饰,编译器就会选择没加weak的函数而忽略带weak的函数。而假如只有一个带weak修饰的函数,则编译器就会选择该函数。简单说就是,带weak的函数,如果只有一个,则编译器就不忽略它,若还有一个普通的同名函数,则编译器优先选择普通而忽略带weak的。

 

(一) 在MDK中使用MicroLib重定向printf

//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
    return ch;
}

(二) 在MDK中使用标准库重定向printf 

#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 = (u8) ch;      
    return ch;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值