前言

  许多像我一样的STM32初学者,都往往忽视了STM32系统架构的学习。这对于实际应用并没有啥大的影响,但是总感觉怎么学也无法看清STM32的全貌,所以本文我将带领大家一起厘清STM32F103的总线结构和各部分外设之间的关系。在《三体》小说中,作者曾用军队阵列的方法模拟了冯诺依曼架构的计算机,读来画面感十足,且易于理解,本文也力求解释的形象与生动。

系统全貌

  在罗列各个方阵前,我们有必要先登上高山,一览军队全貌,如官方手册里的框图所示,相比51单片机,STM32F103系统还是相当复杂的,但是其阵列也必将威武雄壮。

系统剖析

Cortex-M3内核

  它是STM32F103的内核,也就是CPU,相当于元帅。除掉他,其他部件都是片上外设,注意是片上的,也就是那块我们肉眼所见的芯片里的外设。这位元帅足不出户,便可操纵队列,依靠的是自己强大的数字运算能力和强大的总线设计。在阵列中,数据的运算都呈报给元帅来做。

ICode总线

  阵列的运行需要有人下达指令,元帅Cortex-M3是命令的下发者,却并非命令的产生者。那么命令从何而来?在《三体》中,冯诺依曼在布阵前早已想好了指令。同样,各位STM32的热爱者才是聪慧的命令发起者——我们写好的程序被译成机器指令存储于Flash中。ICode总线就是一队骑兵,将指令一条条送达给元帅Cortex-M3。

Bus-Matrix

  Bus-Matrix的功能是总线仲裁。类似于现在的快递站,假如没有快递站作为中转,一家快递公司的送货路线规划就变成了14亿条。在阵列中,方阵Bus-Matrix作为中介,减少了骑兵队的数量开销,增加了系统的简洁有序性,降低了信息传输的错误率。在图中,Bus-Matrix右侧安排了四支骑兵,他们送来的信息都被加以分类,而左侧的四支骑兵则可以从属于自己的类别中拿走信件,避免了错拿的情况。这就是Bus-Matrix的作用之处。

DCode总线

  人如其名,骑兵队DCode被用来传送数据,这里的数据指程序中的常量和变量。常量存储在Flash,变量和堆栈则存储在SRAM。元帅Cortex-M3需要这些数据来作运算,中途还会让骑兵队DCode送些数据回去存储。

System总线

  这个总线是被用来配置和访问片上外设寄存器的。元帅Cortex-M3要调度众多的外设方阵,所以专门设立了这样一支骑兵队。我们常说配啥啥寄存器,其实就是间接在给骑兵队System发号施令呢!

DMA与DMA总线

  前面提到的三个骑兵队都通向元帅的大营,Cortex-M喜欢用他们送来的数据做运算。但如果要有很多骑兵前来告诉他这份数据要送到某某处,那他会心力交瘁的,DMA的设立则缓解了元帅的这个压力。STM32F103共有12个DMA通道,也就是12支机动部队,它们活动的路线并非像前三支骑兵队一样固定。在图中可以看到,外设方阵可以向机动部队发送请求,DMA搬运数据时也不会去打扰元帅,这样的部队真是元帅的得力助手啊。而且DMA可以轻轻松松搬运大批量的数据,从不会耐烦,堪称数据的搬运工。

FLASH

  冯诺依曼是个聪明人,早知道阵列模拟不会一次性成功。为了不用自己一次次重新颁布指令,就安排了名为Flash的将军来记载指令和常量。Flash将军是军中记忆力最好的(我们知道程序下载到Flash里后是掉电不失去的)。

SRAM

  变量和堆栈记录,为啥不能交给Flash一并做呢?这是因为Flash将军虽然记忆好,但是手脚慢,而变量更改比较频繁,让他干这个不合适。代替他的就是SRAM方阵(我们都知道SRAM是掉电丢失的,但是数据读写真的很快)。

APB1和APB2总线:

  由骑兵队AHB分出的两队骑兵APB1和APB2都是用来与片上外设进行交流的。之所以分成两组,是因为他们发现所有的外设方阵中,有的方阵动作快,有的方阵慢手慢脚,于是将慢的一组交给马速较慢的APB1,快的交给马速较快的APB2。其中APB1最快的行军速度为36MHz,APB2最快为72Mhz。

RCC:

  众多的外设方阵,不用像元帅一样每时每刻都得工作着。不工作的时候就得让他们休息着,所以就出现了RCC校尉,用于管理外设方阵的作息(在32里,我们要使用某个片上外设,都得先开RCC使能)。

