第三章 MDK软件入门 新建MDK工程 正点原子探索者STM32F4开发板 STM32F4开发指南
第三章 MDK软件入门 新建MDK工程 正点原子探索者STM32F4开发板 STM32F4开发指南

3.1 STM32 官方标准固件库简介
ST(意法半导体)为了方便用户开发程序, 提供了一套丰富的 STM32F4 固件库。 到底什么是 固件库?它与直接操作寄存器开发有什么区别和联系?很多初学用户很是费解,这一节,我们 将讲解 STM32 固件库相关的基础知识, 希望能够让大家对 STM32F4 固件库有一个初步的了解, 至于固件库的详细使用方法,我们会在后面的章节一一介绍。 固件库包光盘路径(是压缩包形式,大家解压即可) : \8,STM32 参考资料\STM32F4xx 固件库\stm32f4_dsp_stdperiph_lib.zip 同时,大家也可以到我们开源电子网 下载。 3.1.1 库开发与寄存器开发的关系 很多用户都是从学 51 单片机开发转而想进一步学习 STM32 开发,他们习惯了 51 单片机 的寄存器开发方式,突然一个 ST 官方库摆在面前会一头雾水,不知道从何下手。下面我们将 通过一个简单的例子来告诉 STM32 固件库到底是什么,和寄存器开发有什么关系?其实一句 话就可以概括:固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道, 向上提供用户函数调用的接口(API) 。 在 51 的开发中我们常常的作法是直接操作寄存器,比如要控制某些 ቤተ መጻሕፍቲ ባይዱO 口的状态,我们直 接操作寄存器: P0=0x11; 而在 STM32 的开发中,我们同样可以操作寄存器: GPIOF->BSRRL=0x0001; //这里是针对 STM32F4 系列 这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用 STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法 半导体)推出了官方固件库, 固件库将这些寄存器底层操作都封装起来, 提供一整套接口 (API) 供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些 函数即可。 比如上面的控制 BSRRL 寄存器实现电平控制,官方库封装了一个函数: void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { GPIOx->BSRRL = GPIO_Pin; }
STM32开发板新建工程步骤

新建工程步骤1.文件夹的新建:按照上述步骤新建好文件夹之后,就可以新建工程。
2.新建工程①打开软件Keil uVision4②点击project→new uVision4 project,然后出现下图所示的方框。
③新建的工程放在如下图所示文件夹:名字随便取,直接输入名字后点击保存,不用加后缀。
④接下来会有如下图所示的方框,按照下图选择:点击否。
3.添加group到project.①Add group并重命名,如下图所示:②共五个组,每一族都双击、添加文件:在此之前要将刚才新建好的Template文件夹里面装好文件(从库3.5里面Copy):库里面的Inc、Src两个文件夹复制到Libraries中,并在文件夹Libraries 中新建文件夹CMSIS,其中Copy进去下图所示五个文件,并新建文件夹startup,并将库里面的文件夹arm全部拷贝进startup:在USER文件夹中拷贝进去如下四个文件(从库到新建的若干文件夹,如下图所示):至此,文件夹里的文件添加完毕;然后往各个Group中添加文件:(※注意:所选文件均应直接来自新建的若干文件夹,不能再从库里面选!!!)(注意显示文件类型:All File:)双击Startup,添加图示文件:双击CMSIS,选择下图所示文件:(有锁文件是只读的,不能修改。
)双击FWLIB,选中SRC中的所有文件:USER里面: USER文件夹里面的文件全部放进去:DOC里面:添加readme③配置target option:点击,出现下图所示方框:※点击target选项卡,设置成下图所示:※点击Output选项卡,设置成下图所示:并点击,选择新建的若干文件夹里的Output文件夹。
※点击Listing选项卡,设置成下图所示:并点击,选择新建的若干文件夹里的Listing文件夹。
※点击C/C++选项卡,Define处选择宏,Include Path选择编译路径(点击,选择所有直接包含.c文件的文件夹,同时,inc文件夹也要包含进去)。
STM32在MDK上的工程建立方法

