【06】STM32·HAL库开发-STM系统框架 | STM32寻址范围 | STM32存储器映射 | STM32寄存器映射

news2024/11/16 7:26:56

目录

  • 1.STM32系统框架(了解)
    • 1.1Cortex M内核 & 芯片
    • 1.2F1系统架构
      • 1.2.1F1系统框架简图
      • 1.2.2F1系统框架总图
    • 1.3F4系统架构
      • 1.3.1F4系统框架简图(F407为例)
      • 1.3.2F4系统框架总图
    • 1.4F7系统架构
      • 1.4.1多重AHB总线矩阵
      • 1.4.2F7系统结构简图
    • 1.5H7系统架构
      • 1.5.1H7系统架构简图
      • 1.5.2H7总线主设备与总线从设备互连表
  • 2.STM32的寻址范围?(了解)
  • 3.存储器映射(熟悉)
    • 3.1存储器功能划分(F1为例)
    • 3.2Block0(FLASH)功能划分(F1为例)
    • 3.3Block1(SRAM)功能划分(F1为例)
    • 3.4Block2(外设)功能划分(F1为例)
  • 4.寄存器映射(熟悉)
    • 4.1STM32寄存器分类
    • 4.2寄存器映射(F1为例)
    • 4.3寄存器描述解读(F1为例)
    • 4.4寄存器映射举例(F1为例)
    • 45寄存器地址计算
  • 5.总结(了解)

1.STM32系统框架(了解)

1.1Cortex M内核 & 芯片

  Cortex-M3内核或M4/M7等和调试系统都是ARM公司设计,由ARM公司授权给其他芯片厂商,由其他芯片厂商添加内部总线、外设、存储器、时钟和复位 、IO以及芯片外部的外壳。除了内核和调试系统都是有芯片制造商设计开发,比如说ST公司等等。总结成一句话:MCU厂商,经ARM公司授权(授权内核、调试系统,调试系统内嵌到内核里面,绑定在一起的),添加不同的外设 = 各种XX32芯片(例如:ST公司的STM32,还有其他公司的APM32、GD32、MM32、HC32等》)。
在这里插入图片描述

1.2F1系统架构

在这里插入图片描述
  上表中的AHB为高级高性能总线,APB为高级外围总线,二者之间需要一个连接的桥梁。主动单元可以主动发起通信或者给被动单元发送工作指令,被动单元不能向主动单元发送, 该内容参考STM32F10xxx参考手册_V10(中文版).pdf 2.1小节。

1.2.1F1系统框架简图

  下图是F1系统框架简图,以总线矩阵为分界线,左侧为主动单元,总共有四个主动单元,DCode总线也就是D-Bus,System总线也就是S-Bus,以及DMA1和DMA2;右侧为被动单元,要访问APB1或者APB2上的外设,就要经过AHB系统总线再经过桥才能访问挂载在APB1或者APB2上的外设。ICode总线直接连接Flash接口,不需要经过总线矩阵,所以ST公司并没有将其罗列进主动单元或者被动单元,它也属于主动单元,只是没有列进去,没有经过总线矩阵。FLASH中存储程序,内核就可以不通过总线矩阵直接读取程序指令,因为总线上很多条路,可能需要等待。
在这里插入图片描述

1.2.2F1系统框架总图

  在F1系列中官方给定最大时钟频率为72MHz(不考虑超频的情况,正常稳定工作为72MHz),总线时钟频率:AHB:72MHz (Max);APB1:36MHz (Max);APB2:72MHz (Max)。分APB1和APB2不同频率总线的原因是,不同外设需要的频率不同,满足不同外设的频率需求。
  在STM32F103ZET6数据手册中,首先找到总线矩阵(Bus Matrix),然后找到四个主动单元、四个被动单元。
在这里插入图片描述
  下图为M3内核,左侧为芯片外部的接口,可以理解为引出到芯片引脚上的接口,左侧上半部分是跟踪调试用不到,下半部分是下载仿真接口,比如说JTAG接口、SWD接口,右侧的为跟踪调试控制器和左侧上班部分一起使用也用不到。
在这里插入图片描述
  下图AHB总线上的左侧SDIO用于连接外部的SD卡;左侧的是复位和时钟,连接外部高速晶振;下方是通向APB1和APB2的桥,APB1最大时钟频率为36MHz,右侧很多外设挂载在APB1总线上,
在这里插入图片描述
  ICode总线也就是Ibus总线,直接连接到内部的FLASH。
