编辑: 865397499 2019-12-23
STM32F 固件库 嵌入式系统研发成本 主要内容 1.

固件库简介 2. CMSIS 简介 3. STM32F10xxx标准外设库 4. IO类型及数据类型 5. 异常与中断的命名 6. 固件库头文件 7. 固件库函数 1. 固件库简介 ? 固件(Firmware)是介于软件和硬件之间的产品,具 有硬件抽象功能 ?给开发者访问底层硬件提供一个中间的API ?大大提高应用程序开发效率 STM32固件库 ? ST公司固件库: C STM32F10xxx Firmware Library,STM32F10x FWLib C 2007年,V1.0,MDK2.22之前使用 C 2008年,V2.0,最后版本V2.0.3,MDK3.23开始使用 C 2011年,V3.0,改名,与V1.0和V2.0相比,有较大改变 ? STM32F10xxx Firmware Library,STM32F10x FWLib,代表代表 STM32F10xxx标准外设库V2.0.3 ? STM32F10xxx Standard Peripheral library,STM32F10xxx StdPeriph_Lib,代表STM32F10xxx标准外设库V3.0.0 C 最新版V3.5.0,MDK最新版4.2.1,兼容 CMSIS(Cortex-M3 微 控制器软件接口标准) 2. CMSIS ? CMSIS(Cortex-MTM Microcontroller Software Interface Standard) Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半 导体厂家共同遵循的一套标准,是由ARM提出,专门针对 CORTEX-M系列的标准. 在该标准的约定下,ARM和芯片厂商会提供一些通用的 API接口来访问CORTEX内核以及一些专用外设,以减少更换 芯片以及开发工具等移植工作所带来的金钱以及时间上的消 耗.只要都是基于M3的芯片,代码均是可以复用的. 2. CMSIS ? CMSIS(Cortex-MTM Software Interface Standard) ?ARM公司与多家不同芯片和软件供应商紧密 合作定义的 ?提供内核与外设、实时操作系统和中间设备 之间的通用接口 CMSIS 的软件层次 ? CMSIS 分为以下3个软件层次: ① 内核设备访问层 Core Peripheral Access Layer (CPAL) C 内核寄存器设备名称定义、地址定义、助手函数;

C 同时,为RTOS定义了独立于微控制器的接口,包括调试通道 ② 中间设备访问层 Middleware Access Layer (MWAL) C 为软件提供访问外设的通用方法;

C 芯片供应商可修改中间设备访问层,以适应具体的微控制器上 外设硬件的设计 ③ 微控制器外设备访问层 Device Peripheral Access Layer (DPAL) C 提供片上所有外设的定义;

