STM32F103标准外设库——固件库 (三)

简介: STM32F103标准外设库——固件库 (三)

一、固件库文件分析

1.汇编编写的启动文件

       startup_stm32f10x_hd.s:设置堆栈指针、设置pc指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界。

2.时钟配置文件

       system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。

3.外设相关的文件

       stm32f10x.h:实现了内核之外的外设的寄存器映射。

       xxx:GPIO、USRAT、I2c、SPI、FSMC

       stm32f10x_xx.c:外设的驱动函数库文件

       stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明。

4.内核相关的文件

      CMSIS - Cortex微控制器软件接口标准

       core_cm3.h:实现了内核里面的外设的寄存器映射。

       core_cm3.c:实现内核外设的驱动固件库

      NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)

      misc.h

       misc.d

5.头文件的配置文件

stm32f10x_conf.h:头文件的头文件

stm32f10x_usart.h                stm32f10x_i2c.h                stm32f10x_spi.h

stm32f10x_adc.h                  stm32f10x_fsmc.h             stm32f10x_gpio.h

 

6.专门存放中断服务函数的c文件

stm32f10x_it.c

stm32f10x_it.h

中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c

二、CMSIS 标准及库层次关系

1.库目录、文件简介

STM32F10x_StdPeriph_Lib_V3.5.0\

Libraries:文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就 在这个文件夹里面。

Project :文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我 们非常有用,我们在学习的时候就可以参考这里面的例程,非常全面,简直就是穷尽了外 设的所有功能。

Utilities:包含了基于 ST 官方实验板的例程,不需要用到,略过即可。

stm32f10x_stdperiph_lib_um.chm:库帮助文档,这个很有用,不喜欢直接看源码的可以在合理查询每个外设的函数说明,非常详细。这是一个已经编译好的 HTML 文件。

在使用库开发时,我们需要把 libraries 目录下的库函数文件添加到工程中,并查阅库帮助文档来 了解 ST 提供的库函数,这个文档说明了每一个库函数的使用方法。

(1)CMSIS 文件夹

       STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\文件夹展开内容见图 CMSIS 文件夹内容 。目 录:Libraries\CMSIS\

core_cm3

       在 CoreSupport 文件夹中有 core_cm3.c 和 core_cm3.h 两个文件。Core_cm3.h 头文件里面实现了内核的寄存器映射,对应外设头文件 stm32f10x.h,区别就是一个针对内核的外设,一个针对片上 (内核之外)的外设。core_cm3.c 文件实现了一下操作内核外设寄存器的函数,用的比较少。

       我们还需要了解的是 core_cm3.h 头文件中包含了“stdint.h”这个头文件,这是一个 ANSI C 文件, 是独立于处理器之外的,就像我们熟知的 C 语言头文件“stdio.h”文件一样。位于 RVMDK 这个软件的安装目录下,主要作用是提供一些类型定义。

启动文件

       启动文件放在 startup/arm 这个文件夹下面,这里面启动文件有很多个,不同型号的单片机用的启动文件不一样。

       我们开发板中用的 STM32F103VET6 或者 STM32F103ZET6 的 FLASH 都是 512K,属于基本型的大容量产品,启动文件统一选择 startup_stm32f10x_hd.s

Stm32f10x.h

       这个头文件实现了片上外设的所有寄存器的映射,是一个非常重要的头文件,在内核中与之想对应的头文件是 core_cm3.h

system_stm32f10x.c

       system_stm32f10x.c 文件实现了 STM32 的时钟配置,操作的是片上的 RCC 这个外设。系统在上电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用的 SystemInit 函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成 72M。

(2)STM32F10x_StdPeriph_Driver 文件夹

       文件目录:Libraries\STM32F10x_StdPeriph_Driver

        STM32F10x_StdPeriph_Driver 文件夹下有 inc(include 的缩写)跟 src(source 的简写)这两个文件夹,这里的文件属于 CMSIS 之外的的、芯片片上外设部分src 里面是每个设备外设的驱动源程序inc 则是相对应的外设头文件。src 及 inc 文件夹是 ST 标准库的主要内容,甚至不少人直接认为 ST 标准库就是指这些文件,可见其重要性。

       这两个文件夹中,还有一个很特别的 misc.c 文件,这个文件提供了外设对内核中的 NVIC(中断向量控制器) 的访问函数,在配置中断时,我们必须把这个文件添加到工程中

(3)stm32f10x_it.c、stm32f10x_conf.h 和 system_stm32f10x.c 文件

文件目录:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

       在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要 添加这个目录下的 stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h system_stm32f10x.c 这四个文件。

stm32f10x_it.c:这个文件是专门用来编写中断服务函数的。

system_stm32f10x.c:这个文件包含了 STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数。

stm32f10x_conf.h:这个文件被包含进 stm32f10x.h 文件。

stm32f10x_conf.h 文件配置软件库

#include "stm32f10x_adc.h"
#include "stm32f10x_bkp.h"
#include "stm32f10x_can.h"
#include "stm32f10x_cec.h"
#include "stm32f10x_crc.h"
#include "stm32f10x_dac.h"
#include "stm32f10x_dbgmcu.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "stm32f10x_iwdg.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_sdio.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_wwdg.h"
#include "misc.h"

2.库各文件间的关系

       库文件是直接包含进工程即可,丝毫不用修改,而有 的文件就要我们在使用的时候根据具体的需要进行配置。接下来从整体上把握一下各个文件在 库工程中的层次或关系,这些文件对应到 CMSIS 标准架构上。

目录
相关文章
|
2月前
STM32F103标准外设库——SysTick系统定时器(八)
STM32F103标准外设库——SysTick系统定时器(八)
68 0
STM32F103标准外设库——SysTick系统定时器(八)
|
2月前
|
芯片
STM32F103标准外设库——中断应用/事件控制器(七)
STM32F103标准外设库——中断应用/事件控制器(七)
43 0
STM32F103标准外设库——中断应用/事件控制器(七)
|
2月前
|
监控 前端开发
STM32F103标准外设库——RCC时钟(六)
STM32F103标准外设库——RCC时钟(六)
70 0
STM32F103标准外设库——RCC时钟(六)
|
2月前
|
C++ 芯片 编译器
STM32F103标准外设库—— 新建工程与库函数(四)
STM32F103标准外设库—— 新建工程与库函数(四)
44 0
STM32F103标准外设库—— 新建工程与库函数(四)
|
2月前
|
C语言 芯片 内存技术
STM32F103标准外设库——寄存器 (二)
STM32F103标准外设库——寄存器 (二)
67 0
STM32F103标准外设库——寄存器 (二)
|
2月前
|
传感器 芯片 内存技术
STM32F103标准外设库——认识STM32(一)
STM32F103标准外设库——认识STM32(一)
107 0
STM32F103标准外设库——认识STM32(一)
|
2月前
|
存储
STM32F103标准外设库——GPIO 输入、输出 (五)
STM32F103标准外设库——GPIO 输入、输出 (五)
70 0
STM32F103标准外设库——GPIO 输入、输出 (五)
STM32CubeIDE移植ARM DSP库
STM32CubeIDE移植ARM DSP库
|
7月前
|
存储 芯片 内存技术
STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128
STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128
|
7月前
|
存储 内存技术
STM32F0单片机快速入门九 用 I2C HAL 库读写24C02
STM32F0单片机快速入门九 用 I2C HAL 库读写24C02