当前位置: 首页 > news >正文

stm32week12

stm32学习

九.stm32与HAL库

2.HAL库框架

总架构:

图片消失了

文件介绍:

图片消失了

ppp是某一外设,ex是拓展功能

HAL库API函数和变量命名规则:

图片消失了

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

图片消失了

HAL库的回调函数:

图片消失了

3.STM32启动过程

MDK编译过程中产生的文件:

图片消失了

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

MAP文件组成:

图片消失了

MAP文件打开方式:

  1. 在Output文件夹中找
  2. 在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等内核复位后:

  1. 从地址0x0000处取出堆栈指针MSP的初始值,该值就是栈顶地址
  2. 从地址0x0004处取出程序计数器指针PC的初始值,该值是复位向量

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存
BOOT引脚的默认值都是0
F4的启动模式中不同引脚的区别和F1的一样
F7的启动模式中不同引脚的区别:

图片消失了

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

H7的启动模式:

图片消失了

总的启动过程:

  1. 初始化MSP
  2. 初始化PC
  3. 设置堆栈大小
  4. 初始化中断向量表
  5. 调用初始化函数
  6. 调用__main

中断向量表包含指向复位中断函数的指针,PC是复位中断函数的地址
复位中断服务函数(在启动文件中):

图片消失了

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

相关文章:

  • 如何在量子计算时代保障 Sui 的安全性
  • (14)VTK C++开发示例 --- 将点投影到平面上
  • 中通 Redis 集群从 VM 迁移至 PVE:技术差异、PVE 优劣势及应用场景深度解析
  • 【GIT】为什么要变基下拉,变基下拉失败,提示没有暂存如何解决?
  • 使用QEMU(8.2.10)调试ARM64 Linux内核6.6.30
  • 【STM32单片机】#10.5 串口数据包
  • 50道SQL经典练习题
  • 如何通过API获取淘宝评论?实战讲解
  • JVM面试题学习
  • JumpServer多用户VNC桌面配置指南:实现多端口远程访问
  • 互联网大厂Java面试:Spring Cloud与微服务的奇妙之旅
  • Canvas教程002—canvas上下文对象与浏览器支持
  • 字符串拼接问题的最佳解决方案
  • 12.QT-Combo Box|Spin Box|模拟点餐|从文件中加载选项|调整点餐份数(C++)
  • Java学习手册:HTTP 协议基础知识
  • SQL Server基础
  • 240421 leetcode exercises
  • 分数线降低,25西电马克思主义学院(考研录取情况)
  • leetcode day 35 01背包问题 416+1049
  • 智能安全用电系统预防电气线路老化、线路或设备绝缘故障
  • 三部门:对不裁员少裁员的参保企业实施稳岗返还政策至今年底
  • 西安一男子在闲鱼卖手机卷入电诈案,不愿前往异地接受调查被列网逃
  • 江西九江市人大常委会原副主任戴晓慧主动交代问题,接受审查调查
  • 徐之凯评《突如其来的勇气》|早熟的抵抗
  • 人均300+的日料,是后厨拆开的预制料理包
  • 从高铁到住房:“富足议程”能否拯救美国的进步主义?