今儿个第N次查看ST的标准外设库---STM32F10x_StdPeriph_Lib_V3.5.0,忽然就意识到它的这个结构安排(某些文件放到某个目录 )不那么理所当然啦。
查...................
先来看看ARM公司对CMSIS的定义:
ARM® Cortex™ 微控制器软件接口标准 (CMSIS--Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。CMSIS 可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程,并缩短新设备的上市时间。
软件的创建是嵌入式产品行业的一个主要成本因素。通过跨所有 Cortex-M 芯片供应商产品将软件接口标准化(尤其是在创建新项目或将现有软件迁移到新设备时),可以大大降低成本。
我们知道,不同厂家,比如FSL,ST,Energy Micro等不同厂家的内核都是使用Cortex M,但是这些MCU的外设却大相径庭,外设的设计、接口、寄存器等都不一样,因此,一个能够非常熟练使用STM32软件编程的工程师很难快速地上手开发一款他不熟悉的,尽管是Cortex M内核的芯片。而CMSIS的目的是让不同厂家的Cortex M的MCU至少在内核层次上能够做到一定的一致性,提高软件移植的效率。
疑问:
就STM32F10x_StdPeriph_Lib_V3.5.0而言,stm32f10x.h、system_stm32f10x.h and system_stm32f10x.c以及startup_stm32f10x_xx.s这四个文件,放在CMSIS文件夹下,总感觉不合适,这还怎么讲:CMSIS是 Cortex-M 处理器系列的,与供应商无关的硬件抽象层?
stm32f10x.h:STM32F10x CMSIS Cortex-M3 Device Peripheral Access Layer Header File
system_stm32f10x.h and system_stm32f10x.c:STM32F10x CMSIS Cortex-M3 Device Peripheral Access Layer System Files
startup_stm32f10x_xx.s:STM32F10x CMSIS startup files
也许应该看看这几个文件的实际内容了。。。问题先放在这,,,留待以后。
以下copy内容:留存----------------------
1. CMSIS的结构:
CMSIS 包含以下组件:
- CMSIS-CORE:提供 Cortex-M0、Cortex-M3、Cortex-M4、SC000 和 SC300 处理器与外围寄存器之间的接口
- CMSIS-DSP:包含以定点(分数 q7、q15、q31)和单精度浮点(32 位)实现的 60 多种函数的 DSP 库
- CMSIS-RTOS API:用于线程控制、资源和时间管理的实时操作系统的标准化编程接口
- CMSIS-SVD:包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件
2、框架
再看一张图吧:
3. 已经支持的MCU和工具链:
4. 如何使用CMSIS,需要哪些文件,以Freescale Kinetis L系列举例。
- Cortex-M3内核及其设备文件(core_cm0.h + core_cm0.c)
- Cortex-M3内核及其设备文件(core_cm0.h + core_cm0.c)
- 访问Cortex-M0内核及其设备:NVIC等
- 访问Cortex-M0的CPU寄存器和内核外设的函数
- Cortex-M3内核及其设备文件(core_cm0.h + core_cm0.c)
- 微控制器专用头文件(device.h) - MKL25Z4.h
- 指定中断号码(与启动文件一致)
- 外设寄存器定义(寄存器的基地址和布局)
- 控制微控制器其他特有的功能的函数(可选)
- 指定中断号码(与启动文件一致)
- 微控制器专用系统文件(system_device.c) -- system_MKL25Z4.h + system_MKL25Z4 .c
- 函数SystemInit,用来初始化微控制器
- 函数 void SystemCoreClockUpdate (void); 用于获取内核时钟频率
- SystemCoreClock,该值代表系统时钟频率
- 微控制器的其他功能(可选)
- 函数SystemInit,用来初始化微控制器
- 编译器启动代码(汇编或者C)(startup_device.s) - startup_MKL25Z4.s for Keil
- 微控制器专用的中断处理程序列表(与头文件一致)
- 弱定义(Weak)的中断处理程序默认函数(可以被用户代码覆盖)