在这里插入图片描述
  当然还有简图上没有的,首先是电源部分:
在这里插入图片描述
  电源管理部分,后面学习低功耗模式会用到,还有独立看门狗IWDG,后备区域电池VBAT 、RTC等。
在这里插入图片描述
  此处讲解的为非互联型的小容量、中容量、大容量产品F1系列框架图,在F1系列中还有互联型产品系统框架图,也是类似的,只是添加了网口的主动单元。所以互联型产品中有5个主动单元,且有3个被动单元,在正点原子开发板都不是用的互联型的。

1.3F4系统架构

  在F4系统架构中有8个主控总线和7个被控总线。下表中的OTG为主从、HS为高速。如果是F407芯片,将每一辅助没有SRAM3。AHB1总线包含挂载APB1、APB2、AHB1总线上的所有外设,AHB2上并没有桥。
在这里插入图片描述

1.3.1F4系统框架简图(F407为例)

  首先还是看总线矩阵,S0-S7总共有8个对应的就是8个主控总线。竖直方向M0-M6有7个接口对应被控总线。主控总线连接的是主动发起通信的一方,有小圆圈○的代表路是通的,CCM RAM只能存数据,优点访问速度快(直接和内核连接,通过D总线连接),缺点不支持DMA。
总线时钟频率(红色对应F407,右侧为F429):
AHB1/2:168/180MHz (Max)
APB1:42/45MHz (Max)
APB2:84/90MHz (Max)
在这里插入图片描述

1.3.2F4系统框架总图

  F40系统框架总图如下:
在这里插入图片描述
  首先找到总线矩阵,左侧为8个主控总线,DMA2中有存储器、外设总线所以有根总线指向它;右侧为7个被控总线,D总线和I总线访问FLASH,AHB3其实就是简图中M6连接的FSMC静态存储器控制器;M4内核包含JTAG接口、SWD接口、调试跟踪接口(用不到)、MCU、ETM、NVIC、FPU。CCM data RAM只能存储数据,直接和D-BUS总线连接,被内核直接访问,速度快。AHB3主要挂载了FSMC外设,用于扩展外部存储器。
在这里插入图片描述

1.4F7系统架构

在这里插入图片描述

1.4.1多重AHB总线矩阵

在这里插入图片描述

1.4.2F7系统结构简图

  AXI多重AHB就是总线桥,一端通过AXIM总线连接内核,另一端有4个输出,其中一个用64位的总线连接到FLASH。另外三个连接到AHB总线。①上面一排就是12个主控制器,有3个接到总线桥,1个接到AHBP总线与内核连接。② 右侧为8个从控制器,右侧上方第一条是连接到内核,通过DTCM返回到RAM。DTCM RAM即可存放数据,也可存放指令。ITCM RAM支持CPU时钟速度访问,0个等待周期。
总线时钟频率
AHB1/2:216MHz (Max)
APB1:54MHz (Max)
APB2:108MHz (Max)
在这里插入图片描述

1.5H7系统架构

在这里插入图片描述

1.5.1H7系统架构简图

  AXI总线矩阵、AHB总线矩阵分成了三个域,低功耗模式时可以仅使用用到的域。①为总线主设备,②为总线从设备。
ITCM用于存放程序,DTCM用于存放数据。
总线时钟频率(主频480MHz):
AHB1/2/3/4:240MHz (Max)
APB1/2/3/4:120MHz (Max)
在这里插入图片描述

1.5.2H7总线主设备与总线从设备互连表

  表中主设备18和从设备20个,表中数字21代表,经过2、1代表的总线矩阵。
在这里插入图片描述

2.STM32的寻址范围?(了解)

  32位的单片机可以有32根地址线(每根地址线有两种状态:导通或不导通);单片机内存地址访问的存储单元是按字节(8位)编址的(而不是bit)。1根地址线,有2个地址,那么最多可以访问2个字节的内存空间。
在这里插入图片描述
  STM32寻址大小:2^32= 4G(4G是编号数,每个编号都可以访问一个字节)(字节);STM32寻址范围:0x0000 0000 ~ 0xFFFF FFFF