C 为外设提供额外的助手函数 CMSIS的主要功能 ? CMSIS为Cortex-Mx微控制器系统定义了: ?访问外设寄存器的通用方法和定义异常向量的通用 方法. ?内核设备的寄存器名称和内核异常向量的名称 ?独立于微控制器的RTOS接口,带调试通道 ?中间设备组件接口(TCP/IP协议栈,闪存文件系统) CMSIS的结构 CMSIS-外设访问层的文件 分为: ① 独立于编译器的文件: ② 编译器供应商+微控制器专用启动文件 CMSIS-外设访问层的文件 ① 独立于编译器的文件: ? Cortex-M3内核及其设备文件(core_cm3.h + core_cm3.c) ? 访问Cortex-M3内核及其设备:NVIC,SysTick等?访问Cortex-M3的CPU寄存器和内核外设的函数 ? 微控制器专用头文件(device.h) ? 指定中断号码(与启动文件一致) ? 外设寄存器定义(寄存器的基地址和布局) ? 控制微控制器其他特有的功能的函数(可选) ? 微控制器专用系统文件(system_device.c) ? 函数SystemInit,用来初始化微控制器 ? 函数Sysem_ExtMemCtl,用来配置外部存储器控制器.它位于 文件startup_stm32f10x_xx.s /.c,在跳转到main前调用 ? SystemFrequncy,该值代表系统时钟频率 ? 微控制器的其他功能(可选) CMSIS-外设访问层的文件 ② 编译器供应商+微控制器专用启动文件 ?编译器启动代码(汇编或者C)(startup_device.s) ?微控制器专用的中断处理程序列表(与头文件一致) ?弱定义(Weak)的中断处理程序默认函数(可以被用户 代码覆盖 CMSIS文件名的定义标准 C core_cm3.h Cortex-M3 global declarations and definitions, static function definitions C core_cm3.c Cortex-M3 global definitions C .h Top-level header file (device specific). To be included by application code. Includes core_cm3.h and system_.h C system_.h Device specific declarations C system_.c Device specific definitions, e.g. SystemInit() CMSIS支持的工具链 ? CMSIS目前支持三大主流的工具链,即①ARM RealView (armcc), ②IAR EWARM (iccarm), ③GNU Compiler Collection (gcc). CMSIS支持的工具链 ? 在core_cm3.h中有如下定义: /* define compiler specific symbols */ #if defined ( __CC_ARM ) #define __ASM __asm /*!<

asm keyword for armcc */ #define __INLINE __inline /*!<

inline keyword for armcc */ #elif defined ( __ICCARM__ ) #define __ASM __asm /*!<

asm keyword for iarcc */ #define __INLINE inline /*!<

inline keyword for iarcc. Only avaiable in High optimization mode! */ #define __nop __no_operation /*!<

no operation intrinsic in iarcc */ #elif defined ( __GNUC__ ) #define __ASM asm /*!<

asm keyword for gcc */ #define __INLINE inline /*!<

inline keyword for gcc #endif 3. STM32F10xxx标准外设库 ? V3.0开始,STM32F10xxx标准外设库所有源 文件按照 Doxygen 格式书写;

? 用这种书写格式的代码能够很便利地生成 更加规范且内在关联性更强的文档;

? 由Doxygen生成的CHM文件完整地描述了 ST32F10xxx标准外设库全部组件,增强了程 序的可读性和可维护性. STM32F10xxx标准外设库体系结构 ? ST改进了STM32F10xxx标准外设库的体系结构 并支持CMSIS层. ? 根据应用程序的需要,可以采取2种方法使用标准 外设库(StdPeriph_Lib): ?使用外设驱动:这时应用程序开发基于外设驱动的 API( 应用编程接口).用户只需要配置文件 stm32f10x_conf.h , 并使用相应的文件 stm32f10x_ppp.h/.c 即可. ?不使用外设驱动:这时应用程序开发基于外设的寄 存器结构和位定义文件. STM32F10xxx标准外设库体系结构 ? 标准外设库(StdPeriph_Lib)支持STM32F10xxx 系列全部成员:大容量,中容量和小容量产品. ?STM32F10x_LD:STM32小容量产品 ?STM32F10x_MD:STM32中容量产品 ?STM32F10x_HD:STM32大容量产品 STM32F10xxx标准外设库体系结构 ? 根据使用的STM32产品具体型号,用户可以通过文 件 stm32f10x.h 中的预处理define来配置标准外设 库(StdPeriph_Lib),一个define对应一个产品系列. 这些define的作用范围是: ?文件 stm3210f.h 中的中断IRQ定义 ?启动文件中的向量表,小容量,中容量,大容量产品各有 一个启动文件 ?外设存储器映像和寄存器物理地址 ?产品设置:外部晶振(HSE)的值等 ?系统配置函数 ?非STM32全系列兼容或不同型号产品间有差异的功能特征 STM32F10xxx标准外设库体系结构 ? 文件包含关系 STM32F10xxx标准外设库包 ? 为了使STM32F10xxx标准外设库的使用更加灵活, 也为了改进了库的结构,ST更新了STM32F10xxx固 件库包,添加专用子文件夹来包含CMSIS及其外设 访问层相关文件. ? STM32F10xxx标准外设库包重命名为 STM32F10x_StdPeriph_Lib_VX.Y.Z. STM32F10xxx 标准外设库包 ? STM32F10xxx标准 外设库包结构 STM32F10xxx标准外设库包文件夹描述 CMSIS文件夹结构 原STM32F10xxx 固件库包与新 STM32F10xxx标 准外设库包对比 4. IO类型及数据了哦性 4.1 IO类型 ? Cortex-Mx HAL使用标准ANSI C头文件定义 的标准类型. ? 特别用类型限定词IO来访问外设的变量. ? 类型限定词IO还用于外设寄存器的调式信息的自动 生成. 4.2 数据类型 5. 异常与中断的命名 异常的命名 NVIC STM32F10xxx中断IRQ命名 ? 按照CMSIS的规范,修改了STM32F10xxx中断号码 定义命名.所有中断号码的#define在它们的名称 中都添加了后缀_IRQn. CAN1 IRQ通道名称更新 NVIC驱动 ? 从STM32F10xxx标准外设库中移除了NVIC驱动,因 此应用程序应当调用CMSIS的NVIC函数. NVIC驱动 ? STM32F10xxx标准外设库不覆盖其他的STM32F10xxx固件库 NVIC函数. ? 为了简化NVIC和STM32中断设置,在文件 misc.h/.c 中保留 了原有NVIC驱动的一些函数.它们是: void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);

void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);

? 在应用程序开发中进行中断设置时,用户可以选用CMSIS的NVIC函数,或者选用在文件 misc.h/.c 中原有固件库函数. 这些函数的优点是提供了相对简单的中断配置方法,使得用户 无需深入研究NVIC规范. 用户程序开发 6. 固件库头文件 固件库头文件 7. 固件库函数 ? 主要函数分类(详见手册) ? RRC Reset and clock control ? NVIC Nested vectored interrupt controll........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题