STM32系统架构介绍
STM32系统架构
- 1. CM3/4系统架构
- 2. CM3/4系统架构-----存储器组织结构
- 2.1 寄存器地址映射(特殊的存储器)
- 2.2 寄存器地址计算
- 2.3 寄存器的封装
- 3. CM3/4系统架构-----时钟系统
STM32 和 ARM 以及 ARM7是什么关系?
ARM
是一个做芯片标准的公司,它负责的是芯片内核的架构设计;ARM7
和STM32
是ST
等芯片公司生产的某一种类型的芯片。ST
是一个不做标准的芯片公司,根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 Cortex-M3 芯片,他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。不同公司设计的 Cortex-M3 芯片他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。
1. CM3/4系统架构
注意:CM3和CM4系统架构有差异,上面为CM3系统架构,下列为CM4系统架构。
主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连:
八条主控总线 七条被控总线 内核I总线(不适用于CM3) 内部 Flash ICode 总线 内核D总线 内部 Flash DCode 总线 内核S总线 主要内部 SRAM1 (112 KB) DMA1存储器总线 辅助内部 SRAM2 (16 KB) DMA2 存储器总线描述 辅助内部 SRAM3 (64 KB) DMA2 外设总线(不适用于CM3) AHB1 外设(包括 AHB-APB 总线桥和 APB 外设) 以太网 DMA 总线 AHB2 外设(不适用于CM3) USB OTG HS DMA 总线(不适用于CM3) FSMC(不适用于CM3) 借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。64 KB CCM(内核耦合存储器)数据 RAM 不属于总线矩阵,只能通过 CPU 对其进行访问。
总线接口 描述 S0:
I 总线此总线用于将CM3/4内核的指令总线连接到总线矩阵。内核通过此总线获取指令。 此总线访问的对象是包含代码的存储器(内部 Flash/SRAM 或通过 FSMC 的外部存储器) S1:
D 总线此总线用于将CM3/4数据总线和 64 KB CCM 数据 RAM 连接到总线矩阵。内核通过此总线进行立即数加载和调试访问。此总线访问的对象是包含代码或数据的存储器(内部Flash 或通过 FSMC 的外部存储器)。 S2:
S 总线此总线用于将CM3/4内核的系统总线连接到总线矩阵。此总线用于访问位于外设 或 SRAM 中的数据。也可通过此总线获取指令(效率低于 ICode)。此总线访问的对象是 112 KB、64 KB 和 16 KB 的内部 SRAM、包括 APB 外设在内的 AHB1 外设、AHB2 外设以及通过 FSMC 的外部存储器。 S3/4:
DMA 存储器总线此总线用于将 DMA 存储器总线主接口连接到总线矩阵。DMA 通过此总线来执行存储器数据的传入和传出。此总线访问的对象是数据存储器:内部 SRAM(112 KB、64 KB、16 KB)以及通过 FSMC 的外部存储器。 S5:
DMA 外设总线此总线用于将 DMA 外设主总线接口连接到总线矩阵。DMA 通过此总线访问 AHB 外设或执行存储器间的数据传输。此总线访问的对象是 AHB 和 APB 外设以及数据存储器:内部 SRAM 以及通过 FSMC 的外部存储器。 S6:
以太网 DMA 总线此总线用于将以太网 DMA 主接口连接到总线矩阵。以太网 DMA 通过此总线向存储器存取数据。此总线访问的对象是数据存储器:内部 SRAM(112 KB、64 KB 和 16 KB)以及通过 FSMC 的外部存储器。 S7:
USB OTG HS DMA 总线此总线用于将 USB OTG HS DMA 主接口连接到总线矩阵。USB OTG DMA 通过此总线向存储器加载/存储数据。此总线访问的对象是数据存储器:内部 SRAM(112 KB、64 KB 和 16 KB)以及通过 FSMC 的外部存储器。 总线矩阵 总线矩阵用于主控总线之间的访问仲裁管理。仲裁采用循环调度算法。 AHB/APB 总线桥 (APB) 借助两个 AHB/APB 总线桥 APB1 和 APB2,可在 AHB 总线与两个 APB 总线之间实现完全同步的连接,从而灵活选择外设频率。
STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的 CPU 与主板、内存、显卡、硬盘的关系。STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。ARM 公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商 (SOC) 如 ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如 GPIO、USART(串口)、I2C、SPI 等都叫做片上外设。
Cortex-M处理器基于一种加载-存储架构,数据需要从存储器中加载和处理后,使用多个单独的指令写回存储器。例如:要增加SRAM中存储的数据值,处理器需要使用一条指令从SRAM中读出数据,并且将数据放到处理器的寄存器中,然后使用第二条指令增加寄存器中的数据值,最后使用第三条指令将数据值写回寄存器。
内核
即CPU内部的各种译码和执行电路。指令对中断控制器(NVIC)、系统计时器(SysTick)、三阶流水线(取指、解码、执行)、浮点单元(FPU)和指令跟踪接口(ITM)等的操作,其实都是对其寄存器的操作,它们都是由内部寄存器构成的。对这些寄存器的了解参考( cortex-m3与cortex-m4中的寄存器)。
内核的主要组成部分:
- 内核Core:处理器最核心的部分,负责几乎所有的运算和控制程序运行过程,包括中断响应服务。内核由多个部分构成,包括
中断控制器(NVIC)
、系统计时器(SysTick
)、三阶流水线
(取指、解码、执行)、浮点单元(FPU)
和指令跟踪接口(ITM)
- 调试系统:主要用于固件的调试和监视系统的运行状态。它支持JTAG或2针串行线调试(SWD),支持多处理器和实时跟踪。
- 寄存器组:
通用寄存器组:包括堆栈指针、连接寄存器、程序计数器等。
程序状态寄存器(xPSR):用于存储程序的状态信息。
中断屏蔽寄存器组:用于控制中断的屏蔽。
控制寄存器(CONTROL):用于控制处理器的各种功能。- 存储器保护单元MPU:是内核中的一个模块,用于控制和管理存储器的访问权限。它并不是ARM内核的一部分,而是处理器内部的一个独立模块。
- 内存管理单元MMU:将虚地址转换成物理地址。
指令的执行过程与寄存器的关系:
- 指令获取与执行:ARM处理器在执行指令时,首先
从内存中获取指令
,并将其存储在寄存器中。处理器通过寄存器读取指令并执行相应的操作。例如,当处理器执行一条ARM指令时,程序计数器(PC)的值会增加4个字节;而执行一条Thumb指令时,PC的值会增加2个字节- 寄存器的作用:ARM处理器有37个寄存器,包括31个通用寄存器和6个状态寄存器。通用寄存器用于存储数据和地址,而状态寄存器用于标识CPU的工作状态和程序的运行状态。寄存器在指令执行过程中起着关键作用,它们存储指令、数据和地址,帮助处理器高效地执行任务
- 工作模式与寄存器:ARM处理器支持7种运行模式,包括用户模式、快速中断模式、外部中断模式、管理模式、数据访问终止模式、系统模式和未定义指令中止模式。不同的运行模式下,寄存器的使用权限和功能有所不同。例如,用户模式下,程序不能直接访问所有系统资源,而特权模式下则可以。
- 异常处理与寄存器:在异常发生时,处理器会切换到相应的异常处理模式,并保存当前的执行状态。异常处理过程中,寄存器的使用也非常重要。例如,当发生异常时,系统会将下一条指令存入链接寄存器(LR),并将当前程序状态字(CPSR)保存到备份程序状态字(SPSR),然后跳转到异常处理函数。处理完成后,系统会恢复之前的执行状态。
详细的介绍参考下列文档:
- 《Cortex-M3权威指南(中文)》
- 《CM3技术参考手册》
- 《STM32中文参考手册_V10》
- 《Cortex M3与M4权威指南》
- 《STM32F3与F4系列Cortex M4内核编程手册》
- 《STM32F4xx参考手册_V4(中文版)》
2. CM3/4系统架构-----存储器组织结构
程序存储器、数据存储器、寄存器和 I/O 端口排列在同一个顺序的 4 GB 地址空间内。
STM32是一个32位单片机,可以很方便的访问4GB以内的存储空间(2^32 = 4GB),Cortex M3/M4内核将STM32芯片架构
中的所有结构,包括:FLASH
、SRAM
、外设
及相关寄存器
等全部组织在同一个4GB的线性地址空间内,我们可以通过C语言来访问这些地址空间,从而操作相关外设(读/写)。数据字节以小端格式(小端模式)存放在存储器中,数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
存储器本身是没有地址信息的,我们对存储器分配地址的过程就叫存储器映射。这个分配一般由芯片厂商做好了,芯片厂商将所有的存储器及外设资源都映射在一个4GB的地址空间上(8个块),从而可以通过访问对应的地址,访问具体的外设。存储器空间包括程序代码、数据、外设以及处理器内部的调试支持部件。
4GB空间分成8个块,每个块512MB,其中有很多保留区域,这是因为一般的芯片制造厂家是不可能把4GB空间用完的,同时,为了方便后续型号升级,会将一些空间预留。
存储器组织结构如图所示:
【详情见 <CM3/CM4存储器映射>】
MPU为监控总线传输的可编程设备,需要通过软件(一般是嵌入式OS)配置。若MPU存在,应用程序可以将存储器空间分为多个部分,并为每个部分定义访问权限。当违反访问规则时,错误异常就会产生,错误异常处理则会分析问题,而且如果可能,将错误加以修复。一般情况下,OS会设置MPU以保护OS内核和其他特权任务使用的数据,防止恶意用户程序的破坏。而且OS也可以选择将不同用户任务使用的存储器隔离开来。这些处理有助于检测系统错误,并且提高了系统在处理错误情况时的健壮性。MPU也可以将系统配置为只读,防止意外擦除SRAM中的数据或覆盖指令代码。MPU默认禁止,若应用不需要存储器保护特性,就无须将其初始化。
NVIC处理异常,可以处理多个中断请求IRQ
和一个不可屏蔽中断NMI
请求,IRQ一般由片上外设或外部中断输入通过I/O端口产生,NMI可用于看门狗定时器或掉电检测。处理器内部有SysTick
定时器,它可以产生周期性的定时中断请求,可用于嵌入式OS计时或没有OS的应用中的简单定时控制。
注意:对CM3/4的操作其实就是对存储器映射中的寄存器的操作,通过对寄存器的操作来操作内存或其他外设等。
2.1 寄存器地址映射(特殊的存储器)
给存储器分配地址的过程叫存储器映射,寄存器是一类特殊的存储器,它的每个位都有特定的功能,可以实现对外设/功能的控制,给寄存器的地址命名的过程就叫寄存器映射。
举个简单的例子,大家家里面的纸张就好比通用存储器,用来记录数据是没问题的,但是不会有具体的动作,只能做记录,而你家里面的电灯开关,就好比寄存器了,假设你家有8个灯,就有8个开关(相当于一个8位寄存器),这些开关也可以记录状态,同时还能让电灯点亮/关闭,是会产生具体动作的。为了方便区分和使用,我们会给每个开关命名,比如厨房开关、大厅开关、卧室开关等,给开关命名的过程,就是寄存器映射。
我们以GPIO的ODR寄存器为例,其参考手册的描述如图所示:
①寄存器名字:每个寄存器都有一个对应的名字,以简单表达其作用,并方便记忆,这里GPIOx_ODR表示寄存器英文名,x可以从A~G,说明有7个这样的寄存器)。
②寄存器偏移量及复位值:地址偏移量表示相对该外设基地址的偏移,GPIOB 的外设基地址是:0x4002 0400。那么GPIOB_ODR寄存器的地址就是:0x4002 0414。复位值表示该寄存器在系统复位后的默认值,可以用于分析外设的默认状态。
③寄存器位表:描述寄存器每一个位的作用(共32bit),这里表示ODR寄存器的第15位(bit),位名字为 ODR15,rw表示该寄存器可读写(r,可读取;w,可写入)。
④位功能描述:描述寄存器每个位的功能,这里表示位015,对应ODR0ODR15,每个位控制一个IO口的输出状态。
由 < 3.2 库开发和寄存器的关系 > 学习可知:#define GPIOB_ODR *(unsigned int *)(0x40020414) GPIOB_ODR = 0XFFFF;
stm32f407xx.h 里面使用结构体方式对 STM32F407 的寄存器做了详细映射。
注意:CM3/4的内部寄存器和外设寄存器的映射和操作封装文件位于标准外设库/HAL库中,详情见< 3.5 库开发和寄存器的关系>
2.2 寄存器地址计算
某个寄存器地址,由三个参数决定:
- 总线基地址(BUS_BASE_ADDR)
- 外设基于总线基地址的偏移量(PERIPH_OFFSET)
- 寄存器相对外设基地址的偏移量(REG_OFFSET)
寄存器地址 = BUS_BASE_ADDR + PERIPH_OFFSET + REG_OFFSET
总线基地址(BUS_BASE_ADDR)
外设基于总线基地址的偏移量(PERIPH_OFFSET)
寄存器相对外设基地址的偏移量(REG_OFFSET)
2.3 寄存器的封装
【详情见 < 3.6 C语言对寄存器的封装>】
3. CM3/4系统架构-----时钟系统
【详情见 <CM3/CM4时钟系统>】
相关文章:

