历史上的今天
返回首页

历史上的今天

今天是:2024年09月27日(星期五)

正在发生

2019年09月27日 | STM32学习之旅② 固件库的使用及工程模板的建立

2019-09-27 来源:eefocus

一、认识其本质

STM32在进入中国市场的时候,商家为了迎合中国市场,翻译了很多英文文献,所以STM32相对与其他单片机的资料是相对丰富的,这也是很多人推崇STM32的原因,这对于我们学习来说也是相当不错的,但是由于翻译版本很多,注意以官方版本为准,在看文档发现不对时应该参考官方文档


固件库其实是官方为了加快开发速度,帮助用户快速上手芯片,进行二次开发而研究出来的,它的出现大大缩短了芯片开发周期


二、为什么要使用固件库

(一)基于寄存器的编程(传统编程方式)

好处:开发者可以了解单片机较为底层的寄存器,了解程序在硬件上的具体实现方式,便于纠错。

不足:

移植性差:由于单片机通常由很多外设,而不同型号的的单片机的寄存器操作方式都有所不同,当进行移植是需要修改的内容很多,工作量大。

效率低下:由于单片机内部资源丰富,需要设置的寄存器非常多,需要花很长的时间查阅用户手册才能完成。

(二)基于固件库的编程

极大缩短了开发周期,从而减少了开发成本


不用深入底层底层便可以灵活规范地操作每一个外设,使编程思维更清晰,有利于开发人员将精力集中在顶层设计上


具有可重入性,便于移植,便于二次开发


固件库的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。


另外,STM32的固件库是开源的,它的源码可以供我们学习参考,参考其如何使用c语言去实现一些复杂的功能。

三、所需材料

获取STM32官方固件库,从网盘获取, 密码:8sgn


如何从ST官网获取芯片的相关文档手册,中文版 ,密码:wupy


四、模板创建

(一)工作区和工程的建立

File->New Workspace


Project->Create New Project

这里写图片描述

建立工程文件夹

这里写图片描述
这里写图片描述

File->Save Workspace

这里写图片描述

最后是这样

这里写图片描述

(二)STM32固件库的介绍


固件库的文件结构:下表简述了固件库文件内容及作用

这里写图片描述
这里写图片描述

image.png?imageView2/2/w/550

固件库的文件结构


另一位博主的详解

(三)工程模板的建立及移植

1.复制工程源码

虽然STM32 固件库里面提供了很多例程给我们,但是都是基于ST 官方发行的一些评估板的,在实际应用当中,我们可能由于某些原因,不可能和官方评估板做的一模一样,因此需要在STM32 标准例程的基础上,进行移植和修改。


建立层叠的文件夹,便于源码的管理,在根文件夹里面建立“USER”,“CMSIS”,“FWLIB”,“DRIVER”几个文件夹,如下图所示。其中,“USER”文件夹,主要存放用户应用程序和中断文件,如main.c 等等;“CMSIS”主要存放内核和系统相关的代码;“FWLIB”主要存放STM32 标准外设的驱动代码,“DRIVER”主要存放用户的驱动代码

这里写图片描述

复制相关文件至建立的模板文件夹。需要复制的文件夹如下表(小技巧:同时打开固件库文件夹和模板文件夹,找到文件后直接ctrl+c、ctrl+v就OK了):

这里写图片描述

2.添加工程源码

我们最基本的源码文件已经复制到我们建立的工程文件夹里面,接下

来要做的就是在IAR 里面创造代码管理文件夹,以及将相关的代码添加到文件夹

里面。

在IAR中添加管理文件夹,打开建立好的工作区

这里写图片描述

右键工程名->Add->Add Group…输入文件夹名称->OK,需要建立的文件夹如下图所示

这里写图片描述

添加所需的文件,Add->Add File,需要添加的文件如下图


这里写图片描述

最后是这样


这里写图片描述

关于启动文件的选择

这里写图片描述

3.IDE的配置

第一次编译:Project->Make,然后是一堆错误,如下:

这里写图片描述

