STM32F4 固件库就是函数的集合,那么对这些函数有什么要求呢?
这里就涉及到一个 CMSIS 标准的基础知识。经常有人问到 STM32 和 ARM 以及 ARM7 是什么关系这样的问题,其实 ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 Cortex-M4 芯片,他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。所以你会发现,不同公司设计的Cortex-M4 芯片他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种 Cortex-M4 内核芯片的片上外设也会有很大的区别,比如 STM32F407 和 STM32F429,他们的片上外设就有很大的区别。既然大家都使用的是 Cortex-M4 核,也就是说,本质上大家都是一样的,这样 ARM 公司为了能让不同的芯片公司生产的 Cortex-M4 芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准 CMSIS 标准(Cortex Microcontroller Software Interface Standard)
,翻译过来是ARM CortexTM 微控制器软件接口标准
。ST 官方库就是根据这套标准设计的。
从图中可以看出,CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交
道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公
司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库
函数必须按照 CMSIS 这套规范来设计。
其实不用这么讲这么复杂的,一个简单的例子,我们在使用 STM32 芯片的时候首先要进
行系统初始化,CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公
司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。CMSIS 还对各个外设驱
动文件的文件名字规范化,以及函数名字规范化等等一系列规定
适用于STM32F4系列的STM32Cube MCU软件包(HAL,低层API和CMSIS(CORE,DSP,RTOS),USB,TCP / IP,文件系统,RTOS,图形-附带在ST板上运行的示例:STM32 Nucleo,发现套件和评估板)
STM32Cube是意法半导体的一项原始计划,旨在通过减少开发工作量,减少时间和成本来显着提高开发人员的生产率。STM32Cube涵盖了整个STM32产品组合。
STM32Cube包括STM32CubeMX,这是一种图形软件配置工具,允许使用图形向导生成C初始化代码。它还包括由STM32Cube硬件抽象层(HAL)和低层(LL)API组成的STM32CubeF4 MCU软件包,以及一组一致的中间件组件(RTOS,USB,FAT文件系统,图形和TCP / IP)。TouchGFX图形软件堆栈也作为STM32Cube生态系统的一部分包含在STM32CubeF4 MCU软件包中。它可免费用于STM32微控制器的生产和重新分发。提供了所有嵌入式软件实用程序,以及在STMicroelectronics板上运行的全套示例。
STM32Cube HAL是STM32嵌入式软件层,可确保在STM32产品组合中实现最大的可移植性,而LL API构成了一个快速,轻巧,面向专家的层,与HAL相比,它更接近于硬件。HAL和LL API可以同时使用,但有一些限制。HAL和LL API均已投入生产,并且已按照MISRA- C®:2004指南进行开发,但有一些已记录的例外情况(按需提供报告)和ISO / TS16949。此外,特定于ST的验证过程更加深入级资格。
STM32CubeF4将所有通用嵌入式软件组件收集到一个封装中,该组件是在STM32F4微控制器上开发应用程序所需的。遵循STM32Cube的倡议,这组组件具有高度的可移植性,不仅在STM32F4系列内,而且在其他STM32系列内也是如此。此外,低层API以可移植性和简便性为代价,为STM32CubeF4 HAL提供了替代的高性能,低占用空间的解决方案。
HAL和LL API可在开源BSD许可证中使用,以方便用户使用。