zoukankan      html  css  js  c++  java
  • 单片机中printf函数的重映射

    单片机中printf函数的重映射

    一、源自于:大侠有话说

    1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能

    除了打印你想要的字符到屏幕上外,还能把数字进行格式化.例如十进制的33,用十进制

    方式输出就是33,用十六进制的形式就输出成21,如果用字符形式输出,那就是ASCII码

    表对应的’!’.

    2. 51年代,一些人软件仿真的时候也很喜欢使用printf,但实际代码运行中,用的人则不多,因

    为别说51年代,就是用AVR的,也会觉得printf这个函数耗费的CPU资源相当可观.所以

    printf在8位单片机时代,熟悉的人的确不多.但到了ARM时代,情况则大为不同.毕竟

    ARM的处理能力和51完全不是一个级别,这使得不少人开始喜欢使用printf在实际项目

    中作为调试过程的串口输出.因为它的格式化功能实在是相当方便.

    而本例程就是教会你这么使用printf.

    3.程序把printf的输出对象设定为串口1.有一个标准的函数是必须要自己定义的,那就是

    fputc,把这个函数的功能写成串口输出一个字符.建议在串口的初始化模块中定义

    int fputc(int ch)

    {

    USART_SendData(USART1, (u8) ch);

    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

    return ch;

    }

    然后记得一点,就是MicroLib要勾上.其实大部分情况下,都建议使用MDK附带的

    MicroLib,这东西是有一定用途的.留待以后再更多地介绍.

    以上两步做好后,还记得要包含printf的头文件:

    #include <stdio.h>

    那么,所有工作就大功告成了,你可以尽情的尝试printf带来的便利.

    4.另外大家是否意识到一点,就是printf输出到哪,其实是由fputc函数决定的.所以如果有兴

    趣,可以改写这个fputc函数,使得其printf的对象是DX-32板上的TFT屏或者黑白屏.大家有

    兴趣的不妨试试.

    二、源自于:STM32开发板(正点原子)

    //加入以下代码,支持printf函数,而不需要选择use MicroLIB  

    #if 1

    #pragma import(__use_no_semihosting)            

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

    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;       
    
    //定义_sys_exit()以避免使用半主机模式   
    
    _sys_exit(int x)
    
    {
    
           x = x;
    
    }
    
    //重定义fputc函数 ,串口1
    
    int fputc(int ch, FILE *f)
    
    {     
    
           while((USART1->SR&0X40)==0);//循环发送,直到发送完毕  
    
           USART1->DR = (u8) ch;     
    
           return ch;
    
    }
    
    #endif
    

      

     

  • 相关阅读:
    Linux部署Spingboot项目
    Linux Centos7yum安装Mysql8.0.21
    Linux配置网络yum源,提高下载速度
    Linux安装jdk1.8
    Spring的AOP
    Spring的事务管理
    Maven项目中,使用mybatis,根据数据库自动生成pojo实体类、dao、mapper
    Ubuntu14.04中使用docker容器部署tomcat镜像+java web项目
    mybatis
    spl
  • 原文地址:https://www.cnblogs.com/Ph-one/p/9317401.html
Copyright © 2011-2022 走看看