1.新建一个文件夹,最好命名为跟实际工程相关的名称。
如图2.在文件夹里面,再新建6个文件夹,分别为USER:用于存放用户文件Project:用于存放工程目录Libraries:用于存放STM32的库函数、内核以及启动函数Listing:工程编译的时候会产生一些编译文件,存放到这个文件夹下Output:输出文件存放在这里,如Hex文件Doc:自己定义的一些帮助说明等如图ER文件夹USER文件夹里面存放用户文件,如Main.c等,一般至少包含4个文件main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h。
如图如果是第一次建立工程,那么这4个文件可以从STM32官方库里的工程模板里面复制过来,官方库目录如下…\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template4.Libraries文件夹Libraries文件夹下存放的是STM32库的主体,包括启动文件、内核文件以及大量功能库文件。
首先,在Libraries文件夹里面新建两个文件夹,如图4.1 其中CMSIS里存放内核文件以及启动文件,如图这些文件也是直接从官方下载的库里面复制过来的,其中内核文件目录如下\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport启动文件在官方下载的库里目录如下\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x4.2FWLIB文件夹里面存放的是STM32的库函数文件,如图这两个文件夹直接复制于官方下载库的目录\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver中。
stm32F407 keil 项目工程的建立,整理笔记

第一:软件的安装:第二:阅读《STM32F4开发指南-寄存器版本_V1.1》的第三章主要是MDK的使用技巧。
第三:新建项目工程和下载:寄存器的就先参考我提供的例程,后面讲述库函数的时候咱们再从官方提供的库文件里面去拷贝。
1.新建文件夹STM32_Demo,在这个文件夹里面新建3个文件夹:USER,SYSTEM,HARDWAR。
USER:用来保存工程文件;SYSTEM:用来存放一些官方提供的一些内核文件,以及一些常用的模块文件;HARDWARE:存放和硬件相关的模块文件;2.从我提供的程序代码里面拷贝文件到上面新建的文件夹里面;从1.STM32F4_LED工程文件里面拷贝资料文件到上面新建的文件夹里面:把1.STM32F4_LED--->SYSTEM拷贝到STM32_Demo---->SYSTEM;把1.STM32F4_LED--->HARDWAR拷贝到STM32_Demo---->HARDWARE;把1.STM32F4_LED--->USER--->main.c拷贝到STM32_Demo---->USER里面;3.新建项目工程:新建工程文件并保存到USAR里面;选择芯片如下:STM32F407ZG把文件里面的.c和.s文件添加到项目工程,可以先对其进行分组;最终出现的效果如下(组的名称随意命名):在文件里面还有很多.h文件,咱们要在工程里面知名路径;编译会出现问题,咱们需要添加1个宏定义;STM32F40_41xxx这样编译就没有问题了。
先让ST-Link和STM32开发板连接,并连接到计算机;咱们需要使用ST-Link下载,所以要配置如下:点击上图中“Settings”,进入如下界面:下载工程文件到STM32开发板:配置注意的几点:第四:项目工程的分析:USER:main.c;HARDWARE:led.c和led.h;相关LED灯的操作文件;SYSTEM:sys文件夹:startup_stm32f40_41xxx.s:官方提供的启动代码文件;stm32f4xx.h:官方提供的STM32F4系列芯片的头文件,类似reg51.h。
STM32F4XX新建工程步骤