3.存储器映射(熟悉)

  存储器指可以存储数据的设备(比如说SRAM、FLASH等),本身没有地址信息,对存储器分配地址的过程称为存储器映射。
  下图是星忆可以的XRAM芯片,可以理解为SRAM的升级版,芯片有19根地址线(可以访问的地址编号个数为219=512K)、16根数据线(每个编号按2个字节进行编址,所以该芯片容量为2×512k=1024k=1MB)。将该芯片进行存储器映射,地址范围0512k,映射方式很多种,比如说映射到0~512k(从0x00x80000),还有其他映射方式如下所示:
在这里插入图片描述
  上面的芯片一个地址可以访问两个字节,单片机一个地址可以访问一个字节。以下以F1系列为例,其他划分可以在正点原子任意型号开发板开发指南的5.3.3小节的存储器映射找到存储器划分。

3.1存储器功能划分(F1为例)

  ST将4GB(2^32)地址空间分成8个块。挂载在APB1、APB2上的外设全部映射在Block2存储块。具体的映射图可以参考STM32F103ZET6.pdf(英文版数据手册),H7系列可以查找参考手册《存储器组织结构》部分。
在这里插入图片描述

3.2Block0(FLASH)功能划分(F1为例)

在这里插入图片描述

3.3Block1(SRAM)功能划分(F1为例)

  片内内存为64KB,其余为保留,保留空间较大,如果ST公司想扩展更多的内存,在保留空间里就可以映射很多的SRAM地址。
在这里插入图片描述

3.4Block2(外设)功能划分(F1为例)

在这里插入图片描述

4.寄存器映射(熟悉)

  寄存器是单片机内部一种特殊的内存,可以实现对单片机各个功能的控制。普通的存储器SRAM只有存储数据的功能。简单来说,寄存器就是单片机内部的控制机构。学习STM32就是学习如何操作寄存器,从而来控制单片机进行工作,无论是HAL库开发、寄存器开发根本目的是操作寄存器,来控制STM32进行工作。
  下面以八个开关比喻单片机内部一个8位寄存器,默认值都是0,也就是00000000,如果将右侧第一位置一,可能对单片机的某个功能产生影响。
在这里插入图片描述

4.1STM32寄存器分类

  内核寄存器可以为Cortex-M3/M4/M7内核中的寄存器,外设寄存器指的是片上外设。
在这里插入图片描述

4.2寄存器映射(F1为例)

  寄存器是特殊的存储器,给寄存器地址命名的过程,就叫寄存器映射。将寄存器地址0x4001080C映射为寄存器名字为GPIOA_ODR,其中ODR为数据输出寄存器。
在这里插入图片描述

4.3寄存器描述解读(F1为例)

  STM32的GPIO一组16个,例如PA0~PA15。① 寄存器名字,如果是A组就是GPIOA_ODR;②以GPIOA为例,基地址为0x40010800,偏移量是相对于基地址而言,则GPIOA_ODR地址为0x40010800+0x0C,寄存器复位值为0x0000 0000;③寄存器位表,寄存器从031有32个位,位1631保留;④功能描述,如果将位0置一,则GPIOA01口输出1,也就是3.3V,对寄存器位0写0,则输出0,也就是0V。
在这里插入图片描述

4.4寄存器映射举例(F1为例)

直接操作寄存器地址地址0x4001 080C是GPIOA_ODR寄存器的地址,而对计算机而言地址只是一个数字,强转为指针类型的usigned int&变为指针,指针就是地址,然后在前面加*取指针的值,然后去操作该地址上的值,一次性赋值32位,也就是PA0~PA15全部输出1):

*(unsigned int *)(0x4001 080C) = 0XFFFF;

定义一个名字后再操作

#define    GPIOA_ODR  	*(unsigned int *)(0x4001 080C)
GPIOA_ODR = 0XFFFF

45寄存器地址计算

  为了方便编写代码及使用,我们将寄存器地址分为三个部分:

  1. 总线基地址(BUS_BASE_ADDR):F1系列,有AHB总线经过桥分为APB1和APB2总线;H7系列,有AHB1/2/3/4经过桥变为APB1/2/3/4。
  2. 外设基于总线基地址的偏移量(PERIPH_OFFSET):假设外设是挂载在APB2总线上的,知道偏移量就可以知道外设寄存器的基地址。
  3. 寄存器相对外设基地址的偏移量(REG_OFFSET):寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET

