历史上的今天
返回首页

历史上的今天

今天是:2025年04月23日(星期三)

正在发生

2021年04月23日 | STM32串口通信中使用printf发送数据配置方法

2021-04-23 来源:eefocus

STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)


标签: STM32 串口通信 printf方法 2011-06-29 23:29


在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。




下面就说一下使用printf需要做哪些配置。




有两种配置方法:


一、对工程属性进行配置,详细步骤如下


1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。


2、在main文件中重定义函数 如下:


// 发送数据


int fputc(int ch, FILE *f)


{


USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USART2 等


while (!(USART1->SR & USART_FLAG_TXE));


return (ch);


}


// 接收数据


int GetKey (void) {


while (!(USART1->SR & USART_FLAG_RXNE));


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


}


这样在使用printf时就会调用自定义的fputc函数,来发送字符。


3、在工程属性的 “Target" -> "Code Generation" 选项中勾选 "Use MicroLIB"”


MicroLIB 是缺省C的备份库,关于它可以到网上查找详细资料。




至此完成配置,在工程中可以随意使用printf向串口发送数据了。




二、第二种方法是在工程中添加“Regtarge.c”文件


1、在main文件中包含 “stdio.h” 文件


2、在工程中创建一个文件保存为 Regtarge.c , 然后将其添加工程中


在文件中输入如下内容(直接复制即可)


#include


#include


#pragma import(__use_no_semihosting_swi)


extern int SendChar(int ch); // 声明外部函数,在main文件中定义


extern int GetKey(void);


struct __FILE {


int handle; // Add whatever you need here


};


FILE __stdout;


FILE __stdin;


int fputc(int ch, FILE *f) {


return (SendChar(ch));


}


int fgetc(FILE *f) {


return (SendChar(GetKey()));


}


void _ttywrch(int ch) {


SendChar (ch);


}


int ferror(FILE *f) { // Your implementation of ferror


return EOF;


}


void _sys_exit(int return_code) {


label: goto label; // endless loop


}




3、在main文件中添加定义以下两个函数


int SendChar (int ch) {


while (!(USART1->SR & USART_FLAG_TXE)); // USART1 可换成你程序中通信的串口


USART1->DR = (ch & 0x1FF);


return (ch);


}


int GetKey (void) {


while (!(USART1->SR & USART_FLAG_RXNE));


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


}


至此完成配置,可以在main文件中随意使用 printf 。


推荐阅读

史海拾趣

HEICO Corporation公司的发展小趣事

自1957年成立以来,HEICO Corporation不断扩展其电子技术领域的业务。公司电子技术部门专注于设计、制造电子、数据和微波以及光电产品,涵盖了从红外模拟和测试设备到激光测距接收器、电源转换产品等多个方面。这种多元化的产品组合不仅满足了航空、国防等行业的特定需求,也逐渐在医疗、电信等电子行业中占据了一席之地。通过持续的技术创新和研发投入,HEICO在电子市场上建立了稳固的地位。

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

在快速发展的电子行业中,FTDI始终保持着高度的警惕性和创新精神。面对假冒芯片的威胁,公司采取了强有力的打击措施以维护用户权益和市场口碑。同时,为了更好地满足市场需求,FTDI不断加强技术团队建设,引进经验丰富的工程师和有潜力的大学毕业生,不断提升自身的研发实力和技术水平。此外,公司还密切关注市场动态和技术趋势,以便及时调整战略方向并推出具有竞争力的新产品。通过这些努力,FTDI在电子行业中持续保持着领先地位。

DURACELL公司的发展小趣事

为了进一步扩大市场份额和品牌影响力,DURACELL公司积极寻求品牌授权合作。通过在全球范围内与相关企业进行合作开发,DURACELL公司成功将品牌延伸到更多领域和地区。这种合作模式不仅为DURACELL公司带来了更多的市场机会,也推动了整个电池行业的发展。

FORYARD公司的发展小趣事

面对日益激烈的市场竞争和客户需求的变化,FORYARD决定实施智能制造转型。公司投入巨资引进先进的自动化生产线和智能管理系统,实现了从原材料采购、生产加工到成品检验的全流程智能化管理。这一转型不仅大幅提高了生产效率和产品质量,还降低了人力成本和运营成本。同时,FORYARD还积极拥抱工业互联网和大数据等新技术,通过数据分析优化生产流程、预测市场需求,进一步提升了企业的竞争力和市场响应速度。