一:建立文件夹1.复制库函数中Libraries文件夹到你所需建立工程的文件夹下,例:我在Example文件夹下建立工程,那么把Libraries文件夹复制到Example。
2.在你所需建立工程的文件夹下新建文件夹User。
我在Example下建立User文件夹。
er文件夹下建立Obj和List文件夹4.拷贝库函数里Periject/STM32F4xx_StdPeriph_Templates文件夹下main.c,stm32f4xx_it.c 和stm32f4xx_it.h到User文件夹下5.拷贝库函数里Periject/STM32F4xx_StdPeriph_Templates文件夹下stm32f4xx_conf.h到Libraries\CMSIS\Device\ST\STM32F4xx\Include6.在你所需建立工程的文件夹下新建文件夹CMSIS。
7.在你所需建立工程的文件夹下新建文件夹MDK-ARM。
8.在你所需建立工程的文件夹下新建文件夹STM32F4xx_StdPeriph_Driver。
目前建立的文件夹如图所示:二:建立工程:1.打开Keil4新建工程文档,路径选择为MDK-ARM,选择芯片,然后点否:不添加。
2.然后添加刚刚新建文件夹名字的组。
添加完成后如图:三:给各个组添加文件:er文件夹下添加添加步骤一中User文件夹中的main.c和stm32f4xx_it.c。
2.CMSIS文件夹下添加步骤一中Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates中的system_stm32f4xx.c。
3.MDK-ARM文件夹下添加Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm中的startup_stm32f4xx.s。
这个我是用的Keil,所以选arm文件夹下的,其他软件就选其他软件的吧。
使用MDK5建立STM32工程

