stm32CubeMx上移植自己的printf()和scanf()函数

发布者:中华古风最新更新时间:2018-06-10 来源: eefocus关键字:stm32CubeMx  移植  printf()  scanf()函数 手机看文章 扫描二维码
随时随地手机看文章

要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中。重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数时,优先采用用户编写的函数,这样用户就可以实现对库的修改了。为了实现重定向printf()和scanf() 函数,我们需要分别重写fputc()和fgetc() 这两个C 标准库函数。

 

一、移植printf()函数,重定向C库函数printf到USART1

 

int fputc(int ch, FILE *f)

{

      HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);

     

      return ch;

}

 

注释:

调用了函数 HAL_UART_Transmit()

/**

  * @brief  Sends an amount of data in blocking mode.

  * @param  huart: Pointer to a UART_HandleTypeDefstructure that contains

  *                the configuration information for thespecified UART module.

  * @param  pData: Pointer to data buffer

  * @param  Size: Amount of data to be sent

  * @param  Timeout: Timeout duration 

  * @retval HAL status

  */

HAL_StatusTypeDef    HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout)

 

二、移植scanf()函数,重定向C库函数scanf到USART1

int fgetc(FILE *f)

{

      uint8_t  ch;

      

HAL_UART_Receive(&huart1,(uint8_t *)&ch, 1, 0xFFFF);

     

return  ch;

}

注释:

调用了函数 HAL_UART_Receive()

/**

  * @brief  Receives an amount of data in blocking mode.

  * @param  huart: Pointer to a UART_HandleTypeDefstructure that contains

  *                the configuration informationfor the specified UART module.

  * @param  pData: Pointer to data buffer

  * @param  Size: Amount of data to be received

  * @param  Timeout: Timeout duration

  * @retval HAL status

  */

HAL_StatusTypeDef   HAL_UART_Receive(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout)

 

提示:printf和scanf都是用轮询方式,没有使用中断。调用scanf在串口助手中输入数据时,必须以空格结束,然后点击发送,否则无法完成发送。


关键字:stm32CubeMx  移植  printf()  scanf()函数 引用地址:stm32CubeMx上移植自己的printf()和scanf()函数

上一篇:STM32 学习九 通过USART实现printf重定向
下一篇:STM32输出调试信息-printf重定向到串口

推荐阅读最新更新时间:2024-03-16 16:05