我们看到这些错误大多是 cannot open source file "stm32f10x_spi.h" ,编译器告诉为们找不到对应的头文件。解决方案是在option中添加对应的头文件,右键工程名->Option…->Category->C/C++ Compiler->Preprocessor->在“Additional include directories:”输入头文件的包含路径:

$PROJ_DIR$

$PROJ_DIR$CMSIS

$PROJ_DIR$FWLIBinc

$PROJ_DIR$USER


每一行里面用回车隔开,IAR是支持相对文件路径的,但是要使用$PROJ_DIR$,$PROJ_DIR$即代表根目录文件夹“STM32F10X Template”。

这里写图片描述

第二次编译,还是有很多错误,仔细观察可以发现,错误大多是 "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)" ,请选择芯片的型号

这里写图片描述

双击错误,条船到如图所示的地方

这里写图片描述

用Find功能找到其定义的地方

这里写图片描述

这其实是预编译处理,需要用户指定需要使用的芯片型号,解决方案是在Options中进行预编译处理,Options->Category->C/C++ compiler->Preprocessor->在“Defined Symbol”里面定义所需要的芯片容量,添加STM32F10X_MD,如下图:


这里写图片描述

第三次编译,编译器告诉我们没有包含“core_cm3.h”文件,解决方案是解决方式还是两种,一是为将库函数里面的core_cm3.h文件加入进工程。但是这样编译可能会出现其他错误,因此直接使用第二种方法,即使用IAR 自带的core_cm3.h文件。Option->General Option->Target里面选择芯片型号,接着在在Option->General Option->Library Configuration里面勾选“use

CMSIS”,点击“OK”,如下图所示:

这里写图片描述
这里写图片描述
这里写图片描述

第四次编译,编译器告诉我们缺少main.c文件,解决方案File->New File->File->Save->命名为main.c->右键USER->Add->Add “main.c”,打开main.c,添加如下代码

#include "stm32f10x.h"

int main()

{

    return 0;

}

这里写图片描述

这里写图片描述

第五次编译,0错误

这里写图片描述

尽管错误已经没有了,但是当我们调用驱动库去操作外设的时候还是发现有问题,将以下代码添加到main.c文件中,Make,如下图

#include "stm32f10x.h"

#include "stm32f10x_gpio.h"

int main()

{

    GPIO_SetBits(GPIOA,0);

    return 0;

}

这里写图片描述

这是因为使用驱动库的宏没有打开,解决方案:Options->Category->C/C++ compiler->Preprocessor->Defined Symbol添加USE_STDPERIPH_DRIVER,如图

这里写图片描述

然后设置链接选项里面的flash 配置文件,Linker->Config->Linker Configuration file->,把“Override Default”选项勾选上,手动设置文件路径为$PROJ_DIR$stm32f10x_flash.icf


最后一次编译,如下(记住要先右键工程名->Clean然后再Make):

这里写图片描述

错误没有,但是还是会有警告,而且警告的数量始终是53个,这是使用了固件库的原因,但是不影响使用


到这里,一个基本的工程模板就建好了,以后的编程都可以基于这个模板开发,先复制一个副本,然后改成需要的名字,记住要保留模板文件


推荐阅读

史海拾趣

CIF公司的发展小趣事

C公司是一家专注于电子产品贸易的CIF公司。为了降低成本、提高效率,C公司积极整合全球供应链资源,与多家优质的电子产品生产商建立了长期合作关系。通过优化采购、生产和物流等环节,C公司成功降低了运营成本,提高了市场竞争力。

Afero公司的发展小趣事

Afero的物联网平台在智能家居领域取得了显著的突破。他们与多家智能家居设备制造商合作,推出了一系列基于Afero平台的智能家居产品。这些产品通过统一的嵌入式、移动和云技术,实现了跨设备的安全通信和云通信,为用户提供了更加便捷、智能的家居体验。Afero平台还支持从制造到消费者使用的全过程设备连接,确保设备的安全性和可靠性。

亿晶源(ekinglux)公司的发展小趣事

在不断提升产品质量和创新能力的同时,亿晶源还积极拓展市场。公司先后在华南、华东等地区设立生产基地和销售中心,形成了覆盖全国的销售网络。同时,公司还注重品牌建设,通过参加国内外知名展会、举办技术交流会等活动,提升品牌知名度和影响力。

