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

存储器与寄存器

1.存储器映射

存储器本身是不具备地址信息的,他的地址都是我们厂商或者用户分配的,给存储器分配地址的过程就教存储器映射,如果再给他分配一个地址那么就是重映射

RAM把这个内存分为了8个区域,每个区域的大小是512-MByte字节,这个存储量是非常大的,因此每个芯片厂商都在每块容量范围里设置了对应的外设,但是要记住一点,如果你每个芯片的容量越大,那么成本也是会更高的

每块容量都有他们自己的划分

这个是吧block0和flash的地址,他的容量是512-Mbyte字节

block2存放了我们主要的功能外设

比如我们的Gpio和外部中断

block6有预留的区域

flash有1mhz的内存

2.什么是寄存器

我们把每个单元的功能作为名,给这个内存取个别名,这个别名就是我们·所说的寄存器,然后我们通过C语言指针操作这些寄存器即可,什么是寄存器映射呢,就是给已经分配好地址的特定的内存单元再去一个名字的过程就叫寄存器映射

我们的内存单元大小固定是4个字节

我们想要对内存区单元进行操作,其实就是对这个地址进行操作,你每次都要操作的话那么就要写一个很长的地址,所以我们要对这个内存取一个别名,这个别名就是寄存器,有了这个寄存器,那我们就可以用C语言的指针进行操作,寄存器映射就是对这个寄存器取别名的过程就是寄存器映射

3.如何访问寄存器的内容

我们操作这些寄存器其实就是在操作内存单元,我们可以用指针来操作stm32的内存单元

如果我们想要第9个管脚输出低电平那么我们怎么处理呢

首先要了解stm32的外设映射

外设分为4条总线

不同的总线挂载着不同的外设资源

APB总线主要挂载一些低速的外设

AHB总线主要挂载一些高速的外设

相应总线的基地址,我们称为该总线的基地址

APB包括APB1和APB2

APB1在底下这意味着,意味着这是我们总线的基地址

基地址也是挂载在这个总线上首个外设地址

每个总线都挂载着很多外设的地址

这些外设也会有着自己的地址范围

外设的首个地址,也就是外设的基地址

其他外设的地址,要在这个基地址的基础上进行偏移

APB1总线上挂载着我们定时器1的外设

定时器2是APB1的总线基地址,0x4000000是定时器的地址,也是AHB1的地址

Gpio端口在AHB1的总线上

AHB1的第一个地址,GPIOA

GPIO有哪些寄存器

端口中的寄存器都是一样的

前面的外设和基地址都是为了下面的寄存器封装

使用寄存器封装寄存器

如果我们想对GPIOF的PF9,首先要知道他是要挂载在哪个总线上的视频

确定了总线我们才知道这个总线的基地址

然后我们找到这个端口的偏移地址

根据总线的基地址和本身的偏移地址

得到GPIOF的地址

最后通过这个外设基地址得到各个寄存器的基地址

APB1的外设基地址,最低层

找到Gpiof挂载的总线,是AHB1,然后我们找到他的地址

然后接下来就是我们的Gpiof了我们要找到他的地址

首先要知道他们是哪个总线上的地址,是AHB1上的

找到GPIOF总线的基地址

接下来我们就要从GPIOF的基地址找很多寄存器

第一个是最低地址

第二个是AHB1总线的地址

第三个是AHB1上GPIOF的地址

第四,五,六个是GPIOF端口里面的寄存器地址

把这些地址配置了才能访问stm32寄存器里面的内容了

unsigned int *代表这是1个地址前面加个*代表你是要对这个寄存器的值进行设置

r代表不读,w代表写

寄存器的封装

我们这里封装的结构体,里面的变量名都是按照输出寄存器的地址来设置的


http://www.kler.cn/a/307626.html

相关文章:

  • K8S 查看pod节点的磁盘和内存使用情况
  • Python读写Excel的全面教程
  • Oracle19C AWR报告分析之Instance Efficiency Percentages (Target 100%)
  • 【route】route add命令详解
  • Python习题 251:修改文件名称
  • Elasticsearch retrievers 通常与 Elasticsearch 8.16.0 一起正式发布!
  • Centos中dnf和yum区别对比
  • 使用 IntelliJ IDEA 导入已有的 Spring Maven 项目并运行
  • Elment-plus组件失效(没有样式)(0916)
  • 宏任务和微任务+超全面试真题(持续更新ing
  • 【Elasticsearch系列六】系统命令API
  • Android DPC模式多开 APP
  • 安全区域边界等保测评
  • 安全隔离上网的有效途径:沙盒
  • QT开发:深入详解QtCore模块事件处理,一文学懂QT 事件循环与处理机制
  • SQL使用IN进行分组统计时如何将不存在的字段显示为0
  • CISP-PTE CMS sqlgun靶场渗透测试
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.16)
  • 神经网络_使用tensorflow对fashion mnist衣服数据集分类
  • uniapp js修改数组某个下标以外的所有值
  • 2024.09.08 校招 实习 内推 面经
  • python Open3D 验证安装崩溃
  • 论文内容分类与检测系统源码分享
  • String 72变 ---------各种字符串处理方法
  • WSL挂载U盘或移动硬盘
  • 一起对话式学习-机器学习02——机器学习方法三要素