历史上的今天
返回首页

历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2021年10月08日 | STM32:重定向 prinft 和 getchar 函数,但是使用过程串口出现问题

2021-10-08 来源:eefocus

在STM32学习中,我们肯定会学到串口的使用。其中关于串口数据的接收和发送,我们其实可以用 printf() 函数和 getchar() 函数来简化传输。我们只需要做一些简单的前期工作即可。


在 C 语言标准库中,fputc 函数是 printf 函数内部的一个函数,功能是将字符 ch 写入到文件指针 f 所指向文件的当前写指针位置,简单理解就是把字符写入到特定文件中。我们使用 USART 函数重新修改 fputc 函数内容,达到类似“写入”的功能。


fgetc 函数与 fputc 函数非常相似,实现字符读取功能。在使用 scanf 函数时需要注意字符输入格式。


还有一点需要注意的,使用 fput 和 fgetc 函数达到重定向 C 语言标准库输入输出函数必须在 MDK 的工程选项把“Use MicroLIB”勾选上,MicoroLIB 是缺省 C 库的备选库,它对标准 C 库进行了高度优化使代码更少,占用更少资源。为使用 printf、scanf 函数需要在文件中包含 stdio.h 头文件


代码如下:


/*重定向c库函数printf到串口,重定向后可使用printf函数*/

int fputc(int ch, FILE *f)

{

/* 发送一个字节数据到串口 */

USART_SendData(DEBUG_USARTx, (uint8_t) ch);

//DEBUG_USARTx改成你想用的USART端口

/* 等待发送完毕 */

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

//DEBUG_USARTx改成你想用的USART端口

return (ch);

}


///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数

int fgetc(FILE *f)

{

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

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

//DEBUG_USARTx改成你想用的USART端口

return (int)USART_ReceiveData(DEBUG_USARTx);

//DEBUG_USARTx改成你想用的USART端口

}


如果你用的是STM32的固件库,应该可以直接复制粘贴,只需要改DEBUG_USARTx即可。如果你是其他的,呢么你只要把这两段代码里的发送和接受函数,换成你自己的函数即可。


当然,有的小伙伴会发现,自己在重定向的时候可能会出错,达不到预期的效果。(排除你重定向函数写错的可能)


首先,记得包含头文件 #include


其次,如果你用的是 KEIL,你还需要设置一个东西


点击这个魔术棒,进入到设置页面

在这里插入图片描述

然后点击使用Use MicroLIB

在这里插入图片描述

一般注意这两点的话,就可以成功的实现重定向

推荐阅读

史海拾趣

CLARE公司的发展小趣事

CLARE公司的创业之路始于对电子行业深厚的技术积累和敏锐的市场洞察力。公司的创始人凭借其深厚的专业知识和经验,准确把握了行业的发展趋势,成功开发了一系列具有竞争力的电子产品。这些产品在市场上获得了良好的反响,为CLARE公司奠定了坚实的技术和市场基础。

E-T-A Circuit Breakers公司的发展小趣事

进入21世纪后,E-T-A公司继续加大在研发和技术创新方面的投入,推出了一系列智能电路保护解决方案。这些解决方案结合了先进的传感器技术、数据分析和人工智能技术,能够实时监测电气系统的运行状态,预测潜在风险,并提供智能化的保护和控制策略。这些创新产品不仅提高了电气系统的安全性和可靠性,也为客户带来了更高的经济效益和社会效益。

Herotek Inc公司的发展小趣事

为了更好地服务中国及亚太地区的电子产业集群,Henkel在东莞市投建了汉高电子粘合剂华南应用技术中心。该中心不仅具备先进的研发设备和测试能力,还拥有一支专业的技术团队。通过模拟仿真和数字化手段,该中心能够快速响应客户需求,提供定制化的粘合剂解决方案。自启用以来,该中心已帮助众多电子企业实现了技术创新和产品升级。

柯爱亚(ceaiya)公司的发展小趣事

在稳固国内市场的同时,柯爱亚积极寻求海外市场的发展机会。公司不仅参加了多个国际电子展览会,还与国际知名企业建立了合作关系。此外,柯爱亚还通过投资、并购等方式,不断拓展业务范围,实现了多元化发展。这些举措使柯爱亚在国际市场上的影响力逐渐增强。

