大话STM32F103系统架构
前言
许多像我一样的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系统架构的更多相关文章
- STM32 系统架构
这里所讲的 STM32 系统架构主要针对的 STM32F103 这些非互联型芯片 STM32 主系统主要由四个驱动单元和四个被动单元构成. 四个驱动单元是: 内核 DCode 总线; 系统总线;通用 ...
- (系统架构)标准Web系统的架构分层
标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...
- 千万pv大型web系统架构,学习从点滴开始
架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 ...
- [网站性能1]对.net系统架构改造的一点经验和教训
文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...
- 5G系统架构
原文标题:迈向5G之路,颠覆性的5G系统架构? 本文部分图片,资料摘自<迈向5G C-RAN:需求.架构与挑战> 突如一夜春风来,随着Polar码与LDPC码作为5G编码候选方案,通信 ...
- 异构(兼容dubbo)SOA系统架构(.net)优化升级
前面一片文章已经提到我司的异构(兼容dubbo)SOA系统架构,解决了不少技术痛点,也还算比较完善,也顺利推广开来. 但作为项目的开发者,自己产品的问题心里是清楚的,离自己满意还是有不小的距离. 在推 ...
- 【系统架构】IT职业技能图谱(点开大图查看)
本文地址 1 程序开发语言综述 2 iOS开发工程师必备技能 3 运维工程师必备技能 4 前端工程师必备技能 5 大数据工程师必备技能 6 云计算工程师必备技能 7 安全工程师必备技能 8 移动无线测 ...
- [Architecture] 系统架构正交分解法
[Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大 ...
- 国内经典BI系统架构分析
谈起商业智能BI,也许大家并不陌生,但你是否了解国内的各类BI系统架构? 自国内商业智能发展以来,就系统结构方面已经历了多次优化性的变革.目前国内商业智能BI系统的经典架构的模式包括数据层.业务层和应 ...
随机推荐
- CodeForces 1B 模拟题。
H - 8 Time Limit:10000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- Android获取CPU编号
/** * 获取CPU序列号 * * @return CPU序列号(16位) * 读取失败为"0000000000000000" */ private static String ...
- 【爬虫】 爬虫请求json数据,返回乱码问题的解决
from django.http import JsonResponse from rest_framework.utils import json from utils import request ...
- 图解Java设计模式之设计模式七大原则
图解Java设计模式之设计模式七大原则 2.1 设计模式的目的 2.2 设计模式七大原则 2.3 单一职责原则 2.3.1 基本介绍 2.3.2 应用实例 2.4 接口隔离原则(Interface S ...
- 简单了解css3样式表写法和优先级
css3和css有什么区别?首先css3是css(层叠样式表)技术的升级版本,而css是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. ...
- leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- DataX的使用——大数据同步技术
准备工作: 1.视频教学http://113.31.104.47/portal/#/course/dashboard/b34d160db64624732ef152a1118af11a 2.DataX的 ...
- redis学习三连奏,绝对让你彻底吃透分布式架构精髓
2020年初,远程办公与直播授课成为国民刚需,腾讯因此免费开放可支持300人同时在线会议的“腾讯会议”.一时之间,这款软件的用户呈爆发性增长,据统计,腾讯会议一天就有近较100倍日常的会议数量. 谈及 ...
- [Python]scatter_matrix报错 module 'pandas' has no attribute 'scatter_matrix'
运行pandas.scatter_matrix()散点图函数时报错, 原因是该函数在新版本用法发生了变化: pandas.plotting.scatter_matrix 完整用法:pd.plottin ...
- C. Long Beautiful Integer
题目思路还是很直接,首先按要求生成字符串.如果该目标字符串小于原字符串,那么从第k位开始,找到最后一个非9的位置,++,同时如果有9,要考虑进位(一开始没有考虑WA了一次). 犯了一个错误,就是比较字 ...