历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2021年09月01日 | STM32—重定向printf和getchar函数到串口

发布者:HarmoniousCharm 来源: eefocus关键字:STM32  重定向printf  串口 手机看文章 扫描二维码
随时随地手机看文章

在STM32测试串口的时候经常需要在开发板和上位机之间传输数据,我们可以用c语言中的printf()函数和getchar()函数来简化传输。


以printf()为例:

printf()函数实际上是一个宏,最终调用的是 fputc(int ch,FILE *f)这个函数来执行输出的,所以我们需要修改这个函数,使函数向串口输出,这样当再次引用printf()函数时,printf()就是通过串口向上位机发送数据的一个函数了。


那么如何修改printf()呢?加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。所以我们可以在别的地方定义一个相同名字的函数,而不必也尽量不要修改之前的函数。


修改fputc函数如示:


/* 重定向printf函数 */

int fputc(int ch, FILE *f)

{

USART_SendData( DEBUG_USARTx,  (uint8_t) ch);

/* 等待发送完毕 */

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

return ch;

}


修改完成后需要勾选Target设置中的Use Micro LIB选项,MicroLib提供了一个有限的stdio子系统,所以还要再头文件中包含#include

在这里插入图片描述

getchar()函数也是如此:


/* 重定向scanf函数 */


int getc(FILE *f)

{

/* 等待串口输入数据 */

/* 有了这个等待就不需要在中断中进行了 */

while(USART_GetFlagStatus(DEBUG_USARTx , USART_FLAG_RXNE)==RESET);

/* 返回值进行强制类型转换 */

return (int)USART_ReceiveData(DEBUG_USARTx);

}


关键字:STM32  重定向printf  串口 引用地址:STM32—重定向printf和getchar函数到串口

上一篇:STM32—位带操作
下一篇:STM32—中断详解(配合按键中断代码,代码亲测)

推荐阅读

今天要讲的是串口通信,个人觉得挺重要的,以后USART、蓝牙通信,485等等都要用到串口,面试官也喜欢问一些串口的问题,比如问你串口参数,数据位几位,波特率多少,还会问你怎样设置串口等等。一、串口概述1. 定义串口通信是一种设备间非常常用的串行,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。2. 开发板硬件用于串口跟PC相...
东风日产轩逸最新款车型近日已经上市,并搭载了全新的第三代HR16智能发动机,而作为一款上市不久就接到将近30000台订单的车型,发动机的好坏直接决定了整车的使用情况和用户认知程度。所以,近日我们就受邀来到了位于广州市花都区的东风日产发动机生产基地,参加了东风日产“智·造幸福”全新第三代HR16智能发动机技术解析活动。通过参观发动机拆解并与技...
众所周知,英国的ARM公司是嵌入式微处理器世界当中的佼佼者。ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式让ARM公司获得了巨大的成功,使它迅速占据了32位嵌入式微处理器的大部分市场份额。目前,随着对嵌入式系统的要求越来越高,作为其核心的嵌入式微处理器...
在深受疫情影响的2020年之前,为了更好地满足快速发展和业务扩展需求,企业软件领域出现了很多关于现代化、自动化和数字化转型的学术性讨论。但这些讨论之前大多停留在了理论探讨阶段,很可能是因为大多数(大约70%)数字化转型计划都失败或者没有达到预期。而这样的失败率足以把任何人吓跑。由于无法完成数字化转型,企业机构中的许多员工不得不创建自己...

史海拾趣

问答坊 | AI 解惑

“首届中国研发管理高峰会” 欢迎您拨冗出席!11月22-24日,北京

“首届中国研发管理高峰会”邀请函 2007年11月22-24日 北京 产品开发是21世纪的工业战场,正如制造业曾是20世纪70年代和80年代的工业战场一样。在市场需求不断变化、技术迅速更新的趋势之下,企业是否具备快速、高质量、低成本推出产品的能力, ...…

查看全部问答∨

关于09年射频的一道征题

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 题目不错,应该也有不少人看过,分享之哈。呵呵  …

查看全部问答∨

求个编程实例

有一按钮和+10V电源及PLC,让输出电压随着按钮的持续接通时间而递增,直到10V为止,要如何编程?望给予解答!…

查看全部问答∨

谁用过ftdi_ser.dll这个驱动?

USB转串口的,在ce5下面能正常使用,但换了ce6就不行,无论是导入注册表还是安装inf都不行,驱动死活装不上。。。驱动包里面的说明是支持ce6的,网上搜了一下似乎也有人用成功过。。。 谁用过这个驱动,指点一下吧,先谢了!…

查看全部问答∨

arm选型

各位大虾 我现在想做一嵌入式arm开发,来实现简单的路由项目,现对于arm的选型,伤透脑筋,各位大大位,有什么好的建议,以供小弟参考啊,,在线急等,,谢谢谢谢。。。。。。。。。…

查看全部问答∨

嵌入式 进入linux 键盘不能用.

我把串口线接好,建立一个超级终端,进入linux 就不能用键盘了,在windows下还可以用,什么问题了?谢谢各位了。…

查看全部问答∨

大三的困惑

目前大三,学校里有很多的课外项目,比如电子设计大赛,NS2,数学建模,我是通信工程的,我想进入嵌入式Linux开发行业,又苦于没有专业人士指导,一个人去钻研,感觉没有方向,也想过参见外面的培训班,又怕花了钱没有成效,下半年就找工作了,觉得 ...…

查看全部问答∨

求助:CE下CAN驱动程序如何正确加载?

我写了CAN的驱动CAN.DLL,并且配置了project.reg文件, [HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\CAN]         "Dll"="CAN.dll"         "Prefix"="CAN"         ...…

查看全部问答∨

STR910常见问题解答

2006年10月6日,我们在ST的英文网站上举行了一个有关STR91x系列芯片的网上研讨会,在这个研讨会中世界各地的工程师提出了很多问题,我们把大家最关心的一些问题集中起来,汇编成一个《STR910常见问题解答》,现将全文翻译转载如下,供国内同行 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved