STM32微机系统框架、内存、存储器、寄存器

这篇具有很好参考价值的文章主要介绍了STM32微机系统框架、内存、存储器、寄存器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

大家好,我是杰哥嵌入式开发
最近在出定时器系列,
但是线下班有一些学生在学习完C语言之后,
在51接触各种寄存器和对软件代码各种操作是如何在单片机系统中起到作用的感到非常的不解,
经过我的初步分析,是对嵌入式微机系统的大概雏形系统框架不熟悉导致。
所以我决定出一期基于STM32的系统框架介绍博客。

欢迎大家关注我的gitee仓库:
gitee源码仓库链接跳转

STM32微机系统框架、内存、存储器、寄存器

微型计算机系统组成框图

来分析一下这个框图:
众所周知,计算机在发展初期就是上千万个晶体管堆叠而成的
逐步发展成现在的第四代微型集成电路计算机
不管是咱们得51 32 香橙派,你们会发现中间的那个芯片都是由CPU和片上外设组成
在此基础上增加外部输入输出设备 如网口、USB、DDR、EMMC等。
这一硬件体系结构采用的是什么,是我们大学学计算机课经常听到的冯.诺依曼体系
还有另一个叫什么?你们来说!

冯.诺依曼体系的设计思想:

1 以二进制形式表示指令和数据。(计算机的语言)
2 程序和数据事先存放在存储器中,计算机在工作时能够高速地从存储器中取出指令加以执行。(内存映射)
3 由运算器、控制器、存储器、输入设备和输出设备等五大部件组成计算机硬件系统。 (通过总线结构交互)

下面我们会拿STM32的硬件系统架构来讲解,讲解之前要让大家了解上面流程图中各个专业名词的定义,让大家对通用微机系统有一个基础文字定义的印象,然后在这里不要问我,我也不会,哈哈哈:
控制器(控制单元CU ):全机的指挥控制中心。负责读取指令,指令译码,形成各种定时控制信号,向内部各功能单元发送相应的控制命令,协调各部件之间的工作。

寄存器阵列(RA)

相当于微处理器内部的RAM,用于暂存数据和运算结果。我也没看懂 可以理解为我们上次讲的CPU中的cache吧

运算器(算数逻辑单元ALU)

用来进行算数或逻辑运算以及移位循环等操作。

存储器

计算机系统的记忆装置,用来存储程序和数据。
按工作方式,内存可分为两大类:
随机读写存储器RAM(Random Access Memory) 如内存条、DDR2 3 4 5
和只读存储器ROM(Read Only Memory) 机械硬盘 固态硬盘 flash TF-sd卡 emmc
以后面试问你们记得这么说:

  • 随机读写存储器可被CPU随机地读写,它用于存放将要被CPU执行的用户程序、数据以及部分系统程序。
    断电后,其中存放的所有信息将丢失。
  • 只读存储器中的信息只能被CPU读取,而不能由CPU任意地写入。断电后,其中的信息不会丢失。
    它用于存放永久性的程序和数据。如系统引导程序、监控程序、操作系统中的基本输入/输出管理程序(BIOS)等。
总线

连接微型计算机各组成部分的一组信号线,包括 地址总线AB、数据总线DB、控制总线CB 等三类。

地址总线AB:在对存储器或I/O端口进行访问时,
            传送由CPU提供的要访问存储单元或I/O端口的地址信息,
            以便选中要访问的存储单元或I/O端口,是单向总线。 

数据总线DB:从存储器取指令或读写操作数,对I/O端口进行读写操作时,
            指令码或数据信息通过数据总线送往CPU或由CPU送出,是双向总线。

控制总线CB:各种控制或状态信息通过控制总线由CPU送往有关部件,
            或者从有关部件送往CPU。CB中每根线的传送方向是一定的。
系统软件

面向计算机的软件:操作系统、监控程序、I/O驱动程序、编译与解释程序和各种诊断、检查、引导程序等
面向用户的软件:各种程序设计语言、实用程序、字处理程序等

应用软件

为了解决各类实际问题,利用计算机以及它所提供的各种系统软件,编写解决各种实际问题的程序。

STM32的硬件系统架构

微型计算机的硬件系统由微处理器、存储器、输入设备、输出设备和系统总线组成。
那stm32呢 是不是也是这个规律,我们一起来看看:
STM32由驱动单元、FLASH、SRAM、片上外设和总线矩阵组成
我们一起来看看STM32芯片手册的系统结构图
STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

这是手册的解释:

在小容量、中容量和 大容量产品中,主系统由以下部分构成:
● 四个驱动单元:
─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
● 四个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ FSMC
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备
这些都是通过一个多级的AHB总线构架相互连接的

说的还是蛮清楚的啊,看不懂?那我来翻译翻译!!!
左边三个方框和一个梯形是处理器 由1个cortex-m3核、2个dma和内核系统总线组成
(DMA不懂?理解成受精卵版的4090吧)
右边其他的就是片上外设 如片内的ROM即flash、RAM即SRAM、FSMC即用于连接外部存储的总线,
还有通过AHB桥接到各种各样的GPIO、TIM、ADC等等等等。

驱动单元

芯片手册上有的就不多说了,上图自己看。
STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

  1. 内核通过ICode 总线读取内部FLASH代码指令来执行程序.
  2. DCode这条总线是用来取数据的.
  3. DMA总线与DCode总线一样主要是用来传输数据,但Dcode总线传输数据要占用内核(cpu)的资源,而DMA总线相当于独立于内核cpu但帮助内核cpu传输数据而不用占用内核(cpu)的资源,就是在DMA传输数据的同时内核cpu可以干别的事情比如点亮一个LED灯
  4. 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁
被动单元
  1. FLASH、SRAM这些平时线下班面试题都有说,堆、栈是什么,什么区别、const是什么、malloc是什么、局部变量是什么、 内存分布图等,相信大家都非常熟悉了
  • 内存分布说明:
    内核空间: 放置操作系统相关的代码和数据。(用户不能直接进行操作 ------ 可以通过调用系统提供的api函数)
    栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。
    内存映射段是高效的I/O映射方式,用于装载一个共享的 动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。
    堆用于程序运行时动态内存分配,堆是可以上增长的。
    数据段–存储全局数据和静态数据。
    代码段–可执行的代码/只读常量。
  1. FSMC可以用来拓展内存的控制器,以后大家工作可能接触的到
  2. AHB到APB的桥:挂载着STM32各种各样的特色外设 GPIO、串口、I2C、SPI。学习单片机的重点,就是要学会编程这些外设去驱动外部的各种设备

内存映射

存储器映射

所以 知道了系统框图之后,知道了系统有哪些东西之后,有什么用?
我们还是对他们的之间的工作关系感觉非常的模糊
如:

  • 外设的寄存器怎么访问和控制,通过地址 地址哪来的?
  • 总线怎么读的FLASH?

我尝试解释给大家,好吧!
就是内存映射,其实应该是存储器映射,
我搜了好几篇博客都这么叫,那就这么叫吧,可能我对内存映射有点误解。
咱们用的这个存储器,他本身是不具备地址信息的,他的地址是板子启动初始化的时候分配的,
那这个给存储器分配地址的过程被称为存储器映射,
你可能以为我说的存储器是RAM、ROM,
但其实STM32的所有片内外设其实都是存储器,
他们都会被映射到一个4GB的线性地址空间内
数据字节以小端格式存放在存储器中
(什么是小端,低地址放低位,高地址放高位)

4GB

又衍生出来一个问题,那为什么是4GB的地址空间?
因为 存储空间的大小是由芯片内CPU内的地址总线的数量来决定的,而stm32芯片内部的总线为32根
2的32次方等于4GB
232B/210/210/210 = 2^2GB = 4GB
所以!STM32中的32是32根地址线?
NO!32位的单片机的地址线数量8、16根的都可以
STM32刚好碰巧的是CPU能够处理的数据位宽与地址线数量恰好都是32

所以什么是CPU能够处理的数据位宽?
MCU芯片内部CPU在处理数据时,每次可以处理的数据位宽为32个bit。
正是由于这个原因,STM32内部的寄存器大小都是32位
如果现在一款32单片机的地址线是8,
那他要访问一个32位的内部寄存器数据时,
他可以读取4次寄存器数据到CPU中,cpu一次对这32个位进行处理
懂了吧! 我们继续。

看看stm32的内存映射图
STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

地址其实就是门牌号,存储中的每个字节就是房间,
存储器生产出来后,这些房间是没有地址的(门牌号),
映射的过程其实就是将这些门牌号分配给这些房间,
分配好后,每个门牌号只能访问自己的房间,
没有被分配的地址就是保留地址,
所谓保留地址的意思就是,没有对应实际存储空间。

上面的内存映射图4G的空间里 32把他们分成8块 每块512M
其中最重要的是代码区、静态RAM、片上外设

代码区

STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

我们平时写的代码就是放到代码区的0x0800 0000~0x0807 FFFF
一共512KB,但是咱们上官二号stm32f1就128KB的flash 所以映射也只会使用128KB
可以看MDK-Keil中的jlink烧录选项界面,就有说烧录的地址范围 开始 大小
也提到了RAM的开始地址的大小

STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

这里有个东西跟大家说一下 既然我们烧录代码到0x0800 0000之后
可是又印象中说 代码是从地址0x0开始的,是为什么?
地址重映射!
本来没有东西 然后还有一个大家影响中的东西叫做启动方式
stm32可以通过BOOT[1:0]引脚选择三种不同启动模式
可以选择将0x00000000-0x001FFFFF映射到不同的存储器上
默认大部分都是映射的flash 所以这就说的通了

STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

上面代码区映射图里还有个system memory和option bytes
那个是系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),
当使用ISP方式加载程序时,就是由这个程序执行。
这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。
选项字节存储芯片的配置信息及对主存储块的保护信息。

所以stm32也可以像51一样用串口下载
但是在用串口烧录代码的时候需要改变启动模式到系统存储器
串口烧录完,还要把boot引脚改回主闪存存储器启动模式
有小伙伴自己学过stm32,用到过烧录程序flymcu,这个软件比较厉害
可以通过DTR和RTS改变BOOT的引脚电平,
达到不用修改BOOT引脚就可以下载运行代码,
实际上是软件替我们做了改变BOOT引脚的操作

以上说的是ISP,
然后还有个IAP是我们自己在flash里面写用户自己的bootloader
可以玩的很花,你们自行YY

静态ram

这个好像没什么好讲的
不同的型号内置sram不一样 所以性能不一样
越大越好 越大越贵 甚至能跑图形界面等等
所以有了FSMC可以外接SDRAM
上官二号好像没有FSMC外设 就那几个引脚 确实不太够用

片上外设

寄存器映射
可算到这了 这个是很多同学懵逼的地方
寄存器初始化 读写这些 很模糊
对单片机的软件硬件之间的控制到底哪里来的 在这里可以得到答案
前面内存映射图里面还有一个peripherals外设 就是片内外设的映射图

什么是寄存器 给特定功能的的单元取的别名这个别名就叫做寄存器
怎么用寄存器 通过寄存器地址去访问
地址哪里来 单片机硬件帮我们把这些映射到内存中

这些片上外设们以四个字节为一个单元,共32bit,
每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。
我们可以找到每个单元的起始地址,然后通过C语言指针的操作方式
(既然一个单元是四个字节那我们就用一次取四个字节的指针(int *)来操作这些功能单元)
来访问这些单元,如果每次都是通过这种地址的方式来访问,
不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,
以功能为名给这个内存单元取一个别名,
这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫 寄存器映射

STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机

我们想要操作一个外设 比如GPIOA_Port1
可能是读取状态 可能是设置状态, 初始化其实就是在设置状态
那就需要操作对应的寄存器,首先得到GPIOA_Port1的基地址
后根据要设置的状态所在寄存器位置进行地址偏移,即可到达目标点并进行读写操作

各个寄存器的地址=外设基地址+寄存器相对于外设基地址的偏移  

51大家都玩过 我就不解释了 就是你们对那些TMOD TL0 TH0进行位操作
都是51头文件库帮你们封装好的寄存器地址
如果大家想尝试自己用寄存器开发就是要自己去算去偏移寄存器地址

总结

这篇就是用来帮助大家拓展微机系统知识的 不讲具体技术细节
让第一次接触到单片机开发的同学不那么恐惧
诶 这个变量哪里来的 都没初始化啊
诶 这个怎么就对它直接 与&或|操作了 我都不知道里面是啥
诶 我这个搞进去 怎么就单片机会有反应了 那样搞进去为啥没反应了
我们目前这种学习环境还相对理想
这样的解释也足够了
希望对大家有所帮助!!!