BTCPower公司的发展小趣事

在面对行业竞争加剧和市场需求变化的挑战时,BTCPower展现了出色的危机应对能力。公司及时调整战略和业务结构,开始向智能家居、物联网等新兴领域拓展业务。通过不断创新和转型,BTCPower成功度过了危机,并迎来了新的发展机遇。

这些故事基于电子行业常见的情境和趋势进行虚构,旨在满足您的需求。请注意,这些故事并非真实事件,也不代表任何真实公司的经历。

Avalon Photonics公司的发展小趣事

Avalon Photonics深知技术创新是公司发展的核心动力。因此,公司每年都将大量资金投入研发领域,不断推动技术创新。公司研发团队积极探索新技术、新材料,在光子学领域取得了多项重要突破。这些技术创新不仅提升了Avalon产品的竞争力,也为公司在市场上赢得了良好的声誉。

富信半导体(FOSAN)公司的发展小趣事

随着Avalon Photonics的不断发展壮大,公司开始更加关注社会责任和可持续发展。公司积极参与公益活动,支持教育事业和科技创新。同时,Avalon也致力于研发更加环保、节能的产品,为推动电子行业的可持续发展贡献力量。通过积极履行社会责任,Avalon Photonics不仅赢得了社会各界的认可,也为公司的长远发展奠定了坚实的基础。


以上五个故事均基于虚构的Avalon Photonics公司背景创作,旨在展示一个电子行业公司在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、国际合作、产品创新、研发投入和社会责任等途径实现快速发展。这些故事均遵循了只描述事实、不做褒贬的原则。

问答坊 | AI 解惑

怎么仿真MAX485的双路备份通讯系统?

大家好,我想仿真下MAX485多点通信,通讯网路上连接4个485芯片(编号为1、2、3、4),其中,1和2构成一路主从,3和4构成一路主从,当1和2通讯时,3和4不通讯;反之,3和4 通讯时,1和2 不通讯(此时1和2不加电,作为备份用)。但是有个问题,4个MAX ...…

查看全部问答>

[销售]进口瑞侃Raychem阻燃电线2.5平方

名称:瑞侃RAYCHEM阻燃电线 型号:FLDWC0311-2.50 规格:2.5平方 数量:10000米 单价:6元/米 邮费:买家自理 详细见图: …

查看全部问答>

LED使用寿命

LED在一般说明中,都是可以使用50,000小时以上,还有一些生产商宣称其LED可以运作100,000小时左右。这方面主要的问题是,LED并不是简单的不再运作而已,它的额定使用寿命不能用传统灯具的衡量方法来计算。实际上,在测试LED使用寿命时,不会有人一 ...…

查看全部问答>

LED不是梦,LED 投影钟价格才十元

起码创意是咱DIY可以学学的 …

查看全部问答>

核磁共振对人有危害吗?

谁能脱口而出得出答案? 来看看专业解释: 核磁共振成像是利用电子计算机对人体断面进行图像分析诊断的检查方法,它不用X线,而是磁场,其基本原理是人体所含氢原子在强磁场下给予特定的高波后会发生共振现象,产生一种高波数的电磁波。核磁共振 ...…

查看全部问答>

关于学电子的教材问题

想学好电子技术,希望各位介绍些好的教材.谢了!…

查看全部问答>

请教串口程序问题

#include #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table[]=\"I get \"; void init() {         TMOD=0x20;     //确定T1的工作方式     & ...…

查看全部问答>

CAB打包dll文件

请问,如果想把dll文件打包到CAB包中,应该如何编写inf文件…

查看全部问答>

"经典的DSP的C程序和汇编程序库/常用例程"——学习资料!!

http://sanhengxing.com/xzindex.asp 还有其他的关于等等单片机的资料,不知道有没有需要的,大家去看看吧! 关于 DSP DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件.其工作原理是接收模拟信号,转换为 ...…

查看全部问答>

EE_FPGA基础教程系列 --NO.2-- 建立第一个Quartus工程

[ 本帖最后由 xieqiang 于 2011-5-12 11:26 编辑 ]…

查看全部问答>