基于 CMSIS 应用程序文件描述

STM32 开发文件结构分布

HAL 库的用户配置文件(stm32f1xx_hal_conf.h)
- 裁剪 HAL 库外设驱动源码(不进行编译)
- /#ifdef /#endif 的使用
- 设置外部高速晶振频率(HSF)(根据开发板实际情况设置)
- 设置外部低速晶振频率(根据开发板实际情况设置)
HAL 库使用注意事项
- 使用 HAL 库出现问题,还是得通过参考手册检查是否硬件操作是否有问题
- 尽量不通过修改库源码实现功能,这样不方便库更新
- HAL 库可能会存在错误,要有质疑精神
- 有些 HAL 库 API 函数执行效率偏低,我们可能会直接通过操作寄存器的方式代替
- Date:2023-05-25
- Time:12:53
- Subject: none
- Tags: #stm32
[[2023-05]]
CMSIS 简介
- CMSIS (微控制器软件接口标准):Cortex Microcontroller Software Interface Standard,是由 ARM 和与其合作的芯片厂商、软件工具厂商,共同制定的标准

HAL 库简介
- ST 为了方便用户开发 STM32 芯片开发提供了三种库:
- 标准外设库 (Standard Peripheral Libraries)
- F0/F1/F3/F2/F4/L1
- 目前已停止维护
- HAL 库(硬件抽象层):Hardware Abstraction Layer
- 全系列兼容
- ST 目前主推的库
- 兼容性、易移植性
- 效率低
- LL 库:Low Layer
- 全系列兼容
- 与 HAL 库捆绑发布
- 轻量级、效率高
- 不匹配部分复杂外设
STM32Cube 固件包浅析
STM32Cube 固件包文件夹简介



CMSIS 文件夹关键文件


Device 和 Include 文件夹的关键文件介绍

- 可以从 cube 固件包里面找
HAL 库框架结构
HAL 库文件夹结构
- Src(Source):外设驱动源码
- Inc(Include):外设驱动源码头文件
HAL 库文件介绍

HAL 库 API 函数和变量命名规则
- 初始化/反初始化函数:HAL_PPP_Init(), HAL_PPP_DeInit()
- 外设读写函数:HAL_PPP_Read(), HAL_PPP_Write(), HAL_PPP_Transmit(), HAL_PPP_Receive()
- 控制函数:HAL_PPP_Set (), HAL_PPP_Get ()
- 状态和错误:HAL_PPP_GetState (), HAL_PPP_GetError ()
HAL 库对寄存器位操作的相关宏定义

HAL 库回调函数
- 此类函数通常被_weak 修饰(弱函数),允许用户重新定义该函数
- Date:2023-06-04
- Time:22:41
- Subject: none
- Tags: #stm32
[[2023-06]]
MAP 文件浅析
- MDK 编译过程文件(11 种)

- MAP 文件概念和作用
- MAP 文件是 MDK 编译代码后,产生的集程序、数据及 IO 空间的一种映射列表文件
- 简单说就是包括了:各种.c 文件、函数、符号等的地址、大小、引用关系等信息
- 分析各.c 文件占用 FLASH 和 RAM 的大小,方便优化代码
- MAP 文件组成

STM32 启动过程
- STM32 启动模式(F1/F4/F7/H7)(也称自举模式)
- M3/M4/M7 等内核复位后,做的第一件事:
- 从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值,该值就是栈顶地址
- 从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值是复位向量

- STM32 启动模式(F1)
- 在系统复位后,SYSCLK 的第 4 个上升沿,BOOT 引脚的值将被锁存

- STM32 启动过程(内部 FLASH 启动为例)

- .s 启动文件介绍

- Reset_Handler 函数介绍(汇编)
1 2 3 4 5 6 7 8 9
| Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP
|
1. EXPORT:标明全局属性,可被外部调用
2. IMPORT:申明来自外部文件,类extern
3. PROC:定义子程序
4. ENDP:表示子程序结束
5. WEAK:弱定义
- 堆栈简介

- 函数局部变量较多,嵌套关系复杂时,需加大栈大小(Stack_Size)!
32 启动过程图解