STM32微机系统框架、内存、存储器、寄存器,stm32,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-742417.html

到了这里,关于STM32微机系统框架、内存、存储器、寄存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32】QSPI四线SPI模式(Quad-SPI存储器、间接模式、状态轮询模式、内存映射模式、命令序列、QSPI基本使用步骤、SPI FLASH基本使用步骤)

    一、QSPI介绍 1.1、QSPI功能框图(双闪存模式禁止) 1.2、QSPI 时钟源 1.3、间接模式 1.4、内存映射模式 1.5、命令序列(间接模式 或 内存映射模式) 1.6、指令、地址、交替字节、空指令周期、数据各阶段 1.7、QSPI FLASH设置 1.8、QSPI 中断类型 二、QSPI相关寄存器介绍 三、QSPI相关

    2024年04月22日
    浏览(71)
  • STM32学习笔记(九)丨DMA直接存储器存取(DMA数据转运、DMA+AD多通道转换)

    ​  本次课程采用单片机型号为STM32F103C8T6。 ​  课程链接:江科大自化协 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试丨OLED的使用   STM32学习笔记(三)丨中断系统丨EXTI外部中断

    2024年02月10日
    浏览(44)
  • ROM、RAM、内存、内存条、外存、内部存储器、外部存储器、FLASH等之间的关系

    ​   各位看到这一系列的名词,是否也曾感受到一头雾水?研究了一上午终于理清了它们之间的关系,直接上图说明,相信你看完也能恍然大悟!若有错误麻烦在评论区指出。 这里有几点需要明确: 存BOIS的ROM也属于内存(因为CPU也可以对其直接寻址),但我们生活中常说

    2023年04月26日
    浏览(55)
  • 内存管理:存储器管理

    内存管理的主要功能: 内存空间的分配与回收 。由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储器分配的麻烦,提高编程效率 地址转换 。在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,存储器必须系统地址变换功能 内存空间的扩充

    2023年04月09日
    浏览(51)
  • STM32F407单片机通用24CXXX读写程序(KEIL),兼容24C系列存储器(24C01到24C512),支持存储器任意地址跨页连续读写多个页

    原文链接:https://blog.csdn.net/ba_wang_mao/article/details/108318633 AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256…不同的xxx代表不同的容量。 总容量(Byte容量) = 页数 × 页内字节单元数。 对AT24CXXX进行读写操作时,都得先访问存储地址、比如AT24C01写一个字节的I

    2024年04月11日
    浏览(65)
  • STM32-SPI通信(W25Q64芯片简介,使用SPI读写W25Q64存储器芯片)

    ​  SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)。 ​SPI通信具有以下特点: 同步,全双工; 支持总线挂载多设备(SPI仅支持一主多从); 在不

    2024年02月08日
    浏览(48)
  • 2.存储器层次系统

    RAM(随机存储器) SRAM 双稳态触发器,有电就保持不变,干扰消除后时会恢复到稳定值,晶体管多因此密集度低 DRAM 每个位存储为对一个电容的充电,对干扰敏感,漏电所以需要刷新 刷新: 集中刷新:产生“死区”,2ms内集中刷新每一行 分散刷新:没有死区 异步刷新:结合

    2024年02月04日
    浏览(48)
  • 【基于FPGA的芯片设计】32位RISC-V存储器

    实验板卡 :xc7a100tlc sg324-2L,共20个开关 实验要求    

    2024年02月15日
    浏览(37)
  • 存储系统及主存储器

    欢迎大家学习郑州大学慕课计算机组成原理课程doge 存储器是计算机系统中的记忆设备 用来存放程序和数据 存储器的性能已成为计算机系统的核心 存储介质 主要采用半导体器件和磁性材料 存储位元 存储一位二进制代码,是存储器中最小的存储单元,一个双稳态半导体电路

    2023年04月08日
    浏览(50)
  • 【操作系统】存储器管理练习

    12.(考研真题) 假设一个分页存储系统具有 快表 ,多数活动页表项都可以存在于其中。 若页表放在内存中,内存访问时间是1ns,快表的命中率是85%,快表的访问时间为0.1ns, 则 有效存取时间 为多少? 15.  已知某分页系统,内存容量为64KB,页面大小为1KB,对一个4页大的作业

    2024年02月05日
    浏览(98)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包