历史上的今天
返回首页

历史上的今天

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

正在发生

2021年10月13日 | STM32中使用printf打印串口数据

2021-10-13 来源:eefocus

摘要

该方法适用于STM32,实现了使用printf等标准C流函数输出数据的办法,极大的减少了输出串口数据时所需要做的数据处理。


实现原理

在C库中,printf()等输出流函数都是通过fputc()这个函数实现的,所以我们通过重映射的方式,修改这个函数的定义使它输出在STM32的寄存器中,便可以实现使用printf()函数在STM32串口上输出数据的功能。


Keil环境 重映射

在STM32的Keil开发环境中,C的库函数有两种实现方式


使用标准的C函数库

就是我们平常在PC Window平台上用的C库函数,此库的的优点在于实现的功能全面。但是由于这个库基本上是专为PC设计的,故而如果在嵌入式芯片中调用时将会使得工程文件变得十分庞大。


将下列代码加入工程,无需使用#include调用即可生效。

/*

 * libc_printf.c

 *

 *  Created on: Dec 26, 2015

 *      Author: Yang

 *

 * 使用标准C库时,重映射printf等输出函数的文件

 *    添加在工程内即可生效(切勿选择semihost功能)

 */

 

#include

//include "stm32f10x.h"  

 

 

#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE

{

int handle;

 

};

FILE __stdout;

 

//定义_sys_exit()以避免使用半主机模式    

_sys_exit(int x)

{

x = x;

}

 

//重映射fputc函数,此函数为多个输出函数的基础函数

int fputc(int ch, FILE *f)

{

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

USART_SendData(USART1, (uint8_t) ch);

return ch;

}


使用MDK提供的 MicroLib

MicroLib is a highly-optimized library for ARM-based embedded applications written in C. When compared to the standard C library included with the ARM Compiler toolchain, MicroLib provides significant code size advantages required for many embedded systems.

                                           

摘自 Keil 官网介绍 < http://www.keil.com/arm/microlib.asp > 



基本就是说:Microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()。


同样的将下列代码加入工程,并在Keil设置中勾选Use MicroLib


/*

 * microlib_printf.c

 *

 *  Created on: Dec 26, 2015

 *      Author: Yang

 *   

 *    keil工程内勾选使用microlib时,重映射printf等输出函数的文件

 *    添加在工程内即可生效(注意:仅在使用microlib有效)

 */

#ifdef UART_PRINT

#include

//include "stm32f10x.h"  

 

//重映射fputc函数,此函数为多个输出函数的基础函数

int fputc(int ch, FILE *f)

{

// while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);    //修改此处的while循环条件

// USART_SendData(USART1, (uint8_t) ch);                           //与寄存器,以修改输出端口

return ch;

}

//输入函数,如上

int GetKey (void)  

// while (!(USART1->SR & USART_FLAG_RXNE));                  //如上

// return ((int)(USART1->DR & 0x1FF));

}

#endif

GCC环境 重映射

在GCC开源开发环境中,则可以调用nano_printf.c 等多种方式重映流函数输出端口

推荐阅读

史海拾趣

GarrettCom公司的发展小趣事

背景:GarrettCom始创于1989年,专注于工业网络通信产品的研发与制造。在那个工业自动化初具规模的年代,GarrettCom凭借其卓越的产品质量和创新的解决方案,迅速在市场中崭露头角。公司推出的工业以太网交换机和路由器等产品,以其高稳定性和可靠性,赢得了众多工业客户的信赖。

发展:随着工业自动化程度的不断提升,GarrettCom不断加大研发投入,推出了一系列适应恶劣工业环境的产品。这些产品不仅满足了工业自动化对通信稳定性的严苛要求,还推动了工业通信技术的进步。通过不断的技术创新和市场拓展,GarrettCom逐步确立了其在工业通信领域的领先地位。

乐鑫(espressif)公司的发展小趣事

面对物联网行业的快速发展和变化,乐鑫科技始终保持前瞻性的战略眼光。公司积极布局未来市场,加大在人工智能、云计算等领域的研发投入,以满足客户对更智能化、更高效的物联网应用的需求。同时,乐鑫科技还注重培养和引进优秀人才,为公司未来的发展提供有力的人才保障。

请注意,以上内容仅为概述性质的故事框架,具体细节和数据可能需要根据实际情况进行调整和补充。

EiKO Global LLC公司的发展小趣事

随着智能家居和物联网技术的兴起,EiKO开始积极探索智能照明系统的研发与应用。公司投入大量研发资源,将传统照明产品与智能控制技术相结合,推出了具有远程控制、定时开关、色温调节等功能的智能照明系统。