总线基地址
在这里插入图片描述
  APB1总线的基地址,也叫外设基地址(PERIPH_BASE),此表的偏移量:是相对外设基地址(PERIPH_BASE)来说的。(参考资料:STM32F10xxx参考手册_V10(中文版).pdf 2.3小节
GPIO外设基地址及偏移量
在这里插入图片描述
  此表的偏移量:是相对APB2外设基地址(APB2PERIPH_BASE)来说的。
GPIOA外设基地址及偏移量
在这里插入图片描述
  此表的偏移量:是相对GPIOA外设基地址(GPIOA_BASE)来说的。
GPIOA_ODR寄存器地址计算过程
1,获取外设挂在哪个总线上面?查:系统结构图
2,获取总线基地址,APB2总线基地址:0X4001 0000
3,获取外设地址偏移量,GPIOA相对APB2总线偏移量是:0X800
4,获取寄存器地址偏移量,ODR相对GPIOA外设基地址的偏移量是:0X0C
寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET
GPIOA_ODR = 0X4001 0000 + 0X800 + 0X0C = 0X4001 080C
使用结构体,可以很方便的完成对寄存器的映射:详见:stm32f103xe.h,725行开始)结构体分配内存是连续的空间,每个变量是4个字节,总共28个字节,而寄存器偏移地址正好每次偏移4,刚好和该结构体对齐,所以利用该特点可以一次性映射7个寄存器地址。

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

GPIOA_BASE: 0X4001 0800

  在STM32中将基地址GPIOA_BASE强转为GPIO_TypeDef*类型指针,映射为GPIOA一次性包含7个寄存器。

#define   GPIOA     ((GPIO_TypeDef *)GPIOA_BASE)
&GPIOA->CRL: 0X4001 0800
&GPIOA->CRH: 0X4001 0804
&GPIOA->IDR: 0X4001 0808
&GPIOA->ODR: 0X4001 080C
实际应用:
GPIOA-> ODR = 0XFFFF

stm32f103xe.h主要组成部分:
在这里插入图片描述

5.总结(了解)

在这里插入图片描述

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

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

相关文章

如何防止U盘复制电脑文件?

在我们的工作中,经常需要将重要的文件存在电脑中,我们必须要妥善的保护这些重要数据,那么该如何防止U盘复制电脑中的文件呢? 要想防止U盘复制电脑文件,可从三个方面入手,分别是: 禁止电脑使用U…

吴恩达471机器学习入门课程1第2周——线性回归(单变量)

文章目录 Linear Regression1 导包2 - 问题陈述3 - 数据集可视化数据 4 - 线性回归复习5 - 计算代价代价函数模型预测实现 6 - 梯度下降批量梯度下降法学习参数 Linear Regression 您将使用一个变量实现线性回归,以预测餐厅特许经营的利润。 1 导包 首先&#xf…

【电路】电路与电子技术基础 课堂笔记 第12章 集成逻辑门电路

12.4 正逻辑与负逻辑 正负逻辑转换规则 正负逻辑符号

2023 华为 Datacom-HCIE 真题题库 (6月11新增部分)--含解析

单项选择题 1.[试题编号:263143] (单选题)华为CloudCampus位置服务(wifi方案),获取基于在wifi的位置数据,并上报至开发者的LBS应用。开发者可以使用数据,计算范围内的wi-fi终端位置信息。对于LBS位置应用和iMaster NCE的交互流程,以下哪项是错误的?(单选)单选 A、LBS…

Vue中如何进行Markdown编辑与渲染?

Vue中如何进行Markdown编辑与渲染? Markdown是一种轻量级的标记语言,广泛用于编写技术文档、博客、论坛等。Vue.js是一款流行的JavaScript框架,它提供了一些有用的工具来处理DOM元素和用户界面。在Vue中,我们可以使用一些库和组件…

除了Midjourney和Stable Diffusion,还有哪些AI模型可以使用

Midjourney是一款广受设计师和艺术家欢迎的人工智能图像生成器。然而,最近它停止提供免费试用,让许多用户开始寻找替代品。在本文中,我们为您编制了一个2023年可尝试的十大Midjourney替代品列表。我们包括了免费和付费选项,让您可…

Hutool工具类库之图片验证码

文章目录 一、介绍二、示例1、LineCaptcha 线段干扰的验证码2、CircleCaptcha 圆圈干扰验证码3、ShearCaptcha 扭曲干扰验证码4、GifCaptcha 验证码5、写出到浏览器(Servlet输出)6、自定义验证码 一、介绍 验证码功能位于 cn.hutool.captcha 包中&#x…

【电路】电路与电子技术基础 课堂笔记 第13章 组合逻辑电路的分析与设计

