前言
博主在自学嵌入式开发工程师的学习道路上,先是学完了C语言和51单片机,现在马不停蹄地开始了学习STM32的过程。入手的STM32单片机是STM32F407这款芯片,这是一个资深的嵌入式开发工程师推荐的芯片,并且学习了野火的相关教程。一开始凭着51的基础,博主感觉STM32还比较上手,但到了固件库编程方面,便学起来有些吃力,于是从本章开始,博主将会对在STM32学习过程中比较吃力的点做一个记录。
我们所提到的固件库即为ST 公司提供的标准软件库,包含了 STM32 芯片所有寄存器的控制操作,我们可以通过直接学习如何使用 ST 标准库,即固件库,会极大地方便控制 STM32 芯片。接下来
我们简单的分析下 ST 官方的固件库的组成部分。
一、CMSIS 标准及库层次关系
1.CMSIS标准
STM32F407是一款基于Cotex系列的芯片,Cotex系列的芯片所采用的内核是相同的,区别主要是在核外的片上外设的差异。这些差异导致不同外设间的芯片移植起来十分困难。为了解决不同的芯片厂商生产的Cotex微控制器软件的兼容性问题,ARM与芯片厂商建立了CMSIS标准。
CMSIS架构如下:
CMSIS标准中最主要的是CMSIS核心层,它包括了:
·内核函数层:其中包含了用于访问内核寄存器的名称、地址定义。
·设备外设访问层:提供了片上的核外外设的地址和中断定义。
可见CMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,按照CMSIS标准即可建立起STM32的固件库。
2.重要的库文件
1.core_cm4.c
2.system_stm32f4xx.c 文件
这个文件包含了STM32芯片上后初始化系统时钟、扩展外部存储器的函数。
3.启动文件
“strartup_stm32f40xx.s”即为 STM32F407 芯片的启动文件。
4.stm32f4xx.h 文件
这是一个 STM32 芯片底层相关的文件,包含了STM32中所有的外设寄存器地址和结构体类型定义。
5.STM32F4xx_StdPeriph_Driver 文件夹下有 inc跟 src这两个文件夹当中的文件
src 里面是每个设备外设的驱动源程序,inc 则是相对应的外设头文件。这两个文件夹当中的文件都是ST 公司针对每个 STM32 外设而编写的库函数文件,例如stm32f4xx_gpio.c 及 stm32f4xx_gpio.h 文件针对的就是gpio外设。这两个文件夹中,还有一个很特别的 misc.c 文件,这个文件提供了外设对内核中的 NVIC(中断向量控制器) 的访问函数,在配置中断时,我们必须把这个文件添加到工程中。
6.stm32f4xx_it.c
这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常 (特殊中断) 的接口,其它普通中断服务函数由我们自己添加。
7.stm32f4xx_conf.h
这个配置文件管理inc和src下的所有文件,并被包含在stm32f4xx.h文件当中,可以根据芯片型号增减 ST 库的外设文件。