以Crotex M3为例讲解stm32芯片内部原理

2023-05-16

一款STM32F103ZET6是72Mhz,64kRAM,512kROM为例进行简要分析其MCU工作原理

1 分清几个概念

1.1RAM可读写静态储存器

	平常所说的DDR就是RAM的一种,用于CPU直接交换数据

1.2ROM只可读静态存储器

	平常说的flash是ROM的一种,存储程序,const修饰等不变量
	NAND指NAND flasH

2 单片机架构组成

2.1 51单片机的架构

2.1.1 51单片机历史来源

51内核是上个世纪70年代Intel公司设计的,速度只有12M,外设是IC厂商(STC)在内核的基础上添加的,不同的IC厂商会在内核上添加不同的外设,从而设计出各具特色的单片机。这里Intel属于IP核厂商,STC属于IC厂商。我们后面要讲的STM32也一样,ARM属于IP核厂商,ARM给ST授权,ST公司在Cortex-M3内核的基础上设计出STM32单片机。
在这里插入图片描述
在这里插入图片描述

图1. 51单片机架构组成

2.1.2 51单片机内核

51单片机由一个IP核和片上外设组成,IP核(内核)就是上图中的CPU,片上外设就是上图中的:时钟电路、SFR和RAM、ROM、定时/计数器、并行I/O口、串行I/O口、中断系统。IP核跟外设之间由系统总线连接,且是8bit的,速度有限。
51内核是上个世纪70年代Intel公司设计的,速度只有12M,外设是IC厂商(STC)在内核的基础上添加的,不同的IC厂商会在内核上添加不同的外设,从而设计出各具特色的单片机。这里Intel属于IP核厂商,STC属于IC厂商。我们后面要讲的STM32也一样,ARM属于IP核厂商,ARM给ST授权,ST公司在Cortex-M3内核的基础上设计出STM32单片机。

2.1.3 51单片机外设

我们在学习51的时候,关于内核部分接触的比较少,使用的最多的是片上外设,我们在编程的时候操作的也就是这些外设。
编程的时候操作的寄存器位于SFR和RAM这个部分,其中SFR(特殊功能寄存器)占有 128字节(实际上只用了 26 个字节,只有 26 个寄存器,其他都属于保留区),RAM占有 128 字节,我们在程序中定义的变量就是放在RAM中。其中SFR和RAM在地址上是重合的,都是在80~FF地址区间,但在物理区间上是分开的,所以51的RAM是有256个字节。
编写好的程序是烧写到ROM区。剩下的外设都是我们非常熟悉的IO口,串口、定时器、中断这几个外设。

2.1.4 51单片机CPU架构

在这里插入图片描述
51单片机内部有一个8位的CPU,包含运算器,控制器及若干寄存器等

2.2 STM32单片机架构

在这里插入图片描述

图2. stm32单片机架构组成

2.2.1内核

在系统结构上,STM32和51都属于单片机,都是由内核和片上外设组成。只是STM32使用的Cortex-M3内核比51复杂得多,优秀得多,支持的外设也比51多得多,同时总线宽度也上升到32bit,无论速度、功耗、外设都强于51。

从结构框图上看,对比51内核只有一种总线,取指和取数共用。
Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:
指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代码存储区(即FLASH外设)的访问,分别是I-Code总线和D-Code总线。

I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。

系统总线(System)用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。

私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。

还有一个DMA总线,从字面上看,DMA是data memory access的意思,是一种连接内核和外设的桥梁,它可以访问外设、内存,传输不受CPU的控制,并且是双向通信。简而言之,这个家伙就是一个速度很快的且不受老大控制的数据搬运工,这个在51里面是没有的。

2.2.2外设

从结构框图上看, STM32比51的外设多得多,51有的串口、定时器、IO口等外设 STM32 都有。STM32还多了很多特色外设:如FSMC、SDIO、SPI、I2C等,这些外设按照速度的不同,分别挂载到AHB、APB2、APB1这三条总线上。

(随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法,发展到基于IP核复用的设计方法,并在SOC设计中得到了广泛应用。在基于IP核复用的SoC(System on Chip的缩写,称为系统级芯片,也有称片上系统)设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。)

3由单片机MCU联想到PC

3.1 cpu:

cpu是central process unit的简称,是计算机的核心处理器。cpu的作用是运行机器语言指令。高级语言和汇编语言程序被编译成cpu能理解的机器语言(二级制代码)后,存入到内存中,cpu就会从内存中读取并执行这些指令序列,完成程序功能。
包括控制器、寄存器、运算器、时钟四个部分组成。
运算器是用来进行逻辑计算的,
寄存器是临时存放中间数据以及指令的;包括程序计数器、指令寄存器、数据寄存器、地址寄存器等。 寄存器是汇编语言所研究的对象,汇编语言通过对寄存器的控制(写入,读出,加),实现功能。程序计数器和内存的关系:程序计数器记录了当前执行的指令在内存中年存储的位置。
控制器是用来控制何时将内存的数据及指令读入寄存器,何时将寄存器中的值输出到内存。
时钟是同步各个部件之间的步调;

3.2 指令:

指令是控制cpu按照一定功能运算的机器码。用于CPU控制硬件
指令通过控制cpu的输出和输入位置,可以让cpu寄存器向I/O端口寄存器发送数据,外围设备通过与I/O寄存器交换数据,从而达到控制外围设备的效果

3.3、操作系统的内核

操作系统内核(就是操作系统最核心最底层的一部分代码(基础代码))
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
现在主流的操作系统内核有四个:Unix、Linux、Windows、OS/2
其他很多各种各样以及各个版本的系统都是建立在这四种内核的基础上的。

在这里插入图片描述

图3. CPU工作过程

