历史上的今天
返回首页

历史上的今天

今天是:2025年06月10日(星期二)

正在发生

2018年06月10日 | STM32 串口通信 printf方法

2018-06-10 来源:eefocus

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 。


推荐阅读

史海拾趣

Advanced Interconnections Corp公司的发展小趣事

为了降低经营风险并寻求新的增长点,AIC公司开始实施多元化发展战略。除了继续深耕连接器领域外,公司还积极拓展至线缆、接口等其他相关领域。通过不断的技术研发和市场拓展,AIC公司在这些领域也取得了不俗的成绩,实现了业务的多元化发展。

DALLAS公司的发展小趣事

随着全球电子市场的不断扩大和变化,Dallas公司积极实施全球化战略布局。公司在全球范围内设立研发中心和生产基地,以便更好地服务全球客户。同时,Dallas公司还加强与国际知名企业的合作与交流,共同推动半导体技术的创新和应用。这种全球化战略布局不仅增强了Dallas公司的国际竞争力,也为公司的长期发展提供了广阔的空间。

Gamma Microelectronics ( APM )公司的发展小趣事

G24i在发展过程中始终注重国际合作与市场拓展。公司董事长Mr. Edward J Stevenson及其团队多次访问国内外知名科研机构和企业,就DSSC技术的研发、产业化等方面进行深入交流。同时,G24i还积极参加国际太阳能展会和论坛,展示其最新的技术成果和产品应用。这些努力不仅提升了G24i在国际市场上的知名度和影响力,也为公司赢得了更多的合作机会和市场份额。通过国际合作与市场拓展,G24i正逐步成为全球DSSC领域的领军企业之一。

GE Power Electronics Inc公司的发展小趣事
作为儿童玩具的一部分,通过声音控制播放音乐,增加玩具的趣味性和互动性。
Feller US公司的发展小趣事

菲斯克(FSR.US)作为一家新兴的电动汽车制造商,自创立之初便面临着巨大的挑战。资金紧张是公司面临的首要问题,为了维持运营和推进研发,公司不得不频繁地寻求融资。在一次次的融资尝试中,菲斯克展现了其坚定的决心和创新的理念,虽然过程充满艰辛,但公司最终通过不断努力,成功获得了一笔重要的投资,为公司的发展奠定了坚实的基础。

Aerovox Corporation公司的发展小趣事

在电动汽车领域,技术创新是企业生存和发展的关键。菲斯克一直致力于研发更加先进、更加环保的电动汽车技术。经过多年的努力,公司终于在某项关键技术上取得了重大突破。这一突破不仅提升了电动汽车的性能和续航里程,还为公司赢得了市场的广泛认可。菲斯克凭借这一技术优势,成功推出了一系列备受好评的电动汽车产品,进一步巩固了其在市场中的地位。

问答坊 | AI 解惑

三菱、西门子(PLC)台达、三菱、西门子(触摸屏)编程软件

三菱、西门子(PLC)台达、三菱、西门子(触摸屏)编程软件 西门子(SIEMENS) SIMATIC STEP 7 - v5.3 iso+SP1+SP2+SP3 4CD (带授权)下载OMRON CX-Programmer Ver. 5.0 精简版 + CX-Simulator Ver.1.3 免费下载(已恢复地址)欧姆龙 OMRON CX-Programme ...…

查看全部问答>

射频基础知识

希望能对新人起到一些作用。…

查看全部问答>

IQmath库

[local]1[/local]…

查看全部问答>

求助:Quartus 仿真时有毛刺

我在用Quartus 仿真时,即使是一个简单的加法器,也会出现毛刺;而且毛刺放大后,其值与理论值不符! 有没有高手遇到过这种情况,帮帮指点一下!…

查看全部问答>

用单片机配置CPLD器件

用单片机配置CPLD器件 ALTERA公司的可编程序逻辑器件APEX20K、FLEX10K和FLEX6000虽应用广泛,但由于其内部采用SRAM存储配置数据,每次系统上电时,必须用配置芯片对其进行配置,只有在配置正确的情况下,系统才能正常工作。配置芯片是一个能产生配 ...…

查看全部问答>

谈谈我和嵌入式的故事

转眼我已工作三周的时间了,在工作过程中,我感受颇多,现在与大家一起来分享一下我的经历。 我作为一个普通本科学校的学生,经历了所有与我一样在普通本科就读的大学生的生活,从入学时的欣喜与憧憬到渐渐地失望与迷茫。原先都只是听说过的那些大 ...…

查看全部问答>

组建创业团队:寻网站开发技术人员

组建创业团队:寻网站开发技术人员   在我们身边很多朋友创业的心里很矛盾,既有创业单干的激情,同时又有担心失败后结局很惨!结果思考了很长时间,最后还是决定再等等看,一月过了一月,一年过了又一年,岁月流逝,光阴不再,沉浸在打工的生涯 ...…

查看全部问答>

请问在wince 5.0下如何使用CMWAP拨号后访问wap网站?

    我使用wince 5.0的做作系统,使用TD模块,拨号时设置\"AT+CGDCONT=1,\\\"IP\\\",\\\"CMWAP\\\"\",拨号号码为*98*1#,浏览器组件选择的是“Pocket Internet Explorer”,拨号拨号成功后,我使用浏览器试图打开“wap.3g.net.cn”,可是 ...…

查看全部问答>

BLDDEMO: There were errors building OSDesign1

但是人家说最后有一个错误 怎么处理啊 我的最后有一个错误 ------ 已启动生成: 项目: OSDesign1, 配置: CEPC x86 Release Platform Builder (_TGTCPU) ------ Starting Build: blddemo -q ============== BLDDEMO: Generating OS Design Fold ...…

查看全部问答>

软件工程vs嵌入式

学校不知道怎么搞的把我们专业换成嵌入式了(入学时专业是软件工程)现在都大三了,软件工程方面的专业课也没上过,我想问下软件工程和嵌入式在就业前景方面有些什么区别。…

查看全部问答>