• MDK中STM32使用Printf函数详细解析【转载】


    在用MDK调试STM32板子串口时,为了方便串口调试,调用了printf()函数,用Keil仿真是,串口不能正确的输出,软件仿真时,总是卡在那 里。有点纳闷,然后调用USART_SendData()函数,发现串口可以接收到正确的数据,证明串口配置没有问题,问题应该是出在printf()函 数上,参照ST公司的printf例子也不能在串口输出数据。由此可知应该是软件配置的原因。后面,百度,再AVR论坛上找到了答案。

    如果使用的是MDK,请在工程属性的“Target“-》”Code Generation“中勾选”Use MicroLIB

    进行如上设置后编译一下,串口输出正确的数据。


    #ifndef __UART_INTERFACE_H
    #define __UART_INTEFFACE_H

    #include "stm32f10x_lib.h"
    #include "stdio.h"





    void UART_Init(unsigned long UART_baud); //波特率,如115200
    int fputc(int ch, FILE *f);     //fputc重定向
    int fgetc(FILE *f); //fgetc重定向


    #endif

    下面是.C的部分内容,省去了初始化的部分,自己看着写好了

    int fputc(int ch, FILE *f)
    {
      
       USART_SendData(USART1, (u8) ch);

      
       while(!(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == SET))
       {
       }

       return ch;
    }


    int fgetc(FILE *f)
    {
      
       while(!(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET))
       {
       }
      
        
       return (USART_ReceiveData(USART1));
    }

    注释:

    fgetc 和 fgetc是c语言的标准函数(形参是标准的) FILE *f 是文件指针,具备文件系统的操作系统有用。对于简单的无文件系统的嵌入式系统无用。

  • 相关阅读:
    windows下使用mingw编译出ffplay(简化版)
    Linux中查看GNOME版本号
    Linux操作系统入门学习总结(2015.10)
    c++11并发机制
    CentOS 7修改管理员密码
    windows下批量杀死进程
    ffmpeg抓屏输出的设置
    User-Defined-Literal自定义字面量
    GitHub支持的Markdown语法 GitHub Flavored Markdown
    c++11支持类数据成员的初始化
  • 原文地址:https://www.cnblogs.com/DawaTech/p/5695057.html
Copyright © 2020-2023  润新知