【STM32内部架构理解】

2023-11-03

STM32和GD32F10X内部架构


最开始学stm32开始对架构各部分不是很了解看架构图基本上走马观花,然后陷入对各个外设的投入中去(比如GPIO/ADC/CAN等),但是对整体架构的掌握对后面编程很多细节的理解帮助很大,而外设的使用是学不完的,无需沉溺其中。在此处做回忆自用。

整体架构

STM32整体架构
看图说话:
ARM公司是设计芯片内核的公司,将专利授权给STM公司后,STM公司在内核如CotexM3的基础上进行设计,如外设和内核如何传递信息、外围设计哪些外设等。最后将整体封装引脚引出交付给买家。

模块架构

STM32F103模块化系统结构
如上图就是对系统结构进一步细化:
看这个图先要搞清楚驱动和被动单元是哪几个?
在小容量、中容量和 大容量产品中,主系统由以下部分构成:
● 四个驱动单元:
─ Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
─ 通用DMA1和通用DMA2
● 四个被动单元
─ 内部SRAM
─ 内部闪存存储器
─ FSMC
─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备
1. 首先Cotex-M3内核通过ICode总线(Instruction)在Flash里面读取指令(就是你烧进去的代码)。
2. DCode总线(Data)用来读取存储在SRAM里面的数据,这里的数据就是程序里定义的数据(包括变量和常量,常量用const修饰后存储在Flash中),不管是全局变量extern还是局部变量static都是存储在SRAM里面。
3.系统总线System Bus 主要是用来对外设的寄存器进行操作。
4.DMA总线可以访问FLASH、SRAM、数据寄存器,并在三者间快速交换数据。
5.AHB总线桥接成APB1和APB2,众多外设分别挂载在这两条总线上,所以编程时你会发现所有片上外设的寄存器地址都是基于AHB总线地址定义的。

总线矩阵

总线矩阵在这里插入图片描述
总线矩阵用来在多个主设备(驱动单元)和从设备(被动单元)之间进行调度,避免两个主设备同时对一个从设备读写的情形。图中标有圆点的表示这两个设备间可以通信。比如 S0:I 总线只有跟 M0、M2 和 M6 这三根被控总线交叉的时候才有圆圈,就表示 S0 只能跟这三根被控总线通信。从功能上来理解,I 总线是指令总线,用来取指,指令指的是编译好的程序指令。我们知道 STM32 有三种启动方式,从 FLASH 启动(包含系统存储器),从内部 SRAM 启动,从外部 RAM 启动,这三种存储器刚好对应的就是M0、M2 和 M6 这三条总线。

举例:当多个AHB 主设备试图同时访问同一个AHB从设备时,总线矩阵仲裁器介入以解决访问冲突。在下面的例子中CPU 和DMA1 均试图访问SRAM1 以读取数据。

图片
如上述示例总线访问请求同时发生的情况下,就需要总线矩阵仲裁。为了解决这种问题,需要应用循环调度策略:如果本次最后赢得总线控制权的主设备是CPU,则在下一次访问中DMA1将赢得总线控制权并首先访问SRAM1。CPU 随后方可有权访问SRAM1。

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

【STM32内部架构理解】 的相关文章

  • 转:正则表达式之 贪婪与非贪婪模式详解

    1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为 贪婪模式在整个表达式匹配成功的前提下 尽可能多的匹配 而非贪婪模式在整个表达式匹配成功的前提下 尽可能少的匹配 非贪婪模式只被部分NFA引擎所支持 属于贪婪模式的量词 也叫做
  • OpenEuler 第四章《用户与权限管理》练习题

    请创建一个用户组it 要求GID为1010 再创建一个组mg 要求GID为1020 root openEuler groupadd g 1010 it root openEuler groupadd g 1020 mg 创建一个用户user
  • 仿UNIX操作界面操作系统文件管理系统

    仿UNIX操作界面操作系统文件管理系统 设计要求 需求分析 设计概要 各模块说明 1 创建文件模块 2 删除文件模块 3 写入文件模块 4 读取文件模块 5 复制文件模块 6 剪切文件模块 7 目录模块 8 指令分析模块 9 帮助模块 代码
  • Mysql存储过程(批量处理)如何编写

    1 什么事存储过程 存储过程是一组为了完成特定功能的SQL语句集合 一个存储过程是一个可编程的函数 它在数据库中创建并保存 一般由SQL语句和一些特殊的控制结构组成 使用存储过程不仅可以提高数据库的访问效率 同时也可以提高数据库使用的安全性

随机推荐

  • 如何利用MiX Copilot提升我们的学习效率#周六晚上直播

    大家好 周六晚上8点半我们将分享如何通过MiX Copilot提升我们的学习效率 届时我们会重点讲解MiX Copilot的使用思路 以及它能为我们带来哪些便利 我个人认为 使用MiX Copilot的最大好处是全自动化 包括搜集信息以及处
  • (js特效) js代码实现弹出层

    源代码
  • 强化学习入门笔记

    强化学习 相关概念 我们先回忆一下童年 来看看超级玛丽这款游戏 在这款游戏里面的 我们需要控制超级玛丽进行左右行走 跳 攻击等动作 来躲避或攻击小动物 吃金币以及各种类型的增益道具 最终 获得的金币数量的多少以及通关代表我们玩游戏玩的好不好
  • Linux上Java JDK 环境的安装与配置

    参考原文地址 参考原文地址 1 下载 JDK 进入 Oracle 官方网站 下载合适的 JDK 版本 准备安装 注意 这里需要下载 Linux 版本 这里以jdk 8u151 linux x64 tar gz为例 你下载的文件可能不是这个版
  • 如何在jupyter上启动tensorboard

    我使用的环境是tensorflow2 0 python3 6 1 首先让我们创建一个计算图 class DemoModule tf Module def init self init value tf constant 0 0 name N
  • 配置 Mac系统下的 SSH

    记录一次成功的SSH 在Mac上自带SSH功能 1 打开终端 在shell里选择 新建远程连接 2 选择 安全Shell ssh 选择 右下角的加号 然后输入对方的IP地址 3 选中已经添加成功的IP地址 在下面输入用户名 就是对方的 前面
  • Mysql锁机制简单了解一下

    历史文章推荐 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机 jvm 的问题看这篇就够了 Java NIO 概览 关于分布式计算的一些概念 一 锁分类 按照锁的粒度分类 Mysql为了解决并发 数据安全的问题 使用了锁机制
  • 深度学习框架是做什么的

    3分钟看懂旷视深度学习框架天元MegEngine
  • c++中调用复制构造函数的三种情况

    普通构造函数是在对象创建时被调用 而复制构造函数在以下三种情况下会被调用 1 当用类的一个对象去初始化该类的另一个对象时 例如 Point a 1 2 Point b a 调用复制构造函数 Point c a 同上 2 如果函数的形参是类的
  • weex dom.scrollToElement 滚动问题

    使用weex 的dom scrollToElement 兼容问题 1 使用for生成的ref 在初始化获取ref节点时候需要有100ms延迟 2 dom scrollToElement 传入的 ref参数 需要使用this refs ref
  • DNS中的正向解析与反向解析 及 nslookup命令使用

    DNS中的正向解析与反向解析 Jackxin Xu IT技术专栏 博客频道 CSDN NET http blog csdn net jackxinxu2100 article details 8145318 正向解析 通过域名查找ip 反向
  • 黑盒测试方法之因果图和判定表——三

    前面文章 黑盒测试方法之因果图和判定表 一 主要讲述判定表驱动法的相关理论内容 黑盒测试方法之因果图和判定表 二 主要讲述因果图相关理论内容 4 因果图加判定表设计测试用例实例 这里以一个 软件评测师教程 上面的例子为例 来说明和演示因果图
  • GAN(初步学习)

    GAN的原理介绍 GAN的主要灵感来源于博弈论中零和博弈的思想 应用到深度学习神经网络上来说 就是 通过生成网络G Generator 和判别网络D Discriminator 不断博弈 进而使G学习到数据的分布 如果用到图片生成上 则训练
  • Zotero 相关学习链接

    参考链接 https www zotero org support zh start https github com l0o0 translators CN https www zhihu com question 21518558 ht
  • ROS串口通信(1)环境搭建

    ROS串口通信 1 环境搭建 引言 1 ubuntu串口驱动安装和使用 1 1 安装 1 2 使用 1 3 Ubuntu 查看串口 设置串口权限 2 Ubuntu下的串口助手cutecom 引言 无疑 串口的调试需要联合串口助手调试更加方便
  • 软件测试2019:第一次作业

    就是利用测试工具按照测试方案和流程对产品进行功能和性能测试 甚至根据需要编写不同的测试工具 设计和维护测试系统 对测试方案可能出现的问题进行分析和评估 执行测试用例后 需要跟踪故障 以确保开发的产品适合需求 使用人工或者自动手段来运行或测试
  • 三分钟拥有自己的 chat-gpt (开发到上线)

    三分钟拥有自己的 chat gpt 开发到上线 首先你需要有一个 laf 账号 如果你还不知道 laf 是什么 点击这里三分钟学会 然后你还需要有一个 chat gpt 的账号并且生成一个 apiKey 这一步可以问 Google 云函数
  • Centos 7 阿里yum源及epel源配置

    1 下载阿里yum配置文件 wget O etc yum repos d CentOS Base repo http mirrors aliyun com repo Centos 7 repo 2 下载阿里epel配置文件 wget O e
  • ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found

    在运行程序的时候报错 import cv2 ImportError usr lib x86 64 linux gnu libstdc so 6 version GLIBCXX 3 4 26 not found required by hom
  • 【STM32内部架构理解】

    STM32和GD32F10X内部架构 整体架构 模块架构 总线矩阵 最开始学stm32开始对架构各部分不是很了解看架构图基本上走马观花 然后陷入对各个外设的投入中去 比如GPIO ADC CAN等 但是对整体架构的掌握对后面编程很多细节的理