SDIO:

  Flash和SRAM的能力是有限的,而SD卡的容量很大,SDIO就是专门用来与SD卡沟通的接口。

大话STM32F103系统架构的更多相关文章

  1. STM32 系统架构

    这里所讲的 STM32 系统架构主要针对的 STM32F103 这些非互联型芯片 STM32 主系统主要由四个驱动单元和四个被动单元构成. 四个驱动单元是: 内核 DCode 总线; 系统总线;通用  ...

  2. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  3. 千万pv大型web系统架构,学习从点滴开始

     架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...

  4. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  5. 5G系统架构

    原文标题:迈向5G之路,颠覆性的5G系统架构?   本文部分图片,资料摘自<迈向5G C-RAN:需求.架构与挑战> 突如一夜春风来,随着Polar码与LDPC码作为5G编码候选方案,通信 ...

  6. 异构(兼容dubbo)SOA系统架构(.net)优化升级

    前面一片文章已经提到我司的异构(兼容dubbo)SOA系统架构,解决了不少技术痛点,也还算比较完善,也顺利推广开来. 但作为项目的开发者,自己产品的问题心里是清楚的,离自己满意还是有不小的距离. 在推 ...

  7. 【系统架构】IT职业技能图谱(点开大图查看)

    本文地址 1 程序开发语言综述 2 iOS开发工程师必备技能 3 运维工程师必备技能 4 前端工程师必备技能 5 大数据工程师必备技能 6 云计算工程师必备技能 7 安全工程师必备技能 8 移动无线测 ...

  8. [Architecture] 系统架构正交分解法

    [Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大 ...

  9. 国内经典BI系统架构分析

    谈起商业智能BI,也许大家并不陌生,但你是否了解国内的各类BI系统架构? 自国内商业智能发展以来,就系统结构方面已经历了多次优化性的变革.目前国内商业智能BI系统的经典架构的模式包括数据层.业务层和应 ...

随机推荐

  1. Python Flask 开发学习笔记

    Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...

  2. JavaScript 箭头函数(Lambda表达式)

    Lambda表达式(箭头函数)用于表示一个函数,所以它和函数一样,也拥有参数.返回值.函数体,但它没有函数名,所以Lambda表达式相当于一个匿名函数. 使用方法: ()=>{} 小括号里放参数 ...

  3. 用pycharm自带的数据库创建项目00

    一.生成表格1.创建模型类(在 models.py文件中创建一个person类并且继承models.Models类) 2.生成表格(在项目目录下)(1)生成迁移文件:在pycharm下方的命令行Ter ...

  4. Sublime text3的安装以及python开发环境的搭建

    作者:struct_mooc 博客地址:https://www.cnblogs.com/structmooc/p/12376601.html 一. Sublime text3的安装 1.sublime ...

  5. 抖音快手短视频去水印API,接口开发文档

    开发者官网:http://api.lingquan166.com/ 简介:根据抖音.微视.小红书.皮皮搞笑等APP中复制出来的链接,解析获取短视频的标题.封面.无水印短视频地址等信息. 接口地址: h ...

  6. Leetcode 与树(TreeNode )相关的题解测试工具函数总结

    最近在剑指Offer上刷了一些题目,发现涉及到数据结构类的题目,如果想在本地IDE进行测试,除了完成题目要求的算法外,还需要写一些辅助函数,比如树的创建,遍历等,由于这些函数平时用到的地方比较多,并且 ...

  7. 【第一篇】为什么选择xLua

    为什么选择xLua 1. 易用性 Unity全平台补丁技术,可以运行时把C#实现(方法.操作符.属性.事件.构造函数)替换为lua的实现 自定义struct,枚举在lua和C#之间传递无C#的gc a ...

  8. Bootstrap 手机屏幕自适应的响应式布局开关

    head中添加 <meta name="viewport" content="width=device-width, initial-scale=1, shrink ...

  9. spring cloud微服务快速教程之(九) Spring Cloud Alibaba--sentinel-限流、熔断降级

    0.前言 sentinel的限流.降级功能强大,可以在控制面板中任意制定规则,然后推送到微服务中: 可以根据URL单独制定规则,也可以根据资源名批量制定规则: 需要注意的地方是:1.GITHUB文件在 ...

  10. 安装Jenkins到Ubuntu(APT)

    运行环境 系统版本:Ubuntu 16.04.4 LTS 软件版本:Jenkins-2.176.2 硬件要求:最低内存:256MB.磁盘:1GB 安装过程 1.配置APT-Jenkins存储库 APT ...