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等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencv HSV的具体描述

色调H: 使用角度度量,取值范围为0\~360,从红色开始按逆时针方向计算,红色为0,绿色为120,蓝色为240。它们的补色是:黄色为60,青色为180,紫色为300。通过改变H的值&#x…

Java Lambda表达式指南

一、Lambda表达式基础 1. 什么是Lambda表达式? 匿名函数:没有名称的函数函数式编程:可作为参数传递的代码块简洁语法:替代匿名内部类的更紧凑写法 2. 基本语法 (parameters) -> expression 或 (parameters) -> { statem…

面向对象设计中的类的分类:实体类、控制类和边界类

目录 前言1. 实体类(Entity Class)1.1 定义和作用1.2 实体类的特点1.3 实体类的示例 2. 控制类(Control Class)2.1 定义和作用2.2 控制类的特点2.3 控制类的示例 3. 边界类(Boundary Class)3.1 定义和作用3…

C# 封装教程

原文:C# 封装_w3cschool (注:本文为教程文章,请勿标记为付费文章!特此声明) 封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是…

量化交易 - RSRS(阻力支撑相对强度)- 正确用法 - 年均收益18%

经过研究,发现RSRS的正确用法其实是需要用到两个数据,分别是 n: 一阶拟合样本数,m:求均值方差样本数,其中n比较小 如18,m比较大 如1100 经过调优后,收益率显著上升! 如下图: &…

Oracle expdp的 EXCLUDE 参数详解

Oracle expdp的 EXCLUDE 参数详解 EXCLUDE 是 Oracle Data Pump Export (expdp) 工具中的一个关键参数,用于指定在导出过程中要排除的对象或对象类型。 一、基本语法 expdp username/password DUMPFILEexport.dmp DIRECTORYdpump_dir EXCLUDEobject_type[:name_c…

如何使用3DMAX插件PFSpliner将3D对象转化为艺术样条线?

什么是粒子流源(Particle Flow)是3DMAX的一个功能极其强大的粒子系统。它采用事件驱动模型,使用一个名为“粒子视图”的特殊对话框。在“粒子视图”中,您可以将描述粒子属性(如形状、速度、方向和一段时间内的旋转)的单个运算符组合成称为事件的组。每个操作符都提供一组…

【python】 循环语句(while)

1、循环语句 语法: while 条件:......... #只有条件为真时,才会执行while中的内容。 1.1循环语句基本使用 示例1: print("开始") while 1>2:print("人生得意须尽欢") print("结束") #输出结果&#…

OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比

OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比 目录 OOA-CNN-LSTM-Attention、CNN-LSTM-Attention、OOA-CNN-LSTM、CNN-LSTM四模型多变量时序预测一键对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于OOA-CN…

20250421在荣品的PRO-RK3566开发板的Android13下频繁重启RKNPU fde40000.npu: Adding to iommu gr

20250421在荣品的PRO-RK3566开发板的Android13下频繁重启RKNPU fde40000.npu: Adding to iommu gr 2025/4/21 14:50 缘起:电池没电了,导致荣品的PRO-RK3566的核心板频繁重启。 内核时间4s就重启。100%复现。 PRO-RK3566 Android13启动到这里 复位&#…

动态监控进程

1.介绍: top和ps命令很相似,它们都是用来显示正在执行的进程,top和ps最大的不同之处,在于top在执行中可以更新正在执行的进程. 2.基本语法: top [选项] 选项说明 ⭐️僵死进程:内存没有释放,但是进程已经停止工作了,需要及时清理 交互操作说明 应用案…

657SJBH西藏藏药特产销售管理系统

毕业论文(设计)文献综述 西藏藏药特产销售管理系统的设计与实现 近年来,随着网络技术特别是Internet技术的普及和发展,电子商务的开发和应用成为一个热门领域,在线藏药特产销售系统就是这其中的一员。 藏药产业在西藏…

栈和队列--数据结构初阶(2)(C/C++)

文章目录 前言理论部分栈的模拟实现STL中的栈容器队列的模拟实现STL中的队列容器 作业部分 前言 这期的话会给大家讲解栈和队列的模拟实现和在STL中栈和队列怎么用的一些知识和习题部分(这部分侧重于理论知识,习题倒还是不难) 理论部分 栈的模拟实现 typedef int…

RNN的理解

对于RNN的理解 import torch import torch.nn as nn import torch.nn.functional as F# 手动实现一个简单的RNN class RNN(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(RNN, self).__init__()# 定义权重矩阵和偏置项self.hidden_size hidden…

二叉查找树和B树

二叉查找树(Binary Search Tree, BST)和 B 树(B-tree)都是用于组织和管理数据的数据结构,但它们在结构、应用场景和性能方面有显著区别。 二叉查找树(Binary Search Tree, BST) 特点&#xff1…

一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving

论文地址:https://github.com/hustvl/VAD 代码地址:https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解,以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示(如:占据图、语义…

OpenCV训练题

一、创建一个 PyQt 应用程序,该应用程序能够: 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮(QPushButton): 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行…

opencv函数展示4

一、形态学操作函数 1.基本形态学操作 (1)cv2.getStructuringElement() (2)cv2.erode() (3)cv2.dilate() 2.高级形态学操作 (1)cv2.morphologyEx() 二、直方图处理函数 1.直方图…

iPhone 13P 换超容电池,一年实记的“电池循环次数-容量“柱状图

继上一篇 iPhone 13P 更换"移植电芯"和"超容电池"🔋体验,详细记录了如何更换这两种电池,以及各自的优略势对比。 一晃一年过去,时间真快,这次分享下记录了使用超容电池的 “循环次数 - 容量(mAh)…

基于 pnpm + Monorepo + Turbo + 无界微前端 + Vite 的企业级前端工程实践

基于 pnpm Monorepo Turbo 无界微前端 Vite 的企业级前端工程实践 一、技术演进:为什么引入 Vite? 在微前端与 Monorepo 架构落地后,构建性能成为新的优化重点: Webpack 构建瓶颈:复杂配置导致开发启动慢&#…