历史上的今天
返回首页

历史上的今天

今天是:2025年04月08日(星期二)

正在发生

2019年04月08日 | STM32 printf 重定向问题

2019-04-08 来源:eefocus

1、declaration conflicts with target of using declaration already in scope


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


解决方法:


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


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


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


#include


#include


#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));


}




另外一种配置方法(非解决方法)


1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。


2、在main文件中重定义


   // 发送数据


   int fputc(int ch, FILE *f)


   {


      USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USART2 等


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


      return (ch);


   }


   // 接收数据


   int GetKey (void)  { 


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


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


   }


   这样在使用printf时就会调用自定义的fputc函数,来发送字符。


3、在工程属性的 “Target" -> "Code Generation" 选项中勾选 "Use MicroLIB"” 


   MicroLIB 是缺省C的备份库,关于它可以到网上查找详细资料。

推荐阅读

史海拾趣

德艺隆(DEALON)公司的发展小趣事

面对数字化转型和智能化升级的大趋势,德艺隆不甘落后。他们引进先进的生产设备和技术,提高了生产效率和产品质量;同时,公司还加大了对数字化和智能化技术的研发和应用力度,推出了一系列智能化产品解决方案。这些举措不仅提升了公司的竞争力,也为公司的未来发展奠定了坚实的基础。

Accuride公司的发展小趣事

在2009年,Accuride公司面临了严重的财务困境,其美国公司申请了破产保护。然而,这一困境并未击垮Accuride,反而成为其重生的契机。通过与债权人达成协议,Accuride成功地将公司的大部分所有权转让给债券持有人,并进行了重组。这一举措不仅缓解了公司的财务压力,还为其未来的发展奠定了坚实的基础。

台湾稳态公司的发展小趣事

在电子行业中,技术创新是企业保持竞争力的关键。台湾稳态公司始终坚持以创新为核心的发展理念,不断投入研发资源,推动产品创新和技术升级。通过持续的创新努力,稳态公司成功开发出了多款具有行业领先水平的新产品,引领了行业潮流,也为公司的持续发展注入了新的动力。

Ferroxcube公司的发展小趣事

在21世纪初,随着电子行业的飞速发展,对于高性能磁性元件的需求也日益增长。Ferroxcube公司,作为世界第二大磁性元件生产商,凭借其卓越的技术和产品质量,迅速在市场上占据了一席之地。公司不断投入研发,推出了一系列创新的磁芯和磁环产品,深受客户好评。

在一次重要的行业展会上,Ferroxcube展示了一款新型的高性能磁芯,其优越的性能和稳定性吸引了众多行业内人士的关注。一家知名的电源制造商对这款产品表现出了浓厚的兴趣,并表达了合作的意愿。经过几轮深入的洽谈,双方达成了战略合作协议,Ferroxcube的磁芯成为了这家电源制造商的首选元件。

这一合作不仅为Ferroxcube带来了大量的订单,还提升了公司在行业内的知名度和影响力。公司借此机会加大了研发投入,进一步巩固了其在磁性元件领域的领先地位。

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

随着市场需求的变化,FTDI并未满足于初期的成就,而是积极拓展产品线。他们推出了如MM232R和USB-COM232-PLUS1等接口产品,这些产品在连接性和兼容性上展现了公司强大的技术实力和创新精神。同时,FTDI还涉足USB和其他通信协议的转换领域,满足了多样化的市场需求,进一步巩固了其在电子行业中的地位。

EDDING公司的发展小趣事

在2000年代初,ECLIPSE公司是一家专注于企业级软件开发的公司。公司内部的一个小型团队开发了一个名为“Eclipse”的集成开发环境(IDE),用于提高内部项目的开发效率。随着Eclipse的内部使用越来越广泛,公司高层意识到其巨大的潜力,决定将Eclipse开源,并成立专门的Eclipse部门来管理和推广这一项目。通过开放源代码和社区合作,Eclipse迅速吸引了全球开发者的关注,并逐渐成长为开源开发领域的领军者。

问答坊 | AI 解惑

毕业设计

现在要做毕业设计了,题目是《太阳能手机充电器的设计与制作》,请个位大哥给给帮帮忙!谢谢…

查看全部问答>

关于无话费手机的设想

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 (文中S—发射端,R—接收端) 今日有一让大家的使用手机而无需缴纳话费的设想,愿与大家共同分享,也希望其中的一些尚未解决之处大家集思广益。 首先,为什么我们要向移动、联通等运营商 ...…

查看全部问答>

PIC控制MAX518

有谁用 PIC自带的I2C连接MAX518么?一直不能实现数模转换,急求高手!!!…

查看全部问答>

关于使用MFC-CDC类内存泄漏的问题

网上有文章说,使用从CWnd派生类中的GetDC()和ReleaseDC()会出现内存泄漏,不知道是否属实? 我使用以下代码进行测试: 使用一Timer,进行窗口Invalidate()。 void CTestDCDlg::OnPaint() {     //CPaintDC dc(this); // device con ...…

查看全部问答>

关于蓝牙的问题

最近想用蓝牙进行无线数据传输,开发环境是VC2005+WM5.0,手上有台惠普的PDA,带了蓝牙模块! 微软也提供了一个btsearch的例子,可是在调用WSALookupServiceBegin时候就会出错,通过WSAGetLastError得到的错误码是10108,运行其他人的例子也是这个 ...…

查看全部问答>

数据库同步 SqlCeRemoteDataAccess.Pull 里面的trackoption 参数设置问题

需要同步PDA和服务器数据库。用SQLCE3.0 SqlCeRemoteDataAccess.Pull方法可以下载服务器数据库的数据到PDA, 其中有个参数叫trackoption 。 当我把这个参数设置为TRACKINGOFF,也就是不跟踪数据变化时,没有任何问题,可以下载数据。 但当把它 ...…

查看全部问答>

MDK注册机新版加旧版大全

选上新板   再上旧版   我的MDK用旧板好用,新板反而不好用不知怎地 ;P …

查看全部问答>

请问这个积分电路输出。。。

参数都是按照书上写的,输入方波,输出应该是三角波,可为什么会是这样?  …

查看全部问答>

STM32固件库什么时候可以稳定啊?

                                 STM32固件库在不停地升级,并且不太兼容,什么时候可以稳定啊?…

查看全部问答>

解决了一个不可解决的问题

  一块段显小屏,LCM046 一个单片机STC89C58RD+,一个串口下载器。   要完成一个大任务的一个小部分-----------点亮段式LCD。   呵呵,这个对我来说小菜一盘,没太在意。   因为我以前就点亮过只不过那个东东存在(对人 ...…

查看全部问答>