STM32printf函数实现方法

发布者:Jinghua6666最新更新时间:2018-12-29 来源: eefocus关键字:STM32  printf函数  实现方法 手机看文章 扫描二维码
随时随地手机看文章

这几天学习stm32发现利用keil不能正常使用printf函数,所以我去网上找了一下,这是一个网易博主的解决办法,亲测有效:


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


在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 。


关键字:STM32  printf函数  实现方法 引用地址:STM32printf函数实现方法

上一篇:STM32 FreeRTOS 外部中断服务函数注意事项
下一篇:中断中处理延时及一些函数的调用规则

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

STM32笔记 (九)串口通讯USART(串口发送接收编程)
简介 串口USART(Universal Synchronous Asynchronous Receiver and Transmitter)也叫通用同步异步收发器,是单片机与外部进行信息交互的重要通信接口,属于单片机的一种外设,几乎所有单片机都支持使用串口通讯,同时也是单片机程序调试的一种重要手段,对于STM32,串口资源非常丰富,功能也比较齐全,以STM32F103ZET6为例,就提供了5路的串口,我们一般用把串口用来在电脑的串口调试工具上打印调试信息,从而了解程序运行是否正确、如果出错的话也能知道是哪里出了错误。 通讯的有关概念 并行通讯 并行就是采用多条数据线进行通讯 优点是传输速度快,缺点是占用的引脚资源多 串行
[单片机]
<font color='red'>STM32</font>笔记 (九)串口通讯USART(串口发送接收编程)
STM32——PWM基本知识及配置过程
将通用定时器分为四个部分: 1,选择时钟 2,时基电路 3,输入捕获 4,输出比较 本节定时器PWM输出主要涉及到定时器框图右下方部分,即输出比较部分 和上一讲相同,时基时钟来源于内部默认时钟 对此有疑问请参考 : 定时器中断实验 中 定时器时钟选择部分 和 定时器时钟来源部分 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 PWM工作过程 每个定时器有四个通道,每一个通道都有一个捕获比较寄存器, 将寄存器
[单片机]
<font color='red'>STM32</font>——PWM基本知识及配置过程
STM32单片机学习(5) 定时器中断实验
/* * * 软件功能: 定时器中断实验 * */ #include stm32f10x.h #include delay.h void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); void TIM3_Configuration(u16 arr,u16 psc); /* 函数: int main(void) 功能: main主函数 参数: 无 返回: 无 / int main(void) { RCC_Configuration(); GPIO_Configuration(); NVIC_Co
[单片机]
stm32 读写flash 学习笔记
在读写flash时要注意对齐,以及最少一个字节! 比如读写地址如这个区间:0x08010800---------0x0801200f (0----f 为16个位,即2个字节!)-----------正确的地址区间 0x08010800---------0x0801300f 0x08010800---------0x08012d0f 假如地址为:(0x08010800---------0x0801200d )------------------错误的地址区间 ,此时写flash时就会出错。主要原因我的flash写函数是按照字去写的!
[单片机]
关于CH340在STM32实现一键下载电路的研究
在做基于STM32的多功能MP3播放器的课题时,在程序下载这部分时借鉴了正点原子开发板上的一键下载电路,采用CH340G这款芯片设计。 在画PCB初期原理图部分,对采用CH340G设计的一键下载电路不甚了解,于是花了一些时间来研究一下这个电路。 引用正点原子的一键下载电路: 我们通过RTS#和DTR#两个输出信号来控制STM32 IC的BOOT0和BOOT1两引脚来选择启动模式,如下表: 当烧写程序时,我们希望BOOT0=1,BOOT1=0。当烧写完成后我们希望BOOT0=0,BOOT1=0(这个模式BOOT1可以是0可以是1,这里我们让BOOT1拉低,即整个过程BOOT1都为L接地,简化电路设计)。这里我们只需
[单片机]
关于CH340在<font color='red'>STM32</font>实现一键下载电路的研究
现场总线集成于DCS的3种实现方法分析
  新的基于现场总线技术的控制策略和网络结构将对现有的仪表及控制系统产生革命性的影响。从现场总线技术的本质特征上分析了其对传统分散控制系统DCS的冲击,并结合dcs的网络结构特点,给出了现场总线集成于dcs的3种实现方法。   工业控制从早期的就地控制、集中控制,已经发展到现在的集散控制(dcs),在过去的20年中,过程工业对dcs系统及相关的仪表装置进行了大量的投入,dcs系统的应用结果得到了用户的肯定。4-20mA信号是dcs系统及现场设备相互连接的最本质特点,这是控制系统和仪表装置发展的一大进步。   然而现在,数字化和网络化成为当今控制网络发展的主要方向。人们意识到传统的模拟信号只能提供原始的测量和控制信息,而智能变送器
[嵌入式]
stm32专题十一:USART(五)USART发送命令解析
通过串口,用电脑发数据给单片机来控制单片机实现相应的功能,能够实现简单的人机交互。 很简单,通过getchar()接收,然后switch...case...来实现不同的功能。值得注意的是,串口发送接收的均为字符。 #include stm32f10x.h #include bsp_led.h #include bsp_usart.h #include stdio.h void delay(uint32_t count); int main(void) { uint8_t ch; USART_config(); LED_GPIO_Config(); printf( 串口发送数据
[单片机]
STM32 IO模拟串口程序
  随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的单片机只提供一个串口,那么另一个串口只能靠程序模拟。   1、串口传输协议   首先,必须要知道串口通讯时数据是怎样传输的?这里以异步传输字符为例子,如下图所示:      一般字符传输都采用:1位起始位,8位数据位,1位停止位,没有校验位 的形式传输,其他形式的这里不讲。串口异步传输在空闲状态时都必须是高电平。第一位传输的是起始位,起始位会将原来空闲时的高电平拉成低电平,起
[单片机]
<font color='red'>STM32</font> IO模拟串口程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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