历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | STM32printf函数实现方法

2018-12-29 来源:eefocus

这几天学习stm32发现利用keil不能正常使用printf函数,所以我去网上找了一下,这是一个网易博主的解决办法,亲测有效:


STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)


在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。


下面就说一下使用printf需要做哪些配置。


有两种配置方法:


一、对工程属性进行配置,详细步骤如下


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


至此完成配置,在工程中可以随意使用printf向串口发送数据了。


二、第二种方法是在工程中添加“Regtarge.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));

}


至此完成配置,可以在main文件中随意使用 printf 。


推荐阅读

史海拾趣

Hi-Tech Resistors Pvt Ltd公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们不仅限于接收和转换电视信号,还承载着丰富的娱乐与信息服务功能。

机顶盒的核心功能在于接收并转换来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,将其转换为电视机可识别的视频和音频流。这一转换过程确保了观众能够享受到高清乃至4K超高清的画质和震撼的音效,极大地提升了观看体验。此外,机顶盒还集成了诸如电子节目指南、因特网网页浏览等增值服务,让电视机不再仅仅是单向接收信息的设备,而是成为一个能够与用户进行互动的智能终端。

随着技术的发展,机顶盒的种类日益丰富,按主要功能可分为数字卫星机顶盒、有线电视数字机顶盒、IPTV机顶盒等。这些机顶盒不仅满足了用户多样化的观看需求,还通过连接互联网,提供了在线购物、视频点播、游戏娱乐等多元化服务。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向智能化、多功能化方向发展,为用户提供更加便捷、个性化的使用体验。

总之,机顶盒作为连接电视与互联网的桥梁,在丰富家庭娱乐生活、提升观看体验方面发挥着重要作用。随着技术的不断进步和市场需求的持续增长,机顶盒行业将迎来更加广阔的发展前景。

Datasensor公司的发展小趣事

1978年,DATALOGIC公司成功研制出欧洲第一台条码扫描器,并将此产品应用于商业领域。这一创新不仅展示了公司在光电技术领域的实力,也为其在工业自动化领域赢得了良好的声誉。条码扫描器的成功推出,为公司带来了可观的收益,也为公司后续的技术研发和市场拓展提供了强有力的支持。

Bce Sud公司的发展小趣事

面对市场的不断变化和消费者需求的日益多样化,Bce Sud始终坚持创新驱动的发展理念。公司不断推出新产品,从半导体芯片拓展到传感器、集成电路等领域,产品线日益丰富。这些创新产品不仅提升了公司的市场竞争力,也为消费者带来了更多选择。

蜂鸟无线公司的发展小趣事
根据电动机的特性和应用需求,确定PWM信号的频率和占空比范围,以确保调速效果。
A/D Electronics Inc公司的发展小趣事

随着产品线的不断丰富,A/D Electronics Inc开始积极拓展国内外市场。公司通过与全球知名电子品牌建立战略合作关系,成功将产品打入国际市场。同时,公司还积极参加国际电子展会,展示其最新技术成果和产品,进一步提升了品牌知名度和市场影响力。

FCT electronic公司的发展小趣事

FCT electronic公司始终坚持以客户需求为导向的服务理念。为了更好地满足客户的需求,公司不断推出新的服务模式和解决方案。例如,公司推出了定制化服务,根据客户的具体需求提供个性化的电路板解决方案;同时,FCT electronic公司还加强了售后服务体系建设,确保客户在使用过程中能够得到及时、专业的技术支持和服务。这些创新的服务模式使FCT electronic公司在客户中赢得了良好的口碑和信任。

问答坊 | AI 解惑

如何用软盘自动恢复D盘备份的VxWorks系统至C盘

复印机打印控制器使用的是VxWorks系统,机器配置如下: CPU:PⅢ 866MHz 硬盘:61G(C,D,E三分区) 内存:256M 软驱:1.44M 网卡:10M/100M 其它:1394接口卡 无显示器及输入设备。 现C盘系统损坏,无法启动,需恢复D盘备份系统至C盘: ...…

查看全部问答>

arm中断系统的疑惑

arm中断疑惑: 当中断产生时,通过中断向量表        b   ResetHandler       b   HandlerUndef    ;handler for Undefined mode     b   Handler ...…

查看全部问答>

关于UCLIBC支持locale support的问题?

我装了LIBXML2,用ARM-ELF-GCC编译程序时提示错误: attempted to include iconv.h when uclibc built local support 编译用的命令如下: arm-elf-gcc cmld.c -o cmld -lm -I /boot/xml/include/libxml2 -L /boot/xml/lib -l ...…

查看全部问答>

[高分]window mobile5 中操作通讯录

用vs2005(C++)写一个程序,在mobile5中能把数据按通讯录的格式导入数据到通讯录里。 请教各位大虾,如何实现,有哪些函数或方法…

查看全部问答>

关于usb固件编程,定义描述符时的问题

最近小弟我在研究usb固件编程,有一个疑惑,就是定义usb configuration descriptor的时候,其中的wTotalLength字段关于配置描述符的总长度时,为什么要进行高低字节交换。…

查看全部问答>

帮忙啦!谁有tornado2.2.1的补丁

谁有这两个补丁 make3_80.gvk_patches make3_80.tor2_2.new_dependency_rules 需要用。 谢谢! 原文地址:http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#VxWorks/NT NOTE:The make (version 3.74) that is provide ...…

查看全部问答>

统计下SHT21焊接情况?

大家谈谈SHT21应该怎么焊接?https://bbs.eeworld.com.cn/thread-153506-1-1.html看来这个芯片焊接很需要功夫哦!…

查看全部问答>

lpc1343的开发板哪里能买到?

就是nxp网站上的那种,有卖的吗?现在做项目要用,已经错过申请板子的时间了 哪位有不用的话可以考虑转给我吗?价钱可以商量…

查看全部问答>

如何用msp430实现wifi 服务器

以前用ARM实现了wifi的发射,作为服务器使用。现在想移植到msp430上,本人对430一点不了解,请有经验的前辈给指明方法。谢谢!…

查看全部问答>

基于单片机的带有SD卡的MP3

想做一个基于单片机的带有SD卡的MP3,希望高手能够给些资料,谢谢!面临毕业,希望能够毕业前做些实事!…

查看全部问答>