组合逻辑电路:任意时刻的输出稳定状态仅仅取决于该时刻的输入信号,而与输入信号作用前电路所处的状态无关。 13.1 组合逻辑电路分析 13.1.2 加法器电路分析 S就是Sum,CO 就是Carry-Over(进位)。 算术运算是数字系统的…

ROS学习——通信机制(参数服务器)

一、引言 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,关于参数服务器的典型应用场…

【c++】组合类+继承情况下构造顺序

组合类继承情况下构造顺序 构造顺序同普通继承&#xff0c;先父后子&#xff0c;内部类是最老的&#xff08;最先调用构造的&#xff09;。 示例代码 class A { public:A(int a 0):_a(a){cout << "A()" << endl;}~A(){cout << "~A()" …

如何将本地python项目部署到阿里云服务器上(完整版)

一、准备阿里云服务器 首先在阿里云服务器免费试用网站中选择相应的服务器&#xff0c;本次搭建选择的服务器是适合入门级开发者的服务器。在阿里云控制台上创建一个云服务器&#xff08; ECS 实例&#xff09;并获取访问凭证&#xff0c;包括主机 IP 地址、用户名和密码。在服…

K Shortest Paths算法之Eppstein algorithm

Eppstein的算法是David Eppstein于1998年提出的一种高效且易于实现的k条最短路径寻找方法。它的时间复杂度为O(m n log n k)&#xff0c;其中m是边的数量&#xff0c;n是节点的数量&#xff0c;k是要寻找的路径数。相较于其他方法&#xff0c;它具有较好的性能和实用性。 Epp…

路漫漫其修远兮

其实不仅是专业&#xff0c;AI冲击波才刚刚开启&#xff0c;包括博客、自媒体作用也在大幅度下降呢。 很多人看过如下这幅图&#xff1a; 提示工程师确实是在当前大型语言模型不够完善的情况下&#xff0c;通过微调输入的方式来提高模型的性能。随着模型的迭代&#xff0c;这些…

算法模板(8):网络流(1):最大流

算法模板&#xff08;8&#xff09;&#xff1a;网络流&#xff08;1&#xff09;&#xff1a;最大流 网络流基本概念 基本概念 流网络&#xff0c;不考虑反向边可行流&#xff0c;不考虑反向边 两个条件&#xff08;根据《算法导论》&#xff0c;这两个条件可以看作可行流的充…

mapbox实现线要素的文字标注功能

效果图 操作步骤 首先查看mapbox自己的api里面有没有&#xff0c;好像里面并没有类似于line-text的属性 然后打开mapbox studio&#xff0c;发现里面确实是有这种样式的&#xff0c;他的图层名字叫 然后我们下载下来这个样式 打开style.json文件之后&#xff0c;找到这个图…

【数据可视化】Plotly Express绘图库使用

Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观&#xff0c;无需繁琐的设置和配置。通过使用Plotly Express&#xff0c;您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势&#xf…

Maven教学--上

Maven教程–上 先看一个问题&#xff0c;引出Maven 需求说明/图解 编写一个类, 有一个方法sum&#xff0c;可以返回两个数的和编写测试类TestSum, 可以测试sum 是否正确. 使用传统方式完成 创建传统的java 项目java-hello 创建Hello.java public class Hello {public S…

【30天熟悉Go语言】5 Go 基本数据类型

文章目录 一、前言二、数据类型总览1、基本数据类型1&#xff09;数值型-整数类型1> 有符号整数类型&#xff1a;2> 无符号整数类型&#xff1a;3> 其他整数类型&#xff1a;4> PS:Go的整数类型&#xff0c;默认声明为int类型&#xff1a;5> 变量占用的字节数 2…

PowerShell系列(六):PowerShell脚本执行策略梳理

目录 1、执行策略等级 2、执行策略范围 3、执行策略命令语法格式 4、执行策略常用命令 PowerShell 是一种用于操作 系统的命令行界面&#xff0c;支持跨平台&#xff0c;它提供了许多功能来自动化和优化各种任务。PowerShell 是由微软官方开发的&#xff0c;并作为 Windows Ser…

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

从横空出世到掀起高潮&#xff0c;当下&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;模式下的ChatGPT它正以惊人的速度席卷各个领域&#xff0c;在线教培行业也不例外。那么&#xff0c;正式进入落地期的ChatGPT&#xff0c;在在线教培行业有那些应用前景呢&#…