STM32系统架构介绍
STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射(特殊的存储器)2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司,…...

Macbook Pro快速搭建Easysearch学习环境
在学习过程中,我们有时身边没有可用的服务器,这时就需要借助自己的 Mac 来安装和学习 Easysearch。然而,Easysearch 官网并未提供 Mac 版本的安装教程,下面我将详细整理我在 Mac 上安装和使用 Easysearch 的折腾经历。 Easysearc…...

老游戏回顾:SWRacer
竞速类游戏里,我很怀念它。 虽然已经25年过去了。 相比之下,别的游戏真的没法形容。 ---- 是LucasArts制作的一款赛车竞速游戏; 玩家要扮演一名银河旅行者参加各种赛车比赛,赢得奖金,在经历了八个不同星球上的24场…...
Firefox无法隐藏标题栏
Openbox 窗管 Firefox 无法隐藏标题栏。 深度Linux安装火狐,Linux(deepin) 下隐藏 Firefox 标题栏-CSDN博客 需要在 desktop 的 exec 中增加环境变量: Execenv MOZ_GTK_TITLEBAR_DECORATIONclient firefox...
vue基础(五)
Vue 实例在创建、挂载、更新、销毁的过程中会触发一系列的生命周期钩子(Lifecycle Hooks),让开发者可以在不同阶段执行逻辑。 1. Vue 2 生命周期完整流程 生命周期的四个主要阶段 创建阶段(Creation)挂载阶段&#…...

MySQL的深度分页如何优化?
大家好,我是锋哥。今天分享关于【MySQL的深度分页如何优化?】面试题。希望对大家有帮助; MySQL的深度分页如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL的深度分页(即跳过大量数据后进行分…...

深度学习每周学习总结R6(RNN实现阿尔茨海默病诊断)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客R8中的内容,为了便于自己整理总结起名为R6🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结1. 数据集介绍2. 数据预处理3. 模型构建4. 初始化模型及优化器5. 训练函…...
Node.js 多模态图像描述服务 调用siliconflow:现代 JavaScript 实践
Node.js 多模态图像描述服务:现代 JavaScript 实践 项目背景 本项目使用 Node.js 和 TypeScript 实现一个高性能的图像描述微服务,展示 JavaScript 在多模态 AI 应用中的强大能力。 技术栈 Node.jsTypeScriptExpress.jsOpenAI APIdotenvRxJS (可选&a…...
机器学习数学基础:21.特征值与特征向量
一、引言 在现代科学与工程的众多领域中,线性代数扮演着举足轻重的角色。其中,特征值、特征向量以及相似对角化的概念和方法,不仅是线性代数理论体系的核心部分,更是解决实际问题的有力工具。无论是在物理学中描述系统的振动模式…...
【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件
目录 🍀🍀1.COCO格式json文件 🌷🌷2.YOLO格式txt文件 💖💖3.xml2json代码(python) 🐸🐸4.输入输出展示 🙋🙋4.1输入json 🍂🍂4.2输出txt 整理不易,欢迎一键三连!!! 送你们一条美丽的--分割线-- 🍀🍀1.COCO格式json文件 COCO数…...
强化学习之 PPO 算法:原理、实现与案例深度剖析
目录 一、引言二、PPO 算法原理2.1 策略梯度2.2 PPO 核心思想 三、PPO 算法公式推导3.1 重要性采样3.2 优势函数估计 四、PPO 算法代码实现(以 Python 和 PyTorch 为例)五、PPO 算法案例应用5.1 机器人控制5.2 自动驾驶 六、总结 一、引言 强化学习作为…...
vue-点击生成动态值,动态渲染回显输入框
1.前言 动态点击生成数值,回显输入框,并绑定。 2.实现 <template><div style"display:flex;align-items: center;flex-direction:row"><a-input:key"inputKey"v-model"uploadData[peo.field]"placehold…...

高性能 :OpenAI Triton Open-source GPU programming Language LINUX 环境配置
目录 配置triton环境cudabuild-essential带有pip的python环境直接安装pipanaconda 安装 triton 环境pip install tritonpip install torch 运行test示例vector-add.pylaunch.json 配置triton环境 cuda wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_…...

TCP 端口号为何位于首部前四个字节?协议设计的智慧与启示
知乎的一个问题很有意思:“为什么在TCP首部中要把TCP的端口号放入最开始的四个字节?” 这种问题很适合我这种搞历史的人,大年初一我给出了一个简短的解释,但仔细探究这个问题,我们将会获得 TCP/IP 被定义的过程。 文…...
HTML之JavaScript函数声明
HTML之JavaScript函数声明 1. function 函数名(){}2. var 函数名 function(){}<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…...
R 数组:高效数据处理的基础
R 数组:高效数据处理的基础 引言 在数据科学和统计分析领域,R 语言以其强大的数据处理和分析能力而备受推崇。R 数组是 R 语言中用于存储和操作数据的基本数据结构。本文将详细介绍 R 数组的创建、操作和优化,帮助读者掌握 R 数组的使用技巧…...

git服务器搭建,gitea服务搭建,使用systemclt管理服务
文章目录 页面展示使用二进制文件安装git服务下载选择架构使用wget下载安装 验证 GPG 签名服务器设置准备环境创建systemctl文件 备份与恢复备份命令 (dump)恢复命令 (restore) 页面展示 使用二进制文件安装git服务 所有打包的二进制程序均包含 SQLite,MySQL 和 Po…...

Pdf手册阅读(1)--数字签名篇
原文阅读摘要 PDF支持的数字签名, 不仅仅是公私钥签名,还可以是指纹、手写、虹膜等生物识别签名。PDF签名的计算方式,可以基于字节范围进行计算,也可以基于Pdf 对象(pdf object)进行计算。 PDF文件可能包…...

嵌入式WebRTC压缩至670K,目标将so动态库压缩至500K,.a静态库还可以更小
最近把EasyRTC的效果发布出去给各大IPC厂商体验了一下,直接就用EasyRTC与各个厂商的负责人进行的通话,在通话中,用户就反馈效果确实不错! 这两天有用户要在海思hi3516cv610上使用EasyRTC,工具链是:gcc-2024…...

百度高德地图坐标转换
百度地图和高德地图的侧重点不太一样。同样一个地名,在百度地图网站上搜索到的地点可能是商业网点,在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中,搜索地名,如“乱石头川”,该地名会出…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...