完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
标准外设库概述
STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。 因此,使用固态函数库可以大大减少开发者开发使用片内外设的时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用的标准化的API去驱动。这里介绍的是V3.5版本的外设库,也是迄今最新的版本。 STM32F10x标准外设库文件结构 库的下载处是在ST公司的官方网站,下载链接:ST公司官方网站。 注意过程中需要下载者注册、登录账号。下载后得到如下压缩包: 解压后,整个标准库的目录结构如下: 下面介绍一下各个文件夹和它的作用:
ARM是一家做芯片标准的公司,他们负责的是芯片内核的架构设计,而像ST、三星他们则是根据ARM公司的提供的内核标准设计自己的芯片。所以,任何一个Cortex-M3芯片,其内核结构都是一样的,区别在于他们的存储器容量,片上外设,IO以及其他模块。ARM公司为了能让不同的芯片公司生产的Cortex-M3芯片能在软件上基本兼容,与芯片生产商共同提出CMSIS标准。当然,ST官方库也是根据这套标准设计的。基于CMSIS应用程序的结构体如下: 可见,CMSIS分为3个功能层:
举个例子,使用STM32的时候首先需要进行初始化,CMSIS标准规定,系统初始化函数的函数名必须是SystemInit,CMSIS还对各个片内外设的驱动文件的文件名规范化、操作函数规范化等,如GPIO_ResetBits函数名。 Libraries目录下有CMSIS和STM32F10x_StdPeriph_Driver两个目录,这两个目录是函数固件库的核心文件和片内外设操作文件,其中CMSIS目录下面主要存放启动文件,STM32F10x_StdPeriph_Driver放的是STM32的固件库源码文件,inc存放stm32f10x_xxx.h头文件,src目录下存放的是stm32f10x_xxx.c的源代码文件,每一个.c和.h文件对应称为一组文件,每组文件对应一个片内外设,如RCC、IIC。 关键目录文件介绍 关键文件位于Libraries目录下: system_stm32f10x.c和system_stm32f10x.h LibrariesCMSISCM3CoreSupport下的core_cm3.c、core_cm3.h是CMSIS的核心文件,提供进入Crotex-M3内核的接口,这是由ARTM公司提供的,对所有M3内核的芯片都适用。和CoreSupport目录同级的还用DeviceSupport目录,DeviceSupportSTSTM32F10x目录下主要存放一些启动文件以及基础的寄存器和中断向量的定义的文件。 system_stm32f10x.c对应的头文件时system_stm32f10x.h,这组文件的功能是设置系统和总线时钟,其间最重要的函数是SystemInit()函数,这个函数是在系统启动时调用的,用来设置整个系统的时钟。在system_stm32f10x.c文件中的开头注释,也明确指明这组文件的作用: This file provides two functions and one global variable to be called from * user application: * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier * factors, AHB/APBx prescalers and Flash settings). * This function is called at startup just after reset and * before branch to main program. This call is made inside * the "startup_stm32f10x_xx.s" file. * * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used * by the user application to setup the SysTick * timer or configure other parameters. * * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must * be called whenever the core clock is changed * during program execution. 通过变量 SystemCoreClock 可以获取系统时钟值,如果系统是 72M 时钟,那么 SystemCoreClock=72000000。 SystemCoreClockUpdate()用于改变系统时钟后让SystemCoreClock变量更新。 stm32f10x.h stm32f10x.h这是个关键文件,其间有许多结构体和宏定义,这个文件里面主要是系统寄存器的定义申明以及包装对其的操作。 如封装can总线相关寄存器的结构体: typedef struct { __IO uint32_t TIR; __IO uint32_t TDTR; __IO uint32_t TDLR; __IO uint32_t TDHR; } CAN_TxMailBox_TypeDef; 封装GPIO相关寄存器的结构体: 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; 追溯__IO的具体类型,在LibrariesCMSISCM3CoreSupportcore_cm3.h宏定义是关键字volatile #define __IO volatile /*!< defines 'read / write' permissions */ startup 顾名思义,这个一个存放启动文件的目录: 在startuparm目录下: 这8个startup打头的.s文件,是针对不同容量的芯片的启动文件,对于f103系列的STM32,主要是用到其中3个启动文件: startup_stm32f10x_hd.s: 适用于小容量的STM32 startup_stm32f10x_ld.s: 适用于中等容量的STM32 startup_stm32f10x_md.s: 适用于大容量的STM32 这里所谓的容量是指片内Flash的大小,等级划分规则为: 小容量: <= 32K中等容量: >= 64K && <= 128K大容量: >= 256K 启动文件的作用在于进行堆栈等初始化,中断向量表以及对应的中断处理函数的定义,启动文件还要引导程序进入main函数。Reset_Handler是唯一实现了的中断处理函数(其他的中断处理函数都是不尽循环)。Reset_Handler是在系统启动时会被调用。 ; Reset handler routine 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系统初始化函数。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1850浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
614浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
506浏览 3评论
510浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
491浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 20:26 , Processed in 0.619071 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号