Dean Technology公司的发展小趣事

近年来,随着电子行业的快速发展和市场竞争的加剧,Dean Technology公司也面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加强内部管理和团队建设。同时,他们还密切关注行业趋势和市场需求的变化,及时调整产品结构和市场策略。这些努力使得Dean Technology在应对行业变革和挑战时更加从容和自信。

请注意,以上故事是基于对Dean Technology公司一般情况的了解而编写的,可能不完全符合公司的实际发展历程。如需更详细的信息,请查阅相关资料或联系公司官方渠道。

振华新云(CEC)公司的发展小趣事

背景:为了进一步扩大市场份额和提高品牌影响力,振华新云积极开展市场拓展和国际合作。

内容:公司积极参加国内外电子展会和论坛等活动,加强与国内外客户的沟通和交流。同时,积极寻求与国际先进企业的合作机会,共同开展技术研发和市场推广等活动。

成果:通过市场拓展和国际合作,振华新云的产品逐渐走向世界舞台,赢得了广大客户的信赖和好评。同时,公司也积累了宝贵的国际化经验和资源,为未来的国际化发展奠定了坚实基础。

问答坊 | AI 解惑

【社区大讲堂】系列之可配置处理器技术入门(10本《复杂SOC设计》等你拿!)

Tensilica活动获奖人员如下:(请各位网友将您的论坛昵称标注好,并将具体通讯地址及联系电话发到我的邮箱:wangtingting@eeworld.com.cn中,收到您的邮件后我们立刻将书寄出,谢谢!) flyingdsp   xiaoxif   njlianji ...…

查看全部问答>

cyclone芯片一般要多少钱一块?

cyclone芯片一般要多少钱一块?…

查看全部问答>

PADSLAYOUT2007

想学习PADSLAYOUT2007的工程师看看吧,不错的东西…

查看全部问答>

这是蛇形线吗?

这是在一个RF放大电路上看到的,里面的方形走线及蛇形走线感觉是电感,但为什么有的中间会短路了?…

查看全部问答>

linux内核编译通不过,请知道的回答!

若编译内核出现如下情况   LD      .tmp_vmlinux1   arm-linux-ld:arch/arm/kernel/vmlinux.lds:1439: parse error   make: *** [.tmp_vmlinux1] Error 1 解决方法:修改arch/arm/kernel/vm ...…

查看全部问答>

ce6的中文界面和activesync冲突?

以前都是用英文界面的ce6,一直没什么问题,这几天把界面改成了中文,结果就发现activesync无法连接成功,只要把usb fuction口和pc连接后,不但activesync无法连接,而且整个系统的运行速度也会变得非常慢(但是在串口调试软件上有插入usb fuction ...…

查看全部问答>

高手进

电脑高手们来我们狼族③(坚韧、顽强、耐性、勇敢、冷酷、孤傲、团结、忠贞、机警、智慧)吧~!群号是12656026 我们将在这里交流网络技术~! 以后我们将用狼的性格统治世界,世界是我们的      我代表狼族欢迎大家来我们狼 ...…

查看全部问答>

用pb4.2下用网线下载WINCE镜像出错.无法下载,,,

用pb4.2下用网线下载WINCE镜像出错.无法下载,,, 弹出一个对话框,标题:Connection to Target Failed. 内容:platform Builder was unable to make a connection to the target device.Please make sure all setting in Configure Remo ...…

查看全部问答>

NXP发布速度高达204MHz的ARM Cortex-M4微控制器

在网上看到   NXP发布速度高达204MHz的ARM Cortex-M4微控制器   原文网址:http://www.eechina.com/viewthread.php?tid=83693 恩智浦半导体(NXP)近日发布LPC4300数字信号控制器(DSC),这是迄今为止业内速度最快的ARM Cortex-M4 ...…

查看全部问答>

最近聚会多,囧事也多,转来一篇乐呵乐呵

元旦过完是就等着新年了……一心就扑在吃喝上了,公司也是各种聚餐,前天跟同部门的朋友去吃大餐,大堂有一桌喝醉了一直跟服务员闹……好囧。哈哈,可惜那时候没意识,忘了拍照片……今天在天涯的八卦论坛逛着玩,看见有个可爱的筒子写了一篇聚会醉 ...…

查看全部问答>