printf()函数重定向到STM32串口输出

发布者:TranquilSilence最新更新时间:2017-11-07 来源: eefocus关键字:printf()函数  重定向  STM32  串口输出 手机看文章 扫描二维码
随时随地手机看文章

最近遇到需要MCU输出数字的问题,而STM32的串口输出的是字符型,最先想到的方法是将整型数据转换为字符型输出,C库函数中提供了相关的函数

参考:http://www.cnblogs.com/processakai/archive/2011/06/24/2089348.html

http://c.biancheng.net/cpp/html/1573.html


C语言中使用printf()函数输出是非常方便功能非常强大的,如果能将printf()函数使用到串口上,能实现非常多的强大输出功能,极大方便我们使用串口输出功能。


printf()函数是输出到显示器,而MCU是没有显示器的,要使他输出到串口,需要重定向该函数

printf()函数中调用fputc()函数,只要对该函数进行重定向,即可实现功能

//使用printf()函数要添加头文件“stdio.h"

#include "stdio.h"

//printf()函数重定向到USART2

int fputc(int ch,FILE *f)

{

//ch送给USART

USART_SendData(USART2, ch);

//等待发送完毕

while(!USART_GetFlagStatus(USART2, USART_FLAG_TC)) ;

//返回ch

return ch;   

}

库函数中有宏定义

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

所以也可以写为

PUTCHAR_PROTOTYPE

{

//ch送给USART1

USART_SendData(USART2, ch);

//等待发送完毕

while(!USART_GetFlagStatus(USART2, USART_FLAG_TC)) ;

//返回ch

return ch;    

}

完整原文(网上copy来的,这个是定向到USART1):

#ifdef __GNUC__ 

 

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 

#else 

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 

#endif  

PUTCHAR_PROTOTYPE 

  

  

 USART_SendData(USART1, (uint8_t) ch); 

  

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

 return ch; 

但是这样做之后在KEIL中仍然不能正常输出,网上查到原因是printf()函数使用标准库,标准库中包括printf()等函数使用了半主机模式,导致无法运行(见参考)

解决办法:

1,使用微库,在工程属性的Target->Code Generation中勾选Use MicroLIB

2, 重新实现库中某些函数,避免使用标准库(见参考)

参考:http://blog.csdn.net/wdscq1234/article/details/7944036

http://www.openedv.com/posts/list/3172.htm


关键字:printf()函数  重定向  STM32  串口输出 引用地址:printf()函数重定向到STM32串口输出

上一篇:[STM32学习笔记]I/O的数字输出输入
下一篇:STM32计数器配置

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

STM32 IIC通信往24C02写数据、读数据
1、24C02模块的原理图:从图中可以看出,A0、A1、A2三个引脚全部接地,说明表示器件地址7位数据后三位全部是0 注:当上一个数据写完之后,若发送停止信号,则至少停下10ms时间后,才能再发送起始信号,这个时间就叫做写周期。 3、器件寻址: 4、字节写: 5、写页: (1)、用页写,CAT24WC01可一次写入8个字节的数据,CAT24C02/04/08/16可以一次写入16个字节的数据。 (2)、页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号,主器件还可以被允许额外再发送7或者15个字节。 (3)、每发送一个字节数据后CAT24WCxx产生一个
[单片机]
<font color='red'>STM32</font> IIC通信往24C02写数据、读数据
STM32和CC2520的TinyOS移植与驱动分析
引言 无线传感器网络(Wireless Sensor Network,WSN)是一种应用相关的网络。需要对某些操作系统进行移植。本文采用TinyOS作为软件平台,成功移植了Radio、Timer、USART、SPI和General I/O等5个底层模块。测试结果表明,移植的5个底层模块能够正常工作。 1 MCU和无线模块介绍 STM32系列按性能分成两个系列:STM32F103“增强型”系列和STM32F101“基本型”系列,时钟频率达到72 MHz,是同类产品中性能最高的产品。本项目采用芯片STM32F103RBT6。CC2520选用第二代ZigBee/IEEE 802.15.4无线电频率(RF)收发器。 2 Tin
[单片机]
<font color='red'>STM32</font>和CC2520的TinyOS移植与驱动分析
基于STM32设计的WiFi语音播报日程表
1. 前言 近年来,随着电子产品的发展,数字日程表这项应用在人们工作和生活中起到越来越重要的作用。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间,忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,遇上重要事务,一时的耽误可能酿成大祸。 因此从人们的日常生活到公司办公,从台式电脑到便携式智能手机,都要求标配上日程表的作用。人们要求随时随地都能快速准确的提醒当前事务,并且要求日程表能够更直观、更可靠、更便宜。这种要求催生了新型日程表的产生。除此之外,由于对社会责任的更多承担,人们要求所设计的产品能够产生尽量少的垃圾、能够消耗尽量少的能量。因此人们对日程表的又有了体积小、功耗低的要求。 2
[单片机]
基于<font color='red'>STM32</font>设计的WiFi语音播报日程表
有关STM32 外设USART 的一个小问题
今天在调试USART 时,偶然发现了USART 数据寄存器状态是可以被打断的,即数据A 在发送过程中当出现了其他的数据寄存器请求B 时,该数据A 的发送会被中断,然后A 不能发送出来,而B 会被正常发送。
[单片机]
有关<font color='red'>STM32</font> 外设USART 的一个小问题
stm32使用超高精度的同步时钟的设计
有些场合可能需要超高精度的同步时钟,比如0.5ppm甚至更低的时钟,并且保证多台设备很好的重复率,因此这篇文章主要讲述如何设计基于stm32的超高精度的时钟。 首先时钟精度要0.5ppm甚至更低的话,显然要使用txco,也就是温补晶振,0.5ppm的温补晶振市面上比较常见,体积很小(2520),并且价格很便宜,两三元一片,因为这种类型的晶振广泛引用于手机,GPS等需要精密时钟的地方,因此种类多价格低,但是相反的振荡频率只有那么几种,这几种中我么能用的也就是19.2mhz和26mhz两种。考虑2的倍数的问题,19.2mhz的最佳。 本次设计使用19.2mhz的有源温补晶振最为stm32的时钟源,这里我选择型号KT2
[单片机]
MAX3232芯片与stm32芯片通信硬件线路连接和引脚说明
1、硬件连接图 STM32芯片的任意一个串口与上图中的232_RX和232_TX连接,上图中的RS232_TXD和RS232_RXD连接一个9针串口硬件。 2、引脚功能说明 DOUT1(14PIN): RS232线数据输出(到远程RS232系统) RIN1(13PIN): RS232线路数据输入(来自远程RS232系统) ROUT1(23PIN): 逻辑数据输出(至UART) DIN1(11PIN): 逻辑数据输入(来自UART)
[单片机]
MAX3232芯片与<font color='red'>stm32</font>芯片通信硬件线路连接和引脚说明
stm32 _hal_time中断中的定时器回调函数
当触发中断时会调用对应的中断函数 例如定时器2中断: TIM2_IRQHandler(void) HAL 库中对中断的类型进行了分类处理,每一种类型的中断方式对应一个回调函数; 例如定时器有五种中断方式,对应着五个回调函数: Timer Period elapsed callback HAL_TIM_PeriodElapsedCallback() Timer Output Compare callback HAL_TIM_OC_DelayElapsedCallback() Timer Input capture callback HAL_TIM_IC_CaptureCallback() Timer Trigger
[单片机]
SPI接口说明及原理
1简介 SPI:Serial Peripheral Interface,是串行外设接口。 SPI是由摩托罗拉于 1985 年前后开发,是一种适用于短距离、设备到设备通信的同步串行接口。 从那时起,这种接口就已成为许多半导体制造商,特别是微控制器(MCU)和微处理器(MPU)采用的事实标准。 2SPI接口 SPI总线是一种4线总线,通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以。 MOSI:Master Output Slave Input,主设备数据输出,从设备数据输入; MISO:Master Input Slave Output,主设备数据输入,从设备数据输出; SCLK:Serial Clock,时
[单片机]
SPI接口说明及原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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