stm32串口通信用printf发送数据配置

发布者:逍遥游侠最新更新时间:2023-09-06 来源: elecfans关键字:stm32  串口通信  printf  发送数据 手机看文章 扫描二维码
随时随地手机看文章

  开发环境:Keil RVMDK

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


  有两种配置方法:

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

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

  [size=12.8000001907349px]2、在main文件中重定义《fputc》函数 如下

  // 发送数据

  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的备份库,关于它可以到网上查找详细资料。

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

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

  [size=12.8000001907349px]2、在工程中创建一个文件保存为 Regtarge.c , 然后将其添加工程中在文件中输入如下内容(直接复制即可)

  #include 《stdio.h》

  #include 《rt_misc.h》

  #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

  }

  [size=12.8000001907349px]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  发送数据 引用地址:stm32串口通信用printf发送数据配置

上一篇:基于STM32的实收实发超声波检测系统研究
下一篇:STM32F3 MCU外围元器件及晶振选型参考

推荐阅读最新更新时间:2024-11-11 18:51

STM32 Systick定时器
Q:什么是SYSTick定时器? SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 Q:为什么要设置SysTick定时器? (1)产生操作系统的时钟节拍 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 (2)便于不同处理器之间程序移植。 Cortex‐M3处理器内部包
[单片机]
数据中心能耗采集装置的设计
1 引言 随着数据中心的迅猛发展,数据中心的能耗问题也越来越突出,有关数据中心的能源管理和供配电设计已经成为热门问题,高效可靠的数据中心配电系统方案,是提 高数据中心电能使用效率,降低设备能耗的有效方式。要实现数据中心的节能,首先需要对每个用电负载实现精确的监测,而数据中心负载回路非常的多,传统的测 量仪表无法满足成本、体积、安装、施工等多方面的要求,因此需要采用适用于数据中心集中监控要求的多回路监控装置。 本文所要介绍的是一种适 用于数据中心精密电源配电柜使用需求的测量装置的设计方法,该装置适用于单路输入、单段输出、单点检测;双路输入、单段输出、单点检测;双路输入、单段输 出、双点检测的系统电源输入方式。能够精确地测量配电系统各项
[单片机]
<font color='red'>数据</font>中心能耗采集装置的设计
STM32 时钟配置之寄存器操作
1 时钟 1.1时钟树 Stm32 的时钟配置必须要参考时钟树,时钟树决定了时钟的配置的路径,兼着参考RCC寄存器就可以配置不同的时钟频率了。另外STM32外部晶振推荐为8M,所以用外部时钟时最好采用推荐值。 1.2 时钟配置 程序刚启动的时候,stm32采用的为内部高速时钟,通过上图的时钟树可以发现内部8M时钟通过SW成为系统时钟。RCC_CR的复位值为0x000XX83,展开后为HSION为1,也印证了时钟默认为内部高速时钟。如果需要采用外部时钟,需要按照如下的方式配置。 1、时钟初始化,即将时钟的寄存器采用默认值。 2、开始外部时钟且外部时钟起震准备就绪。 3、设置PLLXTPRE(只能在关
[单片机]
<font color='red'>STM32</font> 时钟配置之寄存器操作
如何使用STM32的PVD对电源的电压进行监控
用户在使用STM32时,可以利用其内部的PVD对VDD的电压进行监控,通过电源控制寄存器(PWR_CR)中的PLS 位来设定监控的电压值。 PLS 位用于选择PVD监控电源的电压阀值: 000:2.2V 001:2.3V 010:2.4V 011:2.5V 100:2.6V 101:2.7V 110:2.8V 111:2.9V 在电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD设定的电压阀值。该事件连接到外部中断的第16线,如果该中断在外部中断寄存器中被使能的,该事件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第1
[单片机]
STM32的DAC输出驱动电压
目的 项目中的模块对输出电压的改变来控制功率、所以考虑用stm32内部的DAC来输出电压作为驱动。 源代码 #include dac.h void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitType; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPI
[单片机]
STM32中flash的读写详解
一:对STM32内部FLASH写进行编程操作,需要遵循以下流程:   1.FLASH解锁   2.清除相关标志位   3.擦除FLASH(先擦除后写入的原因是为了工业上制作方便,即物理实现方便)   4.写入FLASH   5.锁定FLASH (1)获取状态:FLASH_Status FLASH_GetStatus(void); 返回值是通过枚举类型定义的。 typedef enum { FLASH_BUSY = 1, //忙 FLASH_ERROR_PG, //编程错误 FLASH_ERROR_WRP, //写保护错误 FLASH_COMPLETE, //操作完成 FLASH_TIMEOUT /
[单片机]
STM32——JLINK下载器刷固件
在使用JLINK下载器期间,出现JLINK突然不能使用,指示灯不亮,曾以为板子烧坏,多次出现此故障后,故此上网寻查,一探究竟。 刚上百度,发现众人也有此现象。 原因:山寨版的jlink会出现固件丢失。 解决方法:重新刷固件。 刷固件方法: 链接:http://pan.baidu.com/s/1pLAvwj5 密码:myt1 不同版本JLINK,刷固件引脚位置可能不同,无须担心,多尝试几次,直至成功!
[单片机]
stm32 Flash读写
通过对stm32内部的flash的读写可以实现对stm32的编程操作。 stm32 的内置可编程Flash在许多场合具有十分重要的意义。如其支持ICP特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写;支持IAP特性使得开发人员可以在stm32运行程序的时候对其内部程序进行更新操作。对一些对数据安全有要求的场合,可编程FLASH可以结合stm32内部唯一的身份标识实现各种各样的防破解方案。并且stm32的FLASH在一些轻量级的防掉电存储方案中也有立足之地。 stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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