STM32 printf 重定向问题

发布者:advancement4最新更新时间:2019-04-08 来源: eefocus关键字:STM32  printf  重定向 手机看文章 扫描二维码
随时随地手机看文章

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的备份库,关于它可以到网上查找详细资料。

关键字:STM32  printf  重定向 引用地址:STM32 printf 重定向问题

上一篇:Dht11与Ds18b20温度传感器使用
下一篇:STM32F4实现矩阵键盘

推荐阅读最新更新时间:2024-03-16 16:26

STM32 SPI Flash DFU
这次讲的是将程序、图片或其他文件下载到SPI Flash中。我使用的是W25X16的SPI Flash,他共有2MB空间,2个Block,512ge Sector,8096个Page。由于SPI Flash不能直接跑程序,我们从接口就知道了。 接下去我们就来讲讲怎么编写SPI flash的升级功能。这次的工程是基于之前的Internal Flash修改而来的。修改的部分主要在USB_User组里: STM32 SPI Flash DFU - ziye334 - ziye334的博客我只将改改的部分。 hw_config.c、usb_istr.c、usb_prop.c、usb_pwr.c这介个文件没有什么还修改的。usb_desc.
[单片机]
STM32的中断理解笔记
1、基本理解 ARM Cortex_m3内核支持256个中断(16个内核和240个外部)和可编程256级中断优先级的设置。然而,STM32并没有全部使用M3内核东西,STM32目前支持的中断为84个,16个内核加上68个外部以及16级可编程中断优先级的设置。 由于STM32只能管理16级中断的优先级,所以只是使用到中断优先级寄存器的高四位。 有两种优先级: (1)抢占式优先级,库函数设置为NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=x(x为0~15,具体要看下面的优先级组别的选择); (2)响应优先级,库函数设置为NVIC_InitStructure
[单片机]
关于STM32系列微控制器的几点认识
STM32系列微控制器是意法半导体旗下的产品,凭借着自身的高性能,低功耗,丰富的数字外围设备和强大的电气处理能力等优势,广泛地应用在工业控制及自动化,消费类电子产品,智能硬件等领域。很多院校和嵌入式培训机构都选用此系列微控制器作为典型的教材! 此系列微控制器采用ARM CORTEX-M处理器内核,关于ARM架构的优势,毋庸置疑是最优秀的架构之一,其CORTEX-A系列微处理器几乎垄断整个移动设备领域!在ARM内核基础上,ST加上自己的数字外围设备,使其具备处理复杂电气问题的能力,例如通过定时器的PWM功能控制电机,通过普通输出端口控制外部继电器,通过片上AD获得外部模拟信号等等,以此系列微控制器为主控的产品不计其数,例如伺服电机
[单片机]
关于<font color='red'>STM32</font>系列微控制器的几点认识
浅析STM32 Bootloader设计
  设计思想   由Bootloader负责检测SD卡中是否有固件更新所需的BIN文件。如果检测到所需要的BIN文件,则开始复制文件更新固件。更新结束后跳转到指定的地址开始执行最新的程序。可以在论坛的ARM版块找到liklon的帖子:两份简单的 Bootloader 程序。链接为: http://forum.eepw.com.cn/thread/238997/1 帖子里已经共享了两份简单的 STM32 Bootloader程序,一份是利用znFAT进行SD卡上文件操作,第二份是利用FATFS进行文件操作。   知识要点    STM32 内部FLASH的起始地址为0X08000000,Bootloader程序文件就从此地址开始写入
[单片机]
浅析<font color='red'>STM32</font> Bootloader设计
stm32案例分享之使D-CACHE时FMC外设运行不正常原因
前言 前段时间某客户反馈,在使用STM32H7的FMC时,如果使能了D-CACHE就运行不正常。数据没有写到FMC外部的存储器里,FMC接口也没有波形。而不使能D-CACHE是工作则是正常的。 其实对于这个问题,如果了解STM32H7的架构的话,就很容易理解了。下面我们就来看一看到底是什么原因让客户觉得使能DCACHE后FMC就工作不正常了。 STM32H7的架构 下面是STM32H7架构图中和FMC相关的部分。从图中可以看到,STM32H7是基于Cortex-M7内核,在内部的Cortex-M7内核里带有一个16KB的D-CACHE和一个16KB的I-CACHE。内核通过AXIM总线连接到64位的AXI总线矩阵,再经过这
[单片机]
<font color='red'>stm32</font>案例分享之使D-CACHE时FMC外设运行不正常原因
STM32中断设置以及中断优先级设置三步曲
  中断作为stm32中必不可少的一个功能,其重要性是不言而喻的因此把中断学习好是根本。   所以今天就来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工。问题是什么呢?项目中我用到了一个触摸键盘TTP229,结果在测试键盘时,不能够输入密码?最终,调试出bug就是由于中断优先级的影响。   本项目使用到的是STM32F030C8型号的MCU,我们可以从官方下载到的标准库文件中的启动汇编文件中,查看到本型号单片机的外部中断向量表。(如下图所示)   首先,我们了解一下NVIC是什么,在core_cm0.h文件中的标准库中的NVIC结构体。   其中,我们一般只用到ISER、ICER、IP这3个寄存器。ISER用于使能中
[单片机]
<font color='red'>STM32</font>中断设置以及中断优先级设置三步曲
STM32达人的GPIO使用心得
1. 我使用GPIO的不同就是,GPIO 操作是直接动用了STM32内部的寄存器的.虽说库好用,但对于某些IO 操作,很多人都会嫌库的效率底下(包括我自己在内),总得对STM32 的寄存器看两眼的吧,不然还不敢叫STM32 达人! 2. 当然了,即使直接操作寄存器了,但一些方便的宏定义还是用库里面的好,反正宏定义本身并不影响效率.这里要说一下MDK 的一个重要技巧,就是把工程编译完以后,在变量或函数体上按下F12 键,就会自动跳转到这个变量或函数的定义处.要研究库代码,这个技巧必不可少,不然在大堆C文件里找一个定义是相当累人的. 大家看看ST 官方库里面对各个寄存器的定义,是使用结构体的,可谓相当有技巧,首先要定义几个基础
[单片机]
基于STM32平台实现SVPWM调制
SVPWM SVPWM是空间矢量脉宽调制(Space Vector Pulse Width Modulation)的简称,通常由三相逆变器的六个功率开关管组成,经过特定的时序和换相所所产生的脉冲宽度调制波,最终输出的波形可能会十分接近理想的正弦波形。具体如下图所示;左侧为复平面,即空间矢量,右侧为时域的正弦波形。 关于SVPWM原理的文章非常多,这里可以推荐一下网上一个非常不错的教程《SVPWM的原理及法则推导和控制算法详解第五修改版》,本文将如何实现SVPWM进行简单的介绍。 IQMATH TI的片子很香,控制方面,TI无疑是做的最好的方案之一,相对来说资料也非常齐全;另外TI针对没有浮点运算器的定点DSP推出了IQMATH
[单片机]
基于<font color='red'>STM32</font>平台实现SVPWM调制
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved