stm32学习
九.stm32与HAL库
2.HAL库框架
总架构:

文件介绍:

ppp是某一外设,ex是拓展功能
HAL库API函数和变量命名规则:

HAL库对寄存器位操作的相关宏定义:

HAL库的回调函数:

3.STM32启动过程
MDK编译过程中产生的文件:

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

MAP文件打开方式:
- 在Output文件夹中找
- 在keil中编译后点击总文件夹
例子:
程序段交叉引用关系:
Section Cross Referencesmain.o(i.main) refers to stm32f10x_rcc.o(i.RCC_APB2PeriphClockCmd) for RCC_APB2PeriphClockCmd删除映像未使用的程序段:
Removing Unused input sections from the image.Removing misc.o(i.NVIC_Init), (112 bytes).映射符号表:
Image Symbol TableLocal SymbolsSymbol Name Value Ov Type Size Object(Section)../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTEGlobal SymbolsSymbol Name Value Ov Type Size Object(Section)__Vectors_Size 0x000000ec Number 0 startup_stm32f10x_md.o ABSOLUTE映射内存分布图:
Memory Map of the imageImage Entry point : 0x080000edLoad Region LR_IROM1 (Base: 0x08000000, Size: 0x000005c0, Max: 0x00010000, ABSOLUTE)Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x000005c0, Max: 0x00010000, ABSOLUTE)Exec Addr Load Addr Size Type Attr Idx E Section Name Object0x08000000 0x08000000 0x000000ec Data RO 3205 RESET startup_stm32f10x_md.o映像组件大小:
Image component sizesCode (inc. data) RO Data RW Data ZI Data Debug Object Name70 0 0 0 0 866 delay.o
M3/M4/M7等内核复位后:
- 从地址0x0000处取出堆栈指针MSP的初始值,该值就是栈顶地址
- 从地址0x0004处取出程序计数器指针PC的初始值,该值是复位向量
在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存
BOOT引脚的默认值都是0
F4的启动模式中不同引脚的区别和F1的一样
F7的启动模式中不同引脚的区别:

允许将自举存储器地址配置从0x0000到0x2004FFFF的任意地址(16KB的整数倍)
H7的启动模式:

总的启动过程:
- 初始化MSP
- 初始化PC
- 设置堆栈大小
- 初始化中断向量表
- 调用初始化函数
- 调用__main
中断向量表包含指向复位中断函数的指针,PC是复位中断函数的地址
复位中断服务函数(在启动文件中):

WEAK表示可被重定义,LDR R0,=main + BX R0表示调用__main函数
systeminit就是初始化函数,__main函数用于初始化库函数等
堆是编译器自动分配和释放,存放函数参数、局部变量等,栈由程序员分配和释放,如malloc、calloc、realloc等