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 References

    main.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 Table

    Local Symbols

    Symbol Name                              Value     Ov Type        Size  Object(Section)

    ../clib/angel/boardlib.s                 0x00000000   Number         0  boardinit1.o ABSOLUTE

    Global Symbols

    Symbol Name                              Value     Ov Type        Size  Object(Section)

    __Vectors_Size                           0x000000ec   Number         0  startup_stm32f10x_md.o ABSOLUTE

映射内存分布图:
Memory Map of the image

  Image Entry point : 0x080000ed

  Load 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        Object

    0x08000000   0x08000000   0x000000ec   Data   RO         3205    RESET               startup_stm32f10x_md.o

映像组件大小:
Image component sizes


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Object Name

        70          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等

相关推荐
小弥儿1 小时前
开源 VoiceStudio,声音克隆|配音|有声书一站式本地完成
学习·开源·github
点心的游戏开发世界4 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
香芋芋圆5 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
点心的游戏开发世界6 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
tju新生代魔迷7 小时前
Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
笔记·学习
智购科技自动贩卖机7 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
长江后浪博客7 小时前
ESP32-SOLO-1 在 ESP-IDF v5.5 下启动不断重启问题分析与解决
单片机·嵌入式硬件·嵌入式·esp32·freertos·esp-idf
单片机仿真设计8 小时前
【proteus仿真】基于 STM32 单片机智能仓库设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
星游路8 小时前
单片机·电子时钟
单片机·嵌入式硬件
我爱cope9 小时前
【计算机网络 | 网络层11:ICMP 协议:Ping 和 Traceroute 的底层原理】
网络·学习·计算机网络