STM32:重定向 prinft 和 getchar 函数,但是使用过程串口出现问题

发布者:电子创新者最新更新时间:2021-10-08 来源: eefocus关键字:STM32  重定向  getchar  函数  串口 手机看文章 扫描二维码
随时随地手机看文章

在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

在这里插入图片描述

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

关键字:STM32  重定向  getchar  函数  串口 引用地址:STM32:重定向 prinft 和 getchar 函数,但是使用过程串口出现问题

上一篇:STM32笔记 (九)串口通讯USART(串口发送接收编程)
下一篇:STM32重定向C库printf/scanf

推荐阅读最新更新时间:2024-11-13 12:35

S3C2440开发板的学习使用(一)----串口的安装
串口连接 1、板上有USB转UART芯片PL2303HX,可以通过MINI USB口,使用一根USB转MINI USB线连接到笔记本上。 2、Windows下安装USB转串口驱动程序PL2303_Prolific_DriverInstaller_v1.5.0.exe。 3、下载串口工具软件SecureCRT,设置波特率和COM口,即可通过串口读写。 UART简介:http://blog.csdn.net/GQ1900/article/details/51885259 UART和RS232、RS485的关系:http://blog.csdn.net/chun_1959/article/details/450545
[单片机]
STM32和STM8认证软件包,助力设备达到功能安全标准
意法半导体发布了三款功能安全软件包,简化基于STM32和STM8微控制器和微处理器的安全至关重要的工业、医疗、消费和汽车产品的开发。 这些软件包可免费下载使用,其中包含满足适用的IEC和ISO规范所需的资源。意法半导体拥有1000多款STM32微控制器,以及包括STM8AF汽车级认证产品在内的STM8系列微控制器,为开发者提供广泛的产品选型和亲民的价格,而价格昂贵的专用安全MCU通常是无法做到这两点的。 工业用功能安全软件包X-CUBE-STL通过了TÜV Rheinland认证测试机构的IEC 61508 SC3认证,与安全手册的使用条件配合使用,可以在STM32上实现安全完整性等级SIL-2或SIL-3的安全功能
[单片机]
<font color='red'>STM32</font>和STM8认证软件包,助力设备达到功能安全标准
STM32学习笔记—SysTick定时器
简介:Q:什么是SYSTick定时器? SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 Q:什么是SYSTick定时器? SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 Q:为什么要设置SysTick定时器? (1)产生操作系统的时钟节拍 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬
[单片机]
linux-2.6.24.4中s3c2410和dma有关的函数的分析
首先介绍s3c2410与DMA相关的寄存器。 s3c2410共有4通道的dma,每通道9个寄存器,共36个。 1、DISRCn 该寄存器保存待传送数据的源地址。 2、DISRCCn 源控制寄存器。位1表示数据源的总线类型,位0表示地址是否自动增减。 3、DIDSTn 该寄存器保存待传送数据的目的地址。 4、DIDSTCn 目的控制寄存器。位1表示目的地址的总线类型,位0表示地址是否自动增减。 5、DCON DMA控制寄存器。 6、DSTATn DMA状态寄存器。 7、DCSRCn 当前源地址寄存器。 8、DCDSTn 当前目的地址寄存器。 9、DMASKTRIGn DMA MASK寄存器。
[单片机]
STM32通用定时器的输入捕获(实例:输入捕获)
通用定时器输入捕获概述 输入捕获的工作原理 在通用定时器框图中,主要涉及到最顶上的一部分(计数时钟的选择)、中间部分(时基单元)、左下部分(输入捕获)这三个部分。这里主要讲解一下左下部分(输入捕获),其他两个部分可以参考文章:【STM32】通用定时器的基本原理(实例:定时器中断)。 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6、TIM7,其他的定时器都有输入捕获的功能。下面以一个简单的脉冲输入为例,简单地讲述一下输入捕获用于测量脉冲宽度的工作原理: 先设置输入捕获为上升沿检测,记录发生上升沿时TIMx_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来的时候
[单片机]
<font color='red'>STM32</font>通用定时器的输入捕获(实例:输入捕获)
STM32 RTC实时时钟(二)
上次实验完成了对实时时钟的基本功能——计时的实验,这次在计时的基础上对RTC的可编程闹钟的功能进行测试。 RTC 单元提供两个可编程闹钟,即闹钟 A 和闹钟 B。 可通过将 RTC_CR 寄存器中的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。如果日历亚秒、秒、分钟、小时、日期或日分别与闹钟寄存器RTC_ALRMASSR/RTC_ALRMAR 和RTC_ALRMBSSR/RTC_ALRMBR 中编程的值相匹配,则 ALRAF 和 ALRBF 标志会被置为1。可通过 RTC_ALRMAR 和 RTC_ALRMBR 寄存器的 MSKx 位以及 RTC_ALRMASSR 和RTC_ALRMBSSR 寄
[单片机]
<font color='red'>STM32</font> RTC实时时钟(二)
51单片机中将变量、数组、函数设置在固定位置
一、不带初值的变量或数组 直接使用_at_ 关键字加上地址就行。 如: unsigned char idata myvar _at_ 0x40; unsigned char code myvar _at_ 0x40; _at_ 关键字的前后都有空格。 二、带初值的变量或数组 要将某变量定位在一绝对位置且要赋初值,此时用 _at_ 不能完成,要进行如下操作: 1、在工程中建立一个新的文件,如InitVars.c,在其中对要处理的变量赋初值(假设是code变量): char code myVer = { COPYRIGHT 2001-11 }; 2、然后将该文件加入工程,编译,打开M51文件,若定义的是co
[单片机]
STM32定时器的研究
一直想写个什么计数方面的文章,但是自己的水平有限,一直写不出来,但是这个还是凑合着写吧!!!以前也看过STM32的定时器的,但是感觉还是在一个很模糊的状态,这次就当是自己学习写技术文章的个写作。 一、对于STM32中断优先级的概念的理解 STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作 亚优先级 或 副优先级 ,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行 抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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