这些智能照明系统不仅提高了用户的使用体验,还为用户带来了更加便捷和智能的生活方式。例如,用户可以通过手机APP远程控制家中的照明设备,实现定时开关和色温调节等功能;同时,智能照明系统还可以与智能家居系统相连接,实现与其他智能设备的联动控制。

HANA Micron公司的发展小趣事

除了工业检测仪表外,Hama在家用视听设备领域也取得了显著成就。公司推出的哈曼卡顿音响系列,以其卓越的音质表现和时尚的外观设计,迅速成为消费者心中的首选品牌。这些家用视听设备不仅为消费者带来了高品质的视听享受,也进一步丰富了Hama的产品线,提升了公司的市场竞争力。随着消费者对高品质生活的追求日益增强,Hama的家用视听设备业务有望继续保持快速增长。

台湾凌通(Generalplus)公司的发展小趣事
检查控制电路中的其他元件(如继电器、晶体管等)是否工作正常,有无损坏或接触不良的情况。
Dialog公司的发展小趣事

Dialog公司在高能效系统电源管理领域积累了丰富的经验和知识,并形成了包括音频、短距离无线、AC/DC电源转换和VoIP技术在内的技术积累。这些技术积累为Dialog公司提供了强大的研发实力,使其能够迅速开发出面向各类个人便携式应用的集成电路(IC)。这些设备包括智能手机、平板电脑、超极本、数字无绳电话等。

问答坊 | AI 解惑

浅谈数字信号处理器

浅谈数字信号处理器   刘银碧  卢 彬  王 亮 摘  要:本文对数字信号处理器进行了概括和分析,涉及了数字信号处理器的发展,并结合其软硬件特点,讨论了数字信号处理器的优势,提出了数字信号处理器现阶段所面临的问题和挑战。 ...…

查看全部问答>

福布斯电脑革命史

杰弗里·扬   电子组装产品和微型电子计算机 20世纪用年代末,随着太空竞赛日趋激烈,电子时代的步伐加快,微处理器使得电子电路的集成成为可能,而新一代的美国青年也成长起来了。他们将成为电子技师,出于他们无比痴迷的电子爱好,他们甚 ...…

查看全部问答>

SOP標準作業指導書培訓教材

SOP標準作業指導書培訓教材 …

查看全部问答>

分析各家2440开发板——初学者到底应该选怎么样的开发板?

作者:gooogleman     刚才一觉醒来,我就淘宝了一番,分析各家2440开发板的性价比。    首先抛弃那些土枪开发板,太低价格没有啥保障因素的。    从500~800的开发板,搜索一下,发现友善,飞凌,天嵌,占据了90% ...…

查看全部问答>

网络优化方案

利用中兴通讯软交换大容量综合接入媒体网关ZXSS10 M100/ZXMSG9000对汇接局进行改造,端局用户的数据管理和业务提供统一由SoftSwitch支持,降低了改造成本和工作量。   端局用户由汇接局和软交换提供各类业务,逐步完成替换老机型端局的 ...…

查看全部问答>

有研究tcpmp的么?想请教一下里面顶部的那个播放/暂停控件的位置在那修改?

有研究tcpmp的么?想请教一下里面顶部的那个播放/暂停控件的位置在那修改?我想把file,options,和播放,暂停,还有全屏等控件放在底部,就是那个时间进度条那....可是找不到具体代码的位置... 另外那个控件的大小只能是16和32两种相素选择,能不能改大一 ...…

查看全部问答>

有关FPGA求职方面的咨询

       我今年大四就快出去找工作了,想问问各位有经验的大姐,大哥们,哪些公司在FPGA方面有比较好的前景啊?还有如果可以的话能否说说去应聘FPGA工作时的面试和笔试经历或者遇到的一些试题,让我汲取一些你们宝贵 ...…

查看全部问答>

stm32DMA的buffersize意义与设置?

Buffersize 具体指代缓冲区的大小(多少字节大小的缓冲区)还是缓冲区的数目(多少个指定宽度(DMA_PeripheralDataSize 或DMA_MemoryDataSize)的缓冲区)呢? 手册中给出: Specifies the buffer size, in data unit, of the specified Cha ...…

查看全部问答>

单片机AD采集不准确

如图所示,左端经过电阻分压,然后经过电压跟随器和光耦后接PA0,但是采集的电压和计算的不同,而且采集的电压用于程序里也没有达到预想的效果,求用过的好心人给看看,谢谢。…

查看全部问答>