历史上的今天

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

正在发生

2019年10月12日 | STM32F103学习笔记——串口通信

发布者:丹青妙手 来源: eefocus关键字:STM32F103  串口通信  printf  发送数据 手机看文章 扫描二维码
随时随地手机看文章

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


二、第二种方法是在工程中添加“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 。


关键字:STM32F103  串口通信  printf  发送数据 引用地址:STM32F103学习笔记——串口通信

上一篇:STM32波特率设置
下一篇:DMA+ADC单通道转换、多通道转换

推荐阅读

OTA未来会成为智能驾驶汽车的最基本架构?(未来如果汽车厂没有OTA的解决方案,三年内就很容易就被边缘化,因为无法持续更新软件、没有办法做双向的沟通跟交流,没有办法组成有用的服务跟应用供车主使用。)OTA架构的技术要点?是否有标准?何时会大规模普及?车企的应对策略? 随着数字化和软件渗透到人们生活的各个角落,作为交通工具的汽车也逐渐往一...
是德科技日前宣布,该公司旗下的 5G 一致性测试解决方案已被必维集团选中。此举将助力必维集团在全球范围实施 5G 新空口(NR)设备认证。是德科技是一家领先的技术公司,致力于帮助企业、服务提供商和政府客户加速创新,创造一个安全互联的世界。 必维集团消费品服务事业部选择了 Keysight 5G 网络仿真解决方案,用以执行 3GPP 5G NR 标准所规定的 5G ...
1 J-link和ST-link的兼容性STM8只能用ST-link。J-link兼容所有的(大部分而已)的ARM内核ICmark: https://bbs.eeworld.com.cn/thread-431094-1-1.html其实不在线编译的话,可以选择串口和usb烧录,还有IAP(最近有看到项目用这个)2搭建开发环境STM8只能用ST 自己的软件 STVD 听说IAR也可以,但是很麻烦。(去官网下载,不需要破解)mark: https...
几周前,Apple发布了iPhone 13,搭载了最新的A15芯片。但Apple对A15的宣传有点奇怪,主要是因为Apple没有将A15与A14之间进行任何代际比较,而只进行了竞品的简单对比,虽然Apple这样做并非罕见,但在今年的iPhone发布会上,这一点似乎比往常更突出。 我们看一下A15的几个具体细节,CPU采用了新的设计、更快的Neural Engine,新的4核/5核GPU、新的display...

史海拾趣

问答坊 | AI 解惑

MagicARM2410原理图

MagicARM2410原理图…

查看全部问答∨

基于51单片机的低频信号发生器设计

Proteus版本7.1,可以在迅雷搜狗里面搜,可以下载。 里面附源程序 [ 本帖最后由 cqzy6666 于 2009-4-10 20:39 编辑 ]…

查看全部问答∨

初学者找单片机开发板,仿真器资料这里来

北京三恒星科技公司(www.sanhengxing.com)是一家专门研发DSP/EDA/ARM开发板、仿真器、实验箱,从事单片机硬件和软件应用及教育的企业,承接单片机项目、电子产品设计开发板的开发(包括DSP、ARM、EDA、51单片机编程器,仿真器等系列产品),并整理了 ...…

查看全部问答∨

s3c2440的片外norflash

从Nandflash启动的Bootload已经可以运行了,现在我想在做一个Norflash上的Bootload。从s3c2440的datasheet里面看,boot internal sram(4kb)的地址是0x40000000,所以我在用ADS调试Bootload的时候,ro地址只能设置为这个才能运行。我的疑问是,为 ...…

查看全部问答∨

S3C2450在wince5.0下用mediaplayer播放MP4的疑问?

硬件:S3C2450 主频400/533M,RAM:256M DDR2,LCD:7寸,分辨率800×480 OS:WINCE5.0 这样的环境下,用WINCE自带的MediaPlayer,能否流畅播放MP4? 7寸屏是固定的,播放视频时可适当下调整显示分辨率,不知道最大能流畅播放多少分辨率的视频! 考 ...…

查看全部问答∨

在c语言中const能这样用吗?

const   main_item_dealer_arr[] = {         menu_set_time,                                  ...…

查看全部问答∨

《2011应届理工学生求职宝典》免费赠送

应届工科生求职宝典           ——凌阳教育教你五步顺利就业         曾经有一份珍贵的“宝典”摆在我面前,我没有好好珍惜,今天凌阳教育出了新“宝典 ...…

查看全部问答∨

发送固定个数脉冲的方法

需要输出500hz的方波,但是只输出20个周期。 我自己的方案,使用定时器输出500hz的方波,利用系统滴答始终计数40ms,然后关闭定时器。(此方案有个问题,经常会出现,定时器不工作的时候,一直处于高电平。) 在网上看到有用两个定时器,一 ...…

查看全部问答∨

ST菜菜请教:IARforSTM8和ST-LINK联机要怎样设置

                                 ST菜菜请教:IAR for STM8 和 ST-LINK联机要怎样设置?…

查看全部问答∨

LM3S AD寄存器貌似有BUG

各种AD例程里面几乎都有一句 while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );      /*  等待FIFO 0为非空,即等待转换*/ 这个ADC_O_X_SSFSTAT的宏定义附近是…… #define ADC_O_EMUX    ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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