Applied Engineering Products (AEP)公司的发展小趣事

随着公司规模的扩大和产品种类的增多,AEP公司意识到质量管理的重要性。公司引进了一套先进的质量管理体系,从原材料采购、生产过程到产品出厂,每一个环节都进行严格的质量控制。同时,公司还加强了对员工的培训和管理,确保每一名员工都能严格按照质量标准进行操作。这一举措大大提高了AEP公司的产品质量和客户满意度,为公司的长期发展奠定了坚实基础。

风华(FH)公司的发展小趣事

随着光伏胶膜业务的快速发展,福斯特面临着仓库管理和存储的巨大挑战。光伏胶膜成品体积大、重量重,传统人工作业方式效率低下且劳动强度大。为了应对这一挑战,福斯特引入了智能仓储系统,与亨通智能合作打造自动化立库系统。该系统通过堆垛机、RGV、缠绕膜等设备的配合使用,实现了库内产品的全面自动化搬运、存储与管理。这不仅大大提高了仓库的运营管理效率,还确保了产品的先进先出和库存盘点的准确性。这一智能化改造不仅提升了福斯特自身的竞争力,也为整个光伏行业的数字化转型树立了标杆。

问答坊 | AI 解惑

大开眼界---看看国外工程师们的AVR单片机设计实例---连载中

这是从国外一个网站上摘抄的AVR单片机设计实例。网址是http://www.avrfreaks.net。 由于本人英文水平很烂,技术水平也很烂。所以翻译的不好,请大家原谅。 另外高手们可以直接到这个网站看看,如果我翻译的不对,请指出来。感谢大家! 先给出5 ...…

查看全部问答>

高分请教:关于驱动和应用程序通信的问题

最近一直被一个问题困扰   我的驱动一用createFile访问就会蓝屏~~        我的CreateFile的第一个参数是符号连接名+管道号:                \\\\.\\\\\\\\Sym ...…

查看全部问答>

socket的type字段能不能填写自定义的类型

  socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Sock ...…

查看全部问答>

ADS1.2可以生成.a吗,怎样生成

ADS1.2可以生成.a吗,怎样生成   请高手看看,谢谢了…

查看全部问答>

收到eZ430-RF2500板子,做工很精致!

今天收到了免费试用eZ430-RF2500板子,做工非常精细,相当不错得板子,由于没有摄像头没发传图片,等改天再上传。现在得赶快学430,又一个新得芯片,抓紧努力赶,希望能在一个月里有所收获,尽力把板子留下,也希望高手帮忙,有不会得还要麻烦大家 ...…

查看全部问答>

请香主看看:关于stm32定时器捕获

我想要实现如下功能:要用stm32自带的AD测量交流信号的一个周波32个点。思路是这样子的:先用TIM4来检测交流信号的过零点,我准备用TIM4的捕获功能,当信号有上升沿时,捕获,此时会进入中断程序(在定时器配置的时候已经开了捕获中断),在中 ...…

查看全部问答>

STM32时钟系统

在keilZ中添加了启动代码   抱歉对汇编不太了解     IMPORT  SystemInit        IMPORT  __main            & ...…

查看全部问答>

关于FPGA与IDE你知道多少?

真不知道这个问题放在哪个版块,因为这个项目于FPGA有关就暂时放在这里吧!      今天临时接到一份任务,需要查找有关PATA接口设计的问题,在网上看到很多资料,才发现硬盘接口有多种,分为IDE、SATA、SCSI、光纤通道和SAS五 ...…

查看全部问答>

电源管理

跟着老师做项目,有个DC电池组合电源24V需要检测它在运作过程中的剩余容量,有什么好的电源管理芯片推荐,或者有什么好的方案?感激不尽。 我的想法大概是这样的,电池出来直接通过一个电源管理芯片,之后电源芯片输出接入单片机引脚,随着电池容 ...…

查看全部问答>

【DIY手机】1、原理图设计完成

从看到版主帖子那天就开始准备,买元件,查参数,画原理图,间或做事,断断续续,今天抽点时间总算把原理图画完了,还没有测试,所以可能有错误和纰漏,后续再修正吧。 还没决定打板还是自己焊接测试,先要有时间,最近在赶项目,只能一步步来了。 ...…

查看全部问答>