STM32串口通信中使用printf发送数据配置方法

发布者:古宝奇缘最新更新时间:2016-06-13 来源: eefocus关键字:STM32  串口通信  配置方法 手机看文章 扫描二维码
随时随地手机看文章
在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  串口通信  配置方法 引用地址:STM32串口通信中使用printf发送数据配置方法

上一篇:STM32串口通信中遇到有规律的乱码
下一篇:STM32串口第一个字节丢失问题的分析过程

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

stm32 adc的dma传输案例
dma不多说了,原理啥的网上一大推,源码也有注释,理解起来很容易 案例是传输adc的4个通道,需要多个或者其它的,照着修改就行。 #define ADC1_DR_Address ((u32)0x40012400+0X4C) //ADC数据的地址 u16 ADC_buf ; //DMA传输BUF void adc_dma_init() { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2
[单片机]
<font color='red'>stm32</font> adc的dma传输案例
STM32编码器接口,以及应用编程
Ⅰ 关于编码器 编码器的种类有很多,什么增量式编码器、绝对值编码器,有轴或者无轴编码器,电压输出、推拉输出、集电极开路输出等等。但不管什么类型的编码器,其目的都类似,得到转动的角度,角速度、位移等。 本文讲述常见的增量式编码器,增量式编码器也可以叫正交编码器,也就是说可以通过其A、B的相位知道编码器是正转,还是反转,还可以根据编码器参数得出旋转了多少角度等。 常见的增量式编码器A、B、Z三根线代表什么意思呢?使用过编码器的人不难理解,这里简单给初学者讲述一下: A、B两线提供相位相差90度的脉冲信号,用其来计算旋转的角度;Z线为过零点线,也就是说每转一转,经过某一点都会输出一个脉冲信号,主要用于“过零校正”,三
[单片机]
<font color='red'>STM32</font>编码器接口,以及应用编程
硬件电路的理论分析
背景 这几天研究的产品的核心算法是发射和接收的正弦信号的相位差检测。 在STM32F407处理器上,通过DMA+SPI通信对接收和发射信号进行高速采样。 设计算法计算接收和发射信号的相位差。 用delphi改了一个简单的调试用的上位机软件。 下位机通过串口将采集到的A/D值以及计算结果发送给上位机。 上位机将数据以图形界面显示出来,同时对计算结果进行统计分析,判断算法的正确性, 并根据分析结果调整参数。 花了两个晚上的时间,完成了上位机和下位机的算法设计、代码编写和调试。 用于产品调试的上位机软件界面 电路分析 今天晚上开始分析测试结果。 第一步是和硬件电路的理论分析进行比较。 客户设计的电路 输入信号的频率为4kHz
[单片机]
硬件电路的理论分析
寄存器版本的跑马灯操作流程(战舰开发板V3)
寄存器版本的跑马灯操作流程(战舰开发板V3) 跑马灯需要配置的IO口 PB5&PE5两个IO口。 需要配置的寄存器 RCC_APB2ENR外设时钟使能寄存器 GPIOx_CRL端口配置低寄存器 ODR端口输出寄存器 BSRR端口位设置/清除寄存器 BRR端口位清除寄存器 IO口寄存器说明 配置IO口的流程 Led.c #include led.h #include stm32f10x.h void LED_Init(void) // LED初始化函数体定义 { RCC- APB2ENR|=1 3; // 使能时钟 RCC- APB2ENR|=1 6; // 使能时钟
[单片机]
寄存器版本的跑马灯操作流程(战舰开发板V3)
STM32菜鸟成长记录---系统滴答定时器(systick)应用
1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。滴答中断?这里来简单地解释一下。操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。只要不把它在S
[单片机]
<font color='red'>STM32</font>菜鸟成长记录---系统滴答定时器(systick)应用
stm32之低功耗总结
四、写一写到底选择什么模式: 再看完几篇大神的文章之后,我觉得应该重新规划一下文章的描述方式,我们首先就要明白自己的目的是什么,然后看看自己的目的的最好结果和最差结果,然后分析自己目前的处境。最后才是选择方法途径,也许再明白自己和目标的局限性之后,才能更好的实现目标吧。 找到目标--------------》认清现状--------------》找方法 4.1、低功耗的目的和应用: 我们做低功耗目的可以说是相当简单,那就是省电,省下电量。 但是,省电只是一个特性,我们不能用这个特性来影响了主要的功能,所以stm提供了多种的省电方式。 我们先按照常见的产品来分低功耗的类型: 最不需要省电的:例如很多常备设备,比如那些要保
[单片机]
<font color='red'>stm32</font>之低功耗总结
如何开发与位置无关的 STM32 完整工程
1、前言 最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。这样的优势是能使同一个固件被烧在 STM32 Flash 里的不同位置, 而在系统 Bootloader 里只需要跳到相应的位置就可以正常执行固件代码。客户希望STM32 代码从 Flash 里执行,不复制到 RAM 里;客户希望是一个完整的映像,而不仅仅是其中某个函数做到了位置无关。 2、分析 在嵌入式场景下,不一定有操作系统。即使有操作系统,一般也是 RTOS。一般 RTOS没有一个通用的程序加载器。因此,存储位置无关的需求,在这时可以说无关紧要。但是,如果客户需要进行在线固件更新,例如 IoT 应
[单片机]
如何开发与位置无关的 <font color='red'>STM32</font> 完整工程
STM32单片机特性解析
STM32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、 低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名。其强大的功能主要表现在: 特性 1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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