历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-10-12 来源:eefocus

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


推荐阅读

史海拾趣

G-Mag Usa公司的发展小趣事

为了进一步提升市场竞争力,G-Mag在2015年启动了国际化布局战略。公司首先在欧洲市场设立了研发中心和销售中心,随后又逐步拓展到亚洲、非洲等多个地区。在国际化过程中,G-Mag注重本土化运营和品牌建设,根据不同地区的市场特点和消费者需求推出定制化产品和服务。同时,G-Mag还积极参与国际展会和交流活动,提升品牌知名度和影响力。通过国际化布局,G-Mag成功打开了全球市场的大门,实现了业务的快速增长和品牌的全球化发展。

CONEC公司的发展小趣事

为了进一步提升公司的竞争力和市场影响力,CONEC开始了国际化布局。1990年,康耐加拿大公司的成立,标志着公司迈出了国际化的重要一步。随后,CONEC在德国、捷克共和国、美国和波兰等地设立分公司或生产基地,形成了全球性的生产和销售网络。同时,公司还积极寻求与全球领先的电子企业和技术机构的战略合作,共同推动电子行业的发展。

EVERLIGHT公司的发展小趣事

在电子产品领域,品质是企业生存和发展的关键。EVERLIGHT一直将品质管理放在首位,建立了严格的质量控制体系。公司从原材料采购到生产过程,再到产品出厂,都进行严格的品质检测和监控,确保每一颗LED都符合高标准的质量要求。这种对品质的坚持让EVERLIGHT在市场上赢得了良好的口碑,也为企业赢得了更多客户的信任。

FINISAR公司的发展小趣事

在快速发展的过程中,FINISAR也面临着知识产权方面的挑战。公司曾多次与其他企业发生专利纠纷,并通过法律手段维护自身的合法权益。例如,在与易飞扬的专利战中,FINISAR通过诉讼和专利复审等方式,成功维护了自己的专利权益。这一系列专利战不仅展现了FINISAR在知识产权保护方面的决心和能力,也进一步提升了公司在行业内的知名度和影响力。

科山芯创(COSINE)公司的发展小趣事

面对未来,科山芯创有着清晰的规划和展望。他们将继续加大研发投入,不断推出更多高性能、高品质的芯片产品;同时,他们还将积极拓展国际市场,提升品牌影响力;此外,科山芯创还将加强与产业链上下游企业的合作,共同推动电子行业的创新与发展。

以上五个故事概述了科山芯创在电子行业中的发展历程和成就。作为一家专注于高性能、高品质射频及模拟集成电路芯片研发与设计的创新型企业,科山芯创以其强大的技术实力和优质的服务赢得了市场的认可和尊重。

艾华集团(AISHI)公司的发展小趣事

随着市场的不断变化和竞争的加剧,艾华集团意识到,要想在行业中立足并取得长远发展,必须走科技创新之路。于是,公司成立了多个研究院,专注于基础材料、产品、工业装备以及产品应用的研究。通过不断的科技创新和产品升级,艾华集团成功研发出了耐超高纹波和耐超强冲击电流的铝电容器技术,这一技术在市场上获得了广泛认可,赢得了飞利浦、欧司朗、GE等世界知名照明客户的青睐。

问答坊 | AI 解惑

关于MISRA-C,你知道多少?

学习MISRA C之一:“安全第一”的C语言编程规范 C语言是开发嵌入式应用的主要工具,然而C语言并非是专门为嵌入式系统设计,相当多的嵌入式系统较一般计算机系统对软件安全性有更苛刻的要求。1998 年,MISRA指出,一些在C看来可以接受,却存在安全隐 ...…

查看全部问答>

基于PDIUSBD12的USB设备固件程序开发

摘要:介绍了基于PDIUSBD12芯片的USB设备硬件组成,详细论述了USB枚举的具体过程和 基于PDIUSBD12的MCU固件编程思想,给出了部分单片机C程序代码,分析了制约实际数据传输速 率的原因,并提出了解决方法。…

查看全部问答>

EVC下如何实现程序自删除

搜了一些自删除的程序和思路,全都是PC的,在EVC下不能运行,请问有谁做过EVC下程序的自删除…

查看全部问答>

51单片机 扩展19根地址线的SRAM````怎么做?

小弟课题实验,512K*8的内存,采用19地址线的SRAM,不想借用P1口,因为还有别的用处```关于页面管理的方法也不是很懂``` 初步采用8255.但是没有什么概念```8155可以么? 在线等待,谢谢 …

查看全部问答>

【求助】为DELL PowerEdge 860添加硬盘,什么样的sata盘都可以吗?

被朋友托了下周去IDC为DELL PowerEdge 860的服务器加块硬盘,但之前我没有去过IDC. RT,想了解一下是不是什么样的sata盘都可以吗,需要单买盘架吗? 另外,去之前要注意些什么事情?…

查看全部问答>

pelco-d协议的特殊指令如何使用?

想做一个云台解码器,看到pelco-d的官方文档时,并没有发现有诸如“巡航”等功能的指令。那么这些功能要执行,究竟要接收到什么命令?还是这些指令的“解释权”由产品的厂家实现?望不吝赐教…

查看全部问答>

STM32内部内存SRAM如何化分一部分自定义使用

                                 现在想在STM32上的内存上化分一部分空间来自定义使用,不知如何做起,有哪位兄弟对这一块比较熟悉,望不吝赐教,谢 ...…

查看全部问答>

行列翻转法测矩阵键盘

以下用的是行列翻转法测矩阵键盘,下面只是一个子程序,但是不能实现功能。 我看别人写的程序都是用的行扫描法,理论上来说行列扫描也可以的。 请各位帮个忙查查错,我搞了几天了,实在弄不明白。 void keyscan(){ uchar h,l,temp; &n ...…

查看全部问答>

LM337电源模块电压变小

又到了一年一度的电子设计大赛时刻,可是电源模块实在是最简单,又是最基础最重要的模块。 目的:希望用线性稳压芯片LM337.LM317搭建可调模块,它具有纹波小,效率低特点 问题:搭建的LM317电路接负载时,输入正常,电压幅度不变。搭建的LM337电 ...…

查看全部问答>