参考文章链接:https://blog.csdn.net/SUR0608/article/details/104142804

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以Crotex M3为例讲解stm32芯片内部原理 的相关文章

  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐

  • C++/Python文件读写

    C 43 43 为了方便开发 xff0c 写了一个文本读写程序 xff0c 能够读写二进制 文本格式的文件 xff0c 程序只由一个头文件组成 xff0c 可以很方便地加入到现有程序 完整程序如下 xff1a span class toke
  • 遥控小车日志

    上周六 xff0c 我的老师扔给我一台四轮普通直流电机小车 xff08 下图 xff0c 已组装好 xff09 xff0c 叫我实现无线控制功能 xff0c 由PC端或手机端发送指令 由于我曾经做过步进电机小车的控制 xff0c 同时最近学
  • 数值优化学习笔记(一)C++实现线性搜索的最速下降法(以Rosenbrock函数为例)

    Rosenbrock函数介绍 Rosenbrock是可导非凸函数 xff0c 二维情况下的函数值情况如下 xff1a 高维函数定义如下 xff1a f x 61
  • 软中断-小结

    1 软中断类型是静态定义的 xff0c 10种 2 软中断回调函数是在本地CPU开中断的情况下执行 因此能够被中断打断 xff0c 但是软中断无法抢占软中断 因为在irq exit的时候会判断是否在中断上下文 xff0c 如果在中断上下文不
  • slam中ceres的用法解析

    slam中ceres的常见用法总结 1 ceres 使用流程2 ICP实例2 1 优化状态参数化2 2 jacobian矩阵的求解 1 ceres 使用流程 ceres的使用过程基本可以总结为 1 创建优化问题与损失核函数 ceres Pr
  • Kalibr进行IMU+相机的标定

    环境 xff1a Ubuntu18 04 Kalibr代码连接 xff1a https github com ethz asl kalibr 1 安装依赖 ROSsudo apt get install python setuptools
  • Docker容器之镜像仓库详解

    Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解1 什么是Docker Image xff1f 2 什么是Docker Registry 3 镜像相关的操作 本文将集中对镜像 仓库 容器的概念与三者之间的联系进行详细
  • Linux 中 rc.local、init.d、rc.x、init 这几个文件(夹)各有什么作用?启动执行的脚本应该均放在 rc.local 中吗?

    Linux 中 rc local init d rc x init 这几个文件 夹 各有什么作用 启动执行的脚本应该均放在 rc local 中吗 参考链接 1 https www zhihu com question 20126189 2
  • PX4 Offboard模式调试指南

    下载QGroundcontrol https docs qgroundcontrol com master en getting started quick start html 飞控初始化配置 按PX4基本配置指南走 https docs
  • PX4 PID调试指南

    PX4基本配置参考 xff1a https blog csdn net qq 42703283 article details 115214729 spm 61 1001 2014 3001 5501 本文仅供参考 xff0c 如有困惑的参
  • ROS:OpenCV的常用头文件解释

    1 include lt cv bridge cv bridge h gt include lt cv bridge cv bridge h gt cv bridge类 xff1a 这个类中提供的API主要功能是将图像从sensor msg
  • STM32介绍

    STM32 是意法半导体推出的 32 位 ARM Cortex M 内核微控制器系列 xff0c 具有高性能 低功耗 可靠性强等特点 xff0c 广泛应用于工业控制 智能家居 汽车电子 医疗设备等领域 本文将详细介绍 STM32 系列的特点
  • Ubuntu 18.04文件下载

    ubuntu sim ros melodic sh 链接 link 下面为打开后的具体情况 span class token comment span span class token operator span span class to
  • ubuntu18.04下QGC安装

    QGC安装 xff08 新手操作 xff09 参考官网教程即可 官网链接 link 先把命令行的代码贴过来 xff0c 方便大家复制粘贴 第 span class token number 1 span 步的 sudo usermod sp
  • PX4 ulg文件格式转化(windows下)

    福利领取 在经过多次尝试ubuntu下安装pyulog失败后 xff0c 多次失败 xff0c 查找相关资料 xff0c 发现是python相关包出现了问题 xff0c 最后发现了anaconda这个好东西 xff0c 包含了python下
  • PX4固定翼姿态控制器详细介绍(一)

    代码版本1 8 2 源码地址 Firmware1 8 2 一 前言 最近需要做一下固定翼的相关姿态控制 xff0c 只对控制流程进行简单介绍 xff0c 特此记录下相关流程 xff0c 方便自己后续进一步调试 xff0c 以下对PX4固定翼
  • Github仓库命名规范

    Github仓库命名规范 命名规则 GIT库名一律采用项目名 类型 年月的形式 其中对项目名的规范如下 xff1a 库名中不得出现下述规定的字符 64 amp 39 39 xff0c lt gt 库名应尽量避免使用 名 名的形式 库名应尽量
  • CVTE嵌入式面经

    2021提前批嵌入式实习 CVTE笔试 xff1a 大约20个选择题和两道手撕代码题 选择题主要是问LINUX一些指令和一些单片机的相关知识 比如中断任务里面该写什么代码之类的 CVTE一面 xff1a 大约半个小时 1 自我介绍 2 谈谈
  • 97条架构师必须掌握的知识

    1 Don 39 t put your resume ahead ofthe requirements by Nitin Borwankar 需求先于履历 身为架构 师要平衡客户 公司和个人的利益 用时兴的技术 为个人履历增光添彩固然重要
  • 以Crotex M3为例讲解stm32芯片内部原理

    一款STM32F103ZET6是72Mhz 64kRAM 512kROM为例进行简要分析其MCU工作原理 1 分清几个概念 1 1RAM可读写静态储存器 平常所说的DDR就是RAM的一种 用于CPU直接交换数据 1 2ROM只可读静态存储器