蓝牙无线耳机设计及VxWorks移植方法
摘要 蓝牙技术广泛应用于局域网络中各类数据及语音设备的无线传输。根据蓝牙耳机的协议栈原理描述蓝牙无线耳机的硬件电路设计和软件设计的实现过程;详细说明其系统内部传输音频数据的I2S总线的接口原理、读写时序和控制函数;按照蓝牙耳机应用规范中各层数据处理要求,给出嵌入式实时操作系统VxWorks在蓝牙芯片ZV4301上的部分程序移植,最后通过协议模型讲述语音网关与蓝牙耳机进行语音传输的具体过程。 关键词 蓝牙 耳机 I2S总线 VxWorks 蓝牙耳机是一种无线语音传输技术,是基于耳机在无线技术方面的延伸。它是相配于蓝牙技术而进入多媒体个人区域网络的。随着蓝牙技术的日趋完善和蓝牙产品市场占有率逐渐提升,蓝牙耳机在技术上也将不断得到改
[应用]
stm32实现printf打印log的几种办法
在stm32单片机下,改一些bug的时候,光靠调试还不行,有时候需要打印log来查看某些变量在一段时间内的变化趋势,但是板卡又没有接串口,没办法重定向到串口打印,上网查资料研究了一下,发现以下几种办法可实现单片机像在pc终端一样打印log: 方法1:使用串口重定向,将printf打印的信息输出到串口,再将串口连接pc端串口接收终端,在终端上查看log.主要2个步骤:修改printf函数底层调用到的fputc函数和避免使用semihos TIng(半主机模式)。 a.如果使用mdk作为编译工具,在Target选项框里选Use MicroLib 选项,即为使用微库模式,不会使用半主机模式; b.工程中添加串口配置代码,方便
[单片机]
stm32实现<font color='red'>printf</font>打印log的几种办法
C51 串口收发,printf, 接收字符串
串口发送,接收 在while(1){printf(“xxx”); delay(100); //此处需要有delay函数;} #include reg51.h //stdio.h,string.h用于printf函数原型 #include stdio.h void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void uart_init(void) { TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2 TH1=0xe6;//设置波
[单片机]
在MSP430F149上移植μC/OS Ⅱ实现人机界面系统的设计
人机界面(human-computer interface),又称用户界面、人机交互、人机接口等,是人与机器之间传递、交换信息的媒介.是用户使用计算机系统的综合操作环境。在商品竞争中,一个应用系统的成功与否在某种程度上也取决于用户使用界面的感受好坏,因此,人机界面的设计在应用系统的设计中有着重要的作用。嵌入式系统强调人机界面操作的实时性,简单化,强调在特定平台上特定应用的时间空间效率。在传统的小系统设计中。程序设计一般采用前后台工作方式。应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,时间相关性很强的关键操作(crltical operation)是靠中断服务来保证的。因为中断服务提供的信息一直要等到后台程序走到该处
[单片机]
在MSP430F149上<font color='red'>移植</font>μC/OS Ⅱ实现人机界面系统的设计
微软发布项目指导:将iOS应用移植到Win10
    尽管Project Astoria兼容安卓项目被砍,让无数的WP用户深感遗憾,不过令人欣慰的是,另一个iOS移植项目Project Islandwood推进地似乎很顺利。在Windows 10 Mobile正式版即将来临之际,微软在MSDN官方博客中公布了iOS应用移植到Win10平台的详细指南。     Project Islandwood项目代码已在GitHub公布,感兴趣的开发者可以参与该项目的后续开发。移植的步骤并不复杂,但是对于开发者而言,换了一个新的开发环境,还是需要时间来适应的。   业界对微软的Project Islandwood项目看法一直都是褒贬不一,持反对意见者认为微软这种做法伤害了一批W
[手机便携]
STM32-不同芯片的移植
在实际项目中,我们根据项目需求选用最合适的芯片型号,有时会涉及到一个工程代码在不同芯片上的使用,不同型号的芯片如何移植呢?通过本文,您将了解基本的移植过程。 1.准备工作 1.1 根据芯片的命名规则确定要移植的型号的flash大小 其中用到的是芯片类型的flash的大小,比如STM32F103VBT6,表示flash大小的位为“B”,对应的是128k字节,由此可以该型号的flash大小。 1.2 根据flash大小选择合适的启动文件 ST官方提供了3个启动文件,分别适用于不同flash容量的STM32芯片,跟别为: startup_stm32f10x_ld.s 适用于小容量 产品 startu
[单片机]
STM32-不同芯片的<font color='red'>移植</font>
tmux在ARM上的移植
当使用超级终端或者Minicom通过串口去调试ARM的时候,只能使用一个终端,不能像在Linux PC机上同时打开多个终端,这为我们同时执行或者调试多个程序带来不便;当然你可以让某些程序在后台执行,但是有没有更好的办法呢? 在Linux PC机上我们可以使用GNU Screen对终端进行复用,不过GNU Screen移植到ARM还是比较困难的。而且还有比GNU Screen更好的终端复用器,就是我们今天要用到的tmux. 我选择移植的版本是tmux-1.2,从tmux-1.2开始,它依赖于libevent包,当然,它还依赖于ncurses. ncurses我之前都已经移植好了的,这里就不说了。 一
[单片机]
tmux在ARM上的<font color='red'>移植</font>
基于ARM9的嵌入式Linux代码移植
0 引言 随着计算机技术、通信技术以及Internet的飞速发展。嵌入式系统已得到越来越广泛的应用。与此同时,嵌入式系统的复杂性也在不断增加,嵌入式操作系统已经成为其中最重要的组成部分。目前,市场上存在着众多的嵌入式操作系统,而在这些系统之中,兼有Linux和嵌入式优点的嵌入式Linux操作系统,凭借其在结构清晰、源代码开放性、裁剪性好,开发与使用均易实现等方面的优势,拥有巨大的市场前景和商业机会。当前嵌入式Linux的一个热点应用就是将Linux内核移植到一些典型的微控制器和微处理器上,提供操作系统层面支持,以实现嵌入式系统用软件的开发。 此研究基于Linux 2.6内核的嵌入式Linux系统,分析了所面临的理论问题、关
[单片机]
基于ARM9的嵌入式Linux代码<font color='red'>移植</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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