学习笔记7-STM32官方库.c/.h文件功能(汇总)

主要针对一些使用较多、但本人并不十分清楚其作用的stm32官方.c/.h文件进行系统的梳理。贴上官网标准库下载地址(操作如下图),或是直接下载这个附件。学习笔记7-STM32官方库.c/.h文件功能(汇总)_第1张图片

目录

  • 简介
  • 工程目录
  • 1、misc.c/h
  • 2、startup_stm32f10x_hd.s
  • 3、system_stm32f10x.c/h
  • 5、stm32f10x_conf.h
  • 6、stm32f10x_it.c/h
  • 7、core_cm3.c/h
  • 8、stm32f10x.h
  • 9、stm32f10x_xx.c/.h

简介

首先要搞清楚文件之间的关系。上图。

学习笔记7-STM32官方库.c/.h文件功能(汇总)_第2张图片
打开固件库文件。Libraries 文件夹下面有CMSISSTM32F1xx_StdPeriph_Driver 两个目录,这两个目录包含固件库核心的所有子文件夹和文件。
Libraries
1)CMSIS存放的是符合CMSIS规范的文件。包括STM32F1核内外设访问层代码,DSP 软件库,RTOS API,以及 STM32F1 片上外设访问层代码等。
2)STM32F1xx_StdPeriph_Driver放的是 STM32F1 标准外设固件库源码文件和对应的头文件。inc 目录存放的是 stm32f1xx_ppp.h 头文件,无需改动。src 目录下面放的是 stm32f1xx_ppp.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应,每个外设对应一组文件。
***Project ***
1)STM32F1xx_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,日后开发可修改这个官方提供的实例来快速驱动自己的外设。
2)STM32F1xx_StdPeriph_Template 文件夹下面存放的是工程模板。
Utilities
存放官方评估板的对应源码。

CMSIS共三层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层Device Peripheral Access Layer(DPAL)。
CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。
MWAL用于对中间件的访问。
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数。由芯片制造商实现。
CPAL层的实现——Core_cm3.c文件,DPAL层的实现——system_stm32f10x.c文件

STM32全部的标准外设名称如下表所示。学习笔记7-STM32官方库.c/.h文件功能(汇总)_第3张图片

工程目录

比较喜欢这样建工程

1、STARTUP----启动文件
			startup_stm32f10x_hd.s
2、CMSIS------CMSIS标准文件
			core_cm3.h			      内核功能定义
			system_stm32f1xx.c		  系统,c文件
			system_stm32f1xx.h		  系统.h文件
			stm32f10x.h			      头文件
3、FWLIB------库文件
			misc.c/.h
			stm32f10x_rcc.c/.h		库函数源文件及对应头文件	
			stm32f10x_gpio.c/.h
			....
4、HARDWARE---外设文件
			oled、key文件...
5、SYSTEM-----系统文件
			位带操作函数sys文件、延时函数delay文件、串口操作函数usart文件...
6、USER-------用户文件
			main.c		              主源文件
			stm32f1xx_it.c		      中断源文件
			stm32f1xx_it.h		      中断.h文件
			XXX		                  工程文件

1、misc.c/h

一些版本的库函数中没有单独对于NVIC的外设驱动,而是放在了misc.c ,以替代原stm32f10x_nvic.c。
定义了中断优先级分组以及 Systick 定时器相关的函数。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src

2、startup_stm32f10x_hd.s

不同Flash容量不同启动文件(见下)。作用:设置堆栈、PC指针、初始化中断向量表、配置系统时钟等。
学习笔记7-STM32官方库.c/.h文件功能(汇总)_第4张图片启动文件要引导进入main 函数。Reset_Handler 中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。Reset_handler 在系统启动的时候会调用。

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP

此段代码的作用是在系统复位后引导进入 main 函数,同时在进入 main 函数之前,首先要调用 SystemInit()系统初始化函数。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

3、system_stm32f10x.c/h

初始化时钟的频率、系统时钟,设置中断向量表的基地址和偏移地址。(这里有一个非常重要的SystemInit( )函数申明,在系统启动时都会调用,以设置系统的整个系统和总线时钟)
HSE=8M,经过PLL倍频为72M。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

5、stm32f10x_conf.h

相当于包含了所有的ST的3.5库的头文件,用户在上层调用时只需要打开这个文件的注释即可。实际使用中,会根据不同项目做改动(可注释掉不需用到的文件)。
学习笔记7-STM32官方库.c/.h文件功能(汇总)_第5张图片
stm32f10x.h头文件中包含了stm32f10x_conf.h 。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

6、stm32f10x_it.c/h

相当于所有中断函数入口,stm32f103的中断入口名称都固定,方便移植。事实上,用户也可以把各自的中断函数放在各自的模块中而不使用该文件,效果相同。实际使用会根据不同项目做改动。
.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

7、core_cm3.c/h

由ARM 公司提供。是CMSIS的核心文件,提供进入 M3 内核接口,实现了内核里面外设的寄存器映射。不需要修改这个文件。

1、NVIC相关的变量和函数。
中断向量的使能 中断向量的禁止 中断向量的挂起 清除挂起的中断 设置中断的优先级 读取中断的优先级
2、systick定时器的配置,static __INLINE uint32_t SysTick_Config(uint32_t ticks);用来使能中断、开启systick定时器。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

8、stm32f10x.h

十分重要的文件!主要功能:

  1. 定义各种中断向量表的顺序
  2. 定义数据类型
  3. 定义MCU外设相关的结构体
  4. 定义外设在FLASH中的地址
  5. 进行外设寄存器的位定义

实现了内核以外的外设的寄存器映射(映射到存储区),相当于51单片机中的

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
   __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

//外设别名区的基地址
#define PERIPH_BASE         ((uint32_t)0x40000000) 
//APB2外设总线上寄存器的基地址,GPIO挂在APB2总线上
#define APB2PERIPH_BASE     (PERIPH_BASE + 0x10000) 
// GPIO外设的地址
#define GPIOA_BASE          (APB2PERIPH_BASE + 0x0800)
// 将外设地址强制转化为结构体的指针,然后就可以通过指针GPIOx区访问某个端口中的寄存器
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

9、stm32f10x_xx.c/.h

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

参考文章:1、2、3、4


你可能感兴趣的:(单片机,学习,stm32)