单片机中printf函数的重映射

发布者:温雅如风最新更新时间:2015-10-10 来源: eefocus关键字:单片机  printf函数  重映射 手机看文章 扫描二维码
随时随地手机看文章
一、源自于:大侠有话说

1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能

除了打印你想要的字符到屏幕上外,还能把数字进行格式化.例如十进制的33,用十进制

方式输出就是33,用十六进制的形式就输出成21,如果用字符形式输出,那就是ASCII码

表对应的’!’.

2. 51年代,一些人软件仿真的时候也很喜欢使用printf,但实际代码运行中,用的人则不多,因

为别说51年代,就是用AVR的,也会觉得printf这个函数耗费的CPU资源相当可观.所以

printf在8位单片机时代,熟悉的人的确不多.但到了ARM时代,情况则大为不同.毕竟

ARM的处理能力和51完全不是一个级别,这使得不少人开始喜欢使用printf在实际项目

中作为调试过程的串口输出.因为它的格式化功能实在是相当方便.

而本例程就是教会你这么使用printf.

3.程序把printf的输出对象设定为串口1.有一个标准的函数是必须要自己定义的,那就是

fputc,把这个函数的功能写成串口输出一个字符.建议在串口的初始化模块中定义

int fputc(int ch)

{

USART_SendData(USART1, (u8) ch);

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

return ch;

}

然后记得一点,就是MicroLib要勾上.其实大部分情况下,都建议使用MDK附带的

MicroLib,这东西是有一定用途的.留待以后再更多地介绍.

以上两步做好后,还记得要包含printf的头文件:

#include

那么,所有工作就大功告成了,你可以尽情的尝试printf带来的便利.

4.另外大家是否意识到一点,就是printf输出到哪,其实是由fputc函数决定的.所以如果有兴

趣,可以改写这个fputc函数,使得其printf的对象是DX-32板上的TFT屏或者黑白屏.大家有

兴趣的不妨试试.

二、源自于:STM32开发板(正点原子)

//加入以下代码,支持printf函数,而不需要选择use MicroLIB

#if 1

#pragma import(__use_no_semihosting)

//标准库需要的支持函数

struct __FILE

{

int handle;

};

FILE __stdout;

//定义_sys_exit()以避免使用半主机模式

_sys_exit(int x)

{

x = x;

}

//重定义fputc函数 ,串口1

int fputc(int ch, FILE *f)

{

while((USART1->SR&0X40)==0);//循环发送,直到发送完毕

USART1->DR = (u8) ch;

return ch;

}

#endif

关键字:单片机  printf函数  重映射 引用地址:单片机中printf函数的重映射

上一篇:看门狗的原理和作用
下一篇:基于无线传感器网络的仓库智能安保系统设计

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

