前言

  许多像我一样的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. 2,简单的Python爬虫

    前言 根据上一篇 1,Python爬虫环境的安装我们已经在本地安装好了Python环境,那么这一篇就开始学习如何用Python来爬虫! 环境:操作系统:Windows10 IDE:   PyCharm ...

  2. codewars--js--Number of trailing zeros of N!

    问题描述: Write a program that will calculate the number of trailing zeros in a factorial of a given num ...

  3. Android中实现照片滑动时左右进出的动画的xml代码

    场景 Android中通过ImageSwitcher实现相册滑动查看照片功能(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  4. ORACLE中如何找出大表分布在哪些数据文件中?

    ORACLE中如何找出大表分布在哪些数据文件中?   在ORACLE数据中,我们能否找出一个大表的段对象分布在哪些数据文件中呢? 答案是可以,我们可以用下面脚本来找出对应表的区.段分别位于哪些数据文件 ...

  5. system.run

    客户端开启了remotecommand后可以在server调用该命令在agent上执行一些命令 命令中有逗号 zabbix_get -s xxx.xxx.xxx.xxx -k "system ...

  6. PMP--3. 项目启动过程组

    ####################################################### 从第三章开始,我正式进入项目过程,启动.规划.执行.监控.收尾五大过程组的具体在之后依次 ...

  7. Python之write与writelines区别

    一.传入的参数类型要求不同: 1. file.write(str)需要传入一个字符串做为参数,否则会报错. write( "字符串") with open('20200222.tx ...

  8. 处理方法返回值void

    1.默认响应效果:根据请求url寻找相应页面 1.1.配置的视图解析器 <!--配置视图解析器--> <bean id="internalResourceViewResol ...

  9. RocketMQ幂等性问题

    什么是幂等性: 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系 ...

  10. opencv —— saturate_cast 溢出保护

    src.at<uchar>(i,j)[0] = saturate_cast<uchar>(data); if (data < 0) data = 0; else if ( ...