完整教程:【stm32】cube固件解析和放入工程(HAL_F4)
首先cmd中运用命令生成文件夹方便观看
tree /f /a > tree.txt
生成的有60000多行,不要用/f就只有文件夹
_htmresc一般这个名就是图片资源和html等,不管
文档。就是Documentation就不管
Projects存放官方献出的示例工程,包含各种外设的应用模板和复杂应用。参考使用。
Drivers存放最核心的底层驱动,包括CMSIS内核文件、MCU外设驱动等。这是每个工程都必须的。
Middlewares
存放中间件,即一些功能丰富的软件库,如ST自家的USB驱动、第三方操作系统FreeRTOS、网络协议栈LwIP和文件系统FatFs等。按需取
Utilities
包含针对ST官方评估板(开发板)的特定代码(如BSP驱动)和资源。不管
详细看Drivers文件夹
xx_HAL_Drvicer文件夹
一个就是.xxx.chm文件经过编译的HTML帮助文件,它包含了xxx系列微控制器的完整技术参考手册。你可以把它理解为ST官方为开发者准备的“产品说明书”或“制作指南”。双击打开。数据手册首要服务于硬件工程师,而用户手册(.chm)主要服务于软件工程师。
CMSIS
CMSIS
- Cortex微控制器软件接口标准。这是由ARM制定的通用标准,确保了不同芯片厂商的Cortex-M内核单片机在软件层面有一定的兼容性。你可以把它理解为计算机的"主板和CPU的基本驱动"。
Documentatioin/不用想
Include/ 文件和Core/Include/下面全部一样
Core/
- 与芯片无关的纯内核支持
Device/
Device/ST/STM32F4xx/
- ST公司为STM32F4系列添加的设备特定支持,其中include/下要复制到工程中(可以要哪个芯片用哪个)。source/文件夹下的有对应arm,gcc,iar三个环境的启动文件(启动文件可以自己用c语言写,不难,自己写可以和平台初始化记录放一起)。
启动文件 (
startup_stm32f4xxxx.s
):这是芯片上电后运行的第一段代码。它包含了堆栈初始化、中断向量表(告诉你发生某个中断时该跳转到哪里去执行)、以及最终调用main
函数的复位程序。这是不可或缺的。系统初始化文件 (
system_stm32f4xx.c
):包含SystemInit()
函数,在启动文件里被调用,用于初始化芯片的时钟系统(设置PLL,配置HCLK, PCLK等),让CPU和外设运行在正确的频率上。这个文件的头文件在core/ 下面源文件是在source/下面。内核相关头文件:如
core_cm4.h
,定义了Cortex-M4内核的寄存器、NVIC(嵌套向量中断控制器)、SysTick(系统定时器)等的访问方式。在 core/ 或者Include/设备特定头文件 (
stm32f4xx.h
):这是最重要的设备头文件。它包含了你的STM32F4型号的所有外设寄存器定义(即,每个寄存器地址的宏定义)。当你写GPIOA->ODR = 0xFFFF;
时,其实就是这个文件定义了GPIOA
和ODR
。在include/
DSP/
- 数字信号处理库 (可选)
作用:提供Cortex-M4内核DSP指令集的软件接口,让你能用C语言轻松调用底层硬件加速功能。
RTOS/
- 实时操作系统接口 (可选)
CMSIS-NN (神经网络库)
CMSIS-DAP (调试访问端口)
开源的JTAG/SWD调试器固件,用于连接电脑和目标MCU,你观察过H7的是没有这个的,拥护基于Cortex-M0/M3/M4,因为这个给做调试器的MCU用的。
构建自己的Project
cmake或者make,要额外有交叉编译工具和CMakeLists.txt文件,还要自己搞研发环境。不过我写了对应文章并开源工程模版提供使用。就是这里只说明用什么库,不说明用什么方式,因为我肯定用的
一个基本的stm32工程需的库了。这样有什么好处?就是首先就是ST的第三方库,把CMSIS的Include/和Device/,还有STM32xxxx_HAL_Driver/。只要这三个就
可以多个添加Device/ST/下的文件夹,比如同时有f4和f1和h7,STM32xxxx_HAL_Driver/。甚至可以添加非ST的芯片,比如我用了Generic
未知/裸机系统嵌入式、RTOS、裸机研发,这时候就可以通过配置cmake管理配置选项搞大型工程。