这次是车规级MCU公司
小米宣布造车后,动态连连,密集走访车企,投资了数家相关技术公司,如纵目科技、禾赛科技、几何伙伴、蜂巢能源、智慧互通(爱泊车)和深动科技。 日前,小米又再投了一家车规级MCU公司。 9月10日,苏州云途半导体有限公司发生工商变更,新增股东湖北小米长江产业基金合伙企业(有限合伙)。 企查查信息显示,云途半导体是一家专注于车规级芯片的无晶圆厂半导体和集成电路设计公司,成立于2020年,法定代表人为王建中,注册资本618.9834万元人民币,经营范围包含:集成电路芯片及产品制造;半导体器件专用设备销售;集成电路芯片设计及服务等。 其核心团队均具有超过20年的汽车半导体设计及管理经验,团队致力于开发高性能、高可靠性、高安全性
[汽车电子]
51单片机——红外遥控 C语言入门编程
红外发射装置: 也就是通常我们说的红外遥控器是由键盘电路、红外编码电路、电源电路和红外发射电路组成。红外发射电路的主要元件为红外发光二极管。 它实际上是一只特殊的发光二极管;由于其内部材料不同于普通发光二极管,因 而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量的使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通发光二极管相同。红外发光二极管有透明的,还有不透明的,在我们的红外遥控器上可以看到这个红外发光二极管。 通常红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。在发射端要对晶振进行整数
[单片机]
51<font color='red'>单片机</font>——红外遥控 C语言入门编程
基于GPS和GPRS的小型追踪器
1 引 言 随着GPRS无线通讯、Internet网络以及民用领域GPS的普遍应用,将三者合一使用已成为当今热门的研究领域。 GPRS(General Packed Radio Service,通用分组无线业务)采用TCP/IP协议,非常容易和现有的Internet技术及应用平台整合,即将各种IP技术和服务同移动通信技术相结合,为用户提供各种高速度、高质量的移动数据通信业务。GPRS的移动通信、价格低廉、快速登陆、永远在线、组网灵活、信道保障、小功率防雷击等特点使得GPRS已逐渐取代GSM网络。 GPS(Global Positioning System,全球定位系统)除了更多地应用于高精尖端测量、测绘及导航领域外,也更多地
[应用]
新唐单片机keil驱动问题
1:新唐单片机keil编译工具,资料都可以在新唐官网下载。keil驱动软件要安装在keil安装的目录下,今天安装了很久,一直提示不成功,就是因为驱动Nu-link driver 没有安装到keil安装目录下。 2:刚开始项目选用M0518LC2AE单片机(36K FLASH),后来因程序存储区不够,又选用M0518LD2AE单片机(68K FLASH)。但keil编译时提示选用芯片的容量不够,keil重启无效,最后keil卸载后重装可以。
[单片机]
单片机SH79F168串口调式
最近在弄中颖最新出来的8bit单片机,开始的时候挺棘手的,网上没有那些主流芯片那么多资料,一个小问题没有弄清楚都要调式很久才能搞明白,最惨的在焊接电源的时候还让我烧了片,弄得我四处找新片子,幸好今天样片来了,烧之前没有调通的串口终于调通了,就把程序发出来,让像我一样的新手别像无头苍蝇一样到处乱撞,呵呵 需要注意的地方: (1)将接受和发送端口设置为输入,同时设置为输入,只将接受端口设置为输入都也不行; (2)波特率的计算跟51单片机不相同,可以仔细看数据手册怎么计算的; (3)RI与TI共用一个中断,需要由标志去区分(这里跟PIC的中断有点类似了)。 程序不周到的地方还望各位见谅,有什么建议尽管提。 void init_
[单片机]
MSP430单片机——定时器
昨天调了MSP430单片机的定时器,犯了个比较傻的错误。 定时器有四种模式,停止模式,增模式,连续模式,增减模式。 定时器中断也有四个,CCR0,CCR1,CCR2及溢出中断,四个。 在学习过程中,我想用下溢出中断,然后定时器又设置在了增模式,因为不希望产生比较/捕捉中断,就没有设置CCR0,原本的想法是不设置CCR0,那么定时器就会自动计数到0xFFFF后产生溢出重新计数。结果程序没有这样想象的执行。定时器进不了溢出中断。最后才发现,如果定时器工作在了增模式,那么就一定要设置CCR0,因为不论是比较中断还是溢出中断,都是定时器的计数值与CCR0相关,此时的溢出中断,也是定时器计数到CCR0,然后产生溢出,又重新开始计数。 然
[单片机]
MSP430<font color='red'>单片机</font>——定时器
STM32单片机-标准库编译成lib库
-------------------------------------------------------------------------------------------------------------------------------- 以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。 这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当浪费时间和香烟的过程。 于是,我有了将库编译成lib文件的想法。本博文就是我将STM32F4的标准库编译成lib文件并在工程中使用的过程。 适用对象: 1、熟悉库,不
[单片机]
STM32<font color='red'>单片机</font>-标准库编译成lib库
飞思卡尔S12(X)系列单片机的片上资源与分页访问机制详解
之前也用过飞思卡尔S12(X)系列的单片机,但是对MCU的片上存储器资源与其分页访问机制没有去深入的理解。最近这段时间负责的项目的主芯片刚好是MC9S12XS128这款单片机,借着这个机会好好的研究了一下。所以今天就跟大家一起分享。 在S12(X)架构中,我们首先要知道它有两种类型的内存地址:分页区(banked)和非分叶区(non-banked)。好,一脸懵。。。。什么叫分页区,什么叫非分页区呢?为什么会有分页区和非分页这两种内存呢?大家都知道我们在拿到一款芯片的时候第一件事往往就是关心这款芯片的内存有多大啊 ?处理能力是怎样的啊 ?8位?16位?32位?等等。由于HCS12(X)的地址总线线宽为16位,因此他的最大寻址范围
[单片机]
飞思卡尔S12(X)系列<font color='red'>单片机</font>的片上资源与分页访问机制详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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