请选择 进入手机版 | 继续访问电脑版
    查看: 171|回复: 2

    [经验分享] 基于STM32 printf 重定向问题分析

    [复制链接]

    签到天数: 178 天

    [LV.7]化身百千

    发表于 2018-10-8 17:03:08 | 显示全部楼层 |阅读模式
    1、declaration conflicts with target of using declaration already in scope

    不能使用.cpp文件,若要使用printf重定向,那就使用.c 文件

    解决方法:

    1、在main文件中包含 “stdio.h” 文件

    2、在工程中创建一个文件保存为 Regtarge.c , 然后将其添加工程中

    在文件中输入如下内容(直接复制即可)

    #include <stdio.h>

    #include <rt_misc.h>

    #pragma import(__use_no_semihosting_swi)

    extern int  SendChar(int ch); // 声明外部函数,在main文件中定义

    extern int  GetKey(void);

    struct __FILE {

      int handle;                 // Add whatever you need here

    };

    FILE __stdout;

    FILE __stdin;

    int fputc(int ch, FILE *f) {

      return (SendChar(ch));

    }

    int fgetc(FILE *f) {

      return (SendChar(GetKey()));

    }

    void _ttywrch(int ch) {

    SendChar (ch);

    }

    int ferror(FILE *f) {                            // Your implementation of ferror

      return EOF;

    }

    void _sys_exit(int return_code) {

    label:  goto label;           // endless loop

    }



    3、在main文件中添加定义以下两个函数

    int SendChar (int ch)  {

      while (!(USART1->SR & USART_FLAG_TXE)); // USART1 可换成你程序中通信的串口

      USART1->DR = (ch & 0x1FF);

      return (ch);

    }

    int GetKey (void)  {

      while (!(USART1->SR & USART_FLAG_RXNE));

      return ((int)(USART1->DR & 0x1FF));

    }

    签到天数: 178 天

    [LV.7]化身百千

     楼主| 发表于 2018-10-9 08:35:20 | 显示全部楼层

    666                       
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    返回顶部