使用MDK5建立STM32工程MDK5是Keil公司推出的一款嵌入式开发工具,用于编写和调试STM32系列微控制器的程序。
本文将介绍使用MDK5建立STM32工程的步骤。
首先,我们需要准备以下材料:-STM32系列微控制器开发板-USB转串口调试器-MDK5软件安装包接下来,我们按照以下步骤建立STM32工程:第一步,安装MDK5软件第二步,创建新工程打开MDK5软件,点击"Project" -> "New uVision Project",选择保存工程的路径,并命名工程。
第三步,选择目标器件在"Device"栏中,选择对应的STM32系列微控制器型号。
第四步,配置工程选项在"Project" -> "Options for Target"中,配置工程选项,包括时钟频率、调试接口等。
第五步,添加源文件在"Project"窗口中右键点击"Source Group",然后选择"Add New Item to Group",选择需要添加的源文件。
第六步,编写程序在添加的源文件中编写STM32的程序,可以使用C语言或者汇编语言。
第七步,调试程序在"Project" -> "Options for Target"中,配置调试选项,选择调试模式和调试接口等。
点击工具栏上的"Start/Stop Debug Session"按钮,开始调试程序。
以上就是使用MDK5建立STM32工程的主要步骤。
通过这些步骤,我们可以方便地进行STM32的软件开发和调试工作。
同时,MDK5还提供了丰富的开发工具和调试功能,提高了开发效率。
我们可以根据具体的需求进行配置和扩展,以满足不同的项目要求。
STM32F4工程模板建立方法
STM32F4工程模板建立方法在Keil环境下建立STM32F4的工程模板可以按照以下步骤进行操作:1. 打开Keil软件,选择“Project”->“New µVision Project”命令,弹出新建项目对话框。
2. 在对话框中选择工程的保存路径和名称,点击“Save”保存。
3. 在“Create Project Folder”对话框中选择是否要在工程文件夹中创建子文件夹,选择“Yes”或“No”并点击“OK”完成创建。
4. 弹出新建文件对话框,选择需要添加到工程中的文件类型,例如C源文件或者汇编文件,点击“Save”保存。
5. 在“Options for Target”对话框中选择芯片型号和包装封装类型,并点击“OK”关闭对话框。
6. 在Keil主界面的工程文件窗口中右键单击“Source Group”文件夹,选择“Add Existing Files to Group 'Source Group'”命令,选择要添加到工程的源文件,并点击“Add”完成添加。
7. 右键单击“Include”文件夹,选择“Add Exist ing Files to Group 'Include'”命令,选择要添加到工程的头文件,并点击“Add”完成添加。
8. 在工程文件窗口中选择“Options for Target”->“C/C++”选项,在右侧的Edit框中添加需要进行编译的文件路径,在Options forTarget - C/C++窗口中点击“OK”完成路径设置。
9. 在工程文件窗口中选择“Options for Target”->“Output”选项,在右侧的Edit框中选择输出文件的路径和名称,点击“OK”完成路径设置。
10. 在Keil主界面的工具栏中点击“Build”按钮进行编译,编译成功后会生成目标文件和可执行文件。
注意事项:1.在建立工程模板时,需要根据实际的芯片型号和芯片封装类型进行设置,确保编译器和调试工具能够正确地识别和支持所选的硬件。
使用Keil MDK以及标准外设库创建STM32工程
使用Keil MDK以及标准外设库创建STM32工程1.1 使用Keil MDK以及标准外设库创建STM32工程通过上一节对标准外设库的介绍,想必各位读者对标准外设库已经有了基本的认识,然而由于标准外设库中文件众多,很多初学者在开始很长一段时间内甚至都无法完全自己建立一个工程,很多人只是依赖标准外设库或给定的工程模板。
本节就介绍怎样利用Keil MDK 开发环境和标准外设库来搭建自己的工程。
建立一个基于标准外设库其实并不复杂,网络上也有很多关于怎样在Keil MDK下建立工程的教程,方法也各异,本节所介绍的方法本着少改动、便于使用、方便更换器件等原则,给大家介绍怎样在Keil中创建一个工程,并以一个最简单的例子来说明怎样下载和调试程序。
1.1.1 开发工具与开发环境1. 软件版本本节所使用Keil MDK 为目前的最新版V4.21,具体版本信息如图5-6所示。
其他版本差别不大,读者可以根据自己使用的版本进行操作或者从Keil的官网下载新版本。
使用的标准外设库为目前最新的V3.5版本。
使用的开发调试工具为JLINK-V8,使用的驱动版本为V4.08l。
图5-6 MDK详细版本信息2. 建立工程目录首先先建立一个用于存放工程的文件夹,此处命名为STM32,在文件夹下分别建立LIB、USER、MDK三个文件夹,分别用于存放标准外设库文件、用户程序文件、工程目录。
在MDK 文件夹下建立List、Obj两个文件夹,分别用于存放在编译过程中产生的临时文件和输出文件。
接下来拷贝标准外设库和相应的文件到工程目录中,首先拷贝STM32F10x_StdPeriph_Li b_V3.5.0\Libraries文件夹下的两个文件夹CMSIS和STM32F10x_StdPeriph_Driver到刚刚新建的STM32\LIB目录下,接下来拷贝用户编写程序的程序文件,此文件可以从标准外设库自带的例程中拷贝,这里从STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Exam ples\ADC\3ADCs_DMA目录下拷贝main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it. h四个文件,这四个文件是在编程的时候用户往往需要根据实际需求进行修改的。
stm32新建工程步骤keil,很详细
今天外我来教大家来怎么使用这个建工程的利器吧。
首先是新建工程吧,如下图步骤:因为我用的是stm32f401 Necleo,所以芯片型号应该要选择stm32f401te,选好芯片类型后,会弹出一个大的面板,如下图:红色框里的都是一些集成在keil 5的启动文件,arm内核的文件,st公司的库函数和一些API等等。
一个工程最起码也要选上core和startup两个选项,如下图:然后选择OK,就建好了空白的工程。
然后就要对工程做一些设置,如下图:然后在你工程的路径新建一个USE(这个大家可以随便建个文件,不一定是USE 名字的)的文件夹,然后在里面新建一个main.c的文件,如下图:然后新建的文件main.c添加到工程当中,步骤如下:然后在main.c文件中添加如下代码:到这里我们的空白工程建好了,后面我来教大家怎样加keil 5里自带的st库。
首先我点击那个绿色的小图标,如下图:点击后会弹出一个大的页面,然后找到Device->StdPeriph Drivers。
如下图:点开StdPeriph Drivers选项的加号图标,就可以看到st库目录下各外设的驱动文件,后面是他的版本说明,这是V1.3版本的,是比较新的,建议大家尽量使用新的库。
我这里就勾上了所有外设的驱动的文件,如下图:然后点击OK后,就可以看到原先工程目录下的Device添加了刚才选择外设的驱动文件。
添加完后大家不要急着编译工程,还有对工程进行相关的配置,否则如下图,编译不成功的:接下来,我来配置下工程,右击target,然后进入配置工程的面板,步骤如下:这里要填上USE_STDPERIPH_DRIVER,这就是表明编译器选择了st的库然后我们来指定编译器头文件的路径以上这两个路径是编译器编译时要找的路径,这几个头文件至关重要,这里编译器关联头文件所需要的。
当做完以上工作后,我们就可以来编译一下工程,在编译时,编译器就会根据我们的配置来编译驱动头文件和驱动的C文件。
STM32学习笔记——新建工程模板步骤(向原子哥学习)
STM32学习笔记——新建⼯程模板步骤(向原⼦哥学习)1、在创建⼯程之前,先在电脑的某个⽬录下⾯建⽴⼀个⽂件夹,我们先把它命名为Template,后⾯建⽴的⼯程可以放在这个⽂件夹下。
在Template ⼯程⽬录下⾯,新建 3 个⽂件夹USER , CORE , OBJ 以及STM32F10x_FWLib 。
代码⼯程⽂件都是放在 USER ⽬,录CORE ⽤来存放核⼼⽂件和启动⽂件, OBJ 是⽤来存放编译过程⽂件以及 hex ⽂件, STM32F10x_FWLib ⽂件夹顾名思义⽤来存放 ST 官⽅提供的库函数源码⽂件。
已有的 USER ⽬录除了⽤来放⼯程⽂件外,还⽤来存放主函数⽂件main.c,以及其他包括 system_stm32f10x.c等等。
2、在MDK主界⾯,点击 Keil 的菜单:Project -> New Uvision Project ,然后将⽬录定位到刚才建⽴的⽂件夹Template 之下,然后定位到USER ⽬录下⾯,我们的⼯程⽂件就都保存到 USER ⽂件夹下⾯。
⼯程命名为 Template ,点击保存。
3、接下来会出现⼀个选择 Device 的界⾯,就是选择我们的芯⽚型号,这⾥我们定位到STMicroelectronics 下⾯的 STM32F103ZE 。
弹出对话框“Copy STM32 Startup Code to project ….”,询问是否添加启动代码到我们的⼯程中,这⾥我们选择“否”,因为我们使⽤的 ST 固件库⽂件已经包含了启动⽂件。
此时,USER ⽬录下⾯包含三个⽂件。
4、将官⽅的固件库包⾥的源码⽂件复制到我们的⼯程⽬录⽂件夹下⾯。
打开官⽅固件库包,定位到我们之前准备好的固件库包的⽬录:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下⾯,将⽬录下⾯的 src,inc ⽂件夹 copy 到我们刚才建⽴的STM32F10x_FWLib ⽂件夹下⾯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这一节内容主要讲解 ST 官方提供的 STM32F4 固件库包的结构。ST 官方提供的固件库完整 包可以在官方网站下载,我们光盘也会提供。固件库是不断完善升级的,所以有不同的版本, 我们使用的是 V1.4 版本的固件库,大家可以到光盘目录找到其压缩文件: \8,STM32 参考资料\STM32F4xx 固件库\stm32f4_dsp_stdperiph_lib.zip 然后解压即可。 这在我们论坛有下载。 下面看看官方库包的目录结构, 如下图 3.1.3.1 和图 3.1.3.2 所示:
37
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
图 3.1.2.2 基于 CMSIS 应用程序基本结构 CMSIS 分为 3 个基本功能层: 1) 核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。 2) 中间件访问层:定义访问中间件的通用 API。由 ARM 提供,芯片厂商根据需要更新。 3) 外设访问层:定义硬件寄存器的地址以及外设的访问函数。 从图中可以看出,CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交 道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公 司就会设计自己喜欢的风格的库函数, 而 CMSIS 标准就是要强制规定, 芯片生产公司设计的库 函数必须按照 CMSIS 这套规范来设计。 其实不用这么讲这么复杂的,一个简单的例子,我们在使用 STM32 芯片的时候首先要进 行系统初始化,CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit ,所以各个芯片公 司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。 CMSIS 还对各个外设驱 动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数 GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。 至于 CMSIS 的具体内容就不必多讲了,需要了解详细的朋友可以到网上搜索资料,相 关资料可谓满天飞。 3.1.3 STM32F4 官方库包介绍
说明里面找到。这里讲解的一些知识也是为我们后面章节“3.3.2 新建 STM32F4 工程模板”做 铺垫。这些文件它们之间的关系如下图 3.1.3.2.1:
图 3.1.3.2.1 STM32F4 标准外设固件库文件关系图 core_cm4.h 文件位于\STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Include 目录 下面的,这个就是 CMSIS 核心文件,提供进入 M4 内核接口,这是 ARM 公司提供,对所有 CM4 内核的芯片都一样。你永远都不需要修改这个文件,所以这里我们就点到为止。 stm32f4xx.h 和 system_stm32f4xx.h 文件存放在文件夹 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include 下面。 system_stm32f4xx.h 是片上外设接入层系统头文件。主要是申明设置系统及总线时钟相关 的函数。与其对应的源文件 system_stm32f4xx.c 在目录 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates 可以找到。这 个里面有一个非常重要的 SystemInit()函数申明,这个函数在我们系统启动的时候都会调用,用 来设置系统的整个系统和总线时钟。 stm32f4xx.h 是 STM32F4 片上外设访问层头文件。这个文件就相当重要了,只要你做 STM32F4 开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常 多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作,对于这 里是怎样申明以及怎样将内存操作封装起来的,我们在后面的章节“4.6 MDK 中寄存器地址名 称映射分析”中会讲到。同时该文件还包含了一些时钟相关的定义,FPU 和 MPU 单元开启定 义,中断相关定义等等。 stm32f4xx_it.c,stm32f4xx_it.h 以 及 stm32f4xx_conf.h 等 文 件 , 我 们 可 以 从 \STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Templates 文件夹中找到。 这几个文件我们后面新建工程也有用到。stm32f4xx_it.c 和 stm32f4xx_it.h 里面是用来编写中断 服务函数,中断服务函数也可以随意编写在工程里面的任意一个文件里面,个人觉得这个文件 没太大意义。 stm32f4xx_conf.h 是外设驱动配置文件。 文件打开可以看到一堆的#include,这里你建立工程 的时候,可以注释掉一些你不用的外设头文件。这里相信大家一看就明白。 对 于 上 图 中 的 misc.c,misc.h,stm32f4xx_ppp.c,stm32f4xx_ppp.h 以 及 stm32f4xx_rcc.c 和
3.1 STM32 官方标准固件库简介
ST(意法半导体)为了方便用户开发程序, 提供了一套丰富的 STM32F4 固件库。 到底什么是 固件库?它与直接操作寄存器开发有什么区别和联系?很多初学用户很是费解,这一节,我们 将讲解 STM32 固件库相关的基础知识, 希望能够让大家对 STM32F4 固件库有一个初步的了解, 至于固件库的详细使用方法,我们会在后面的章节一一介绍。 固件库包光盘路径(是压缩包形式,大家解压即可) : \8,STM32 参考资料\STM32F4xx 固件库\stm32f4_dsp_stdperiph_lib.zip 同时,大家也可以到我们开源电子网 下载。 3.1.1 库开发与寄存器开发的关系 很多用户都是从学 51 单片机开发转而想进一步学习 STM32 开发,他们习惯了 51 单片机 的寄存器开发方式,突然一个 ST 官方库摆在面前会一头雾水,不知道从何下手。下面我们将 通过一个简单的例子来告诉 STM32 固件库到底是什么,和寄存器开发有什么关系?其实一句 话就可以概括:固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道, 向上提供用户函数调用的接口(API) 。 在 51 的开发中我们常常的作法是直接操ห้องสมุดไป่ตู้寄存器,比如要控制某些 IO 口的状态,我们直 接操作寄存器: P0=0x11; 而在 STM32 的开发中,我们同样可以操作寄存器: GPIOF->BSRRL=0x0001; //这里是针对 STM32F4 系列 这种方法当然可以,但是这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确使用 STM32,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法 半导体)推出了官方固件库, 固件库将这些寄存器底层操作都封装起来, 提供一整套接口 (API) 供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些 函数即可。 比如上面的控制 BSRRL 寄存器实现电平控制,官方库封装了一个函数: void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { GPIOx->BSRRL = GPIO_Pin; }
3.1.3.2 关键文件介绍: 在介绍一些关键文件之前,首先我们来看看一个基于固件库的 STM32F4 工程需要哪些关 键文件,这些文件之间有哪些关联关系。其实这个可以从 ST 提供的英文版的 STM32F4 固件库
39
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
36
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
这个时候你不需要再直接去操作 BSRRL 寄存器了,你只需要知道怎么使用 GPIO_SetBits ()这 个函数就可以了。在你对外设的工作原理有一定的了解之后,你再去看固件库函数,基本上函 数名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发会方便很多? 任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固 件库不是万能的,您如果想要把 STM32 学透,光读 STM32 固件库是远远不够的。你还是要了 解一下 STM32 的原理,了解 STM32 各个外设的运行机制。只有了解了这些原理,你在进行固 件库开发过程中才可能得心应手游刃有余。 只有了解了原理, 你才能做到 “知其然知其所以然” , 所以大家在学习库函数的同时,别忘了要了解一下寄存器大致配置过程。
图 3.1.3.1 官方库包根目录
38
STM32F4 开发指南(库函数版)
ALIENTEK 探索者 STM32F407 开发板教程
图 3.1.3.2 官方库目录列表 3.1.3.1 文件夹介绍: Libraries 文件夹下面有 CMSIS 和 STM32F4xx_StdPeriph_Driver 两个目录,这两个目录包 含固件库核心的所有子文件夹和文件。 CMSIS 文件夹存放的是符合 CMSIS 规范的一些文件。 包括 STM32F4 核内外设访问层代码, DSP 软件库,RTOS API,以及 STM32F4 片上外设访问层代码等。我们后面新建工程的时候会 从这个文件夹复制一些文件到我们工程。 STM32F4xx_StdPeriph_Driver 放的是 STM32F4 标准外设固件库源码文件和对应的头文件。 inc 目录存放的是 stm32f4xx_ppp.h 头文件,无需改动。src 目录下面放的是 stm32f4xx_ppp.c 格式 的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库外设的关 键文件,每个外设对应一组文件。 Libraries 文件夹里面的文件在我们建立工程的时候都会使用到。 Project 文件夹下面有两个文件夹。顾名思义,STM32F4xx_StdPeriph_Examples 文件夹下面 存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的 实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以 后的学习非常重要。STM32F4xx_StdPeriph_Template 文件夹下面存放的是工程模板。 Utilities 文件下就是官方评估板的一些对应源码,这个对于本手册学习可以忽略不看。 根目录中还有一个 stm32f4xx_dsp_stdperiph_lib_um.chm 文件,直接打开可以知道,这是一 个固件库的帮助文档,这个文档非常有用,只可惜是英文的,在开发过程中,这个文档会经常 被使用到。