第一章 MCU 内部架构
第一节 认识MCU及其内部架构
第一部分 MCU 简介
MCU:微控制单元(Microcontroller Unit) ,又称单片微型计算机(Single Chip Microcomputer )或单片机,是把中央处理器(Central Process Unit,CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。
通用MCU:包含了各种常见的外设,可以执行指定的各种用户程序并完成指定的功能,应用在通用领域而非专用领域。
常见MCU品牌:宏晶科技STC、兆易创新GigaDevice、飞思卡尔Freescale、意法半导体ST、瑞萨Renesas等等。
第二部分 MCU 内部架构
1、MCU DATASHEET
每种芯片都有所对应最权威的芯片数据手册,里面包含了各种重要的信息;其次,该手册可以通过芯片的官方网站或第三方的ALLDATASHEET网站进行获取;把翻看DATASHEET培养成一个良好且重要的习惯,在以后的实践及项目中是举足轻重的。
2、宏晶科技 STC89C52
外设:UART串口、Timer定时器、WDT看门狗、GPIO等;
存储器:RAM、Flash、EEPROM等;
3、兆易创新 GD32F101x
1、CPU:ARM CortexM3;
2、BUS:ARM AMBA AHB Bus Matrix and APB Bus;
3、非易失性存储器:Flash;
4、易失性存储器:SRAM;
5、外设:UART串口、Timer定时器、GPIO等。
3、意法半导体 STM32F103C8
1、CPU:ARM CortexM3;
2、BUS:ARM AMBA AHB Bus Matrix and APB Bus;
3、非易失性存储器:Flash;
4、易失性存储器:SRAM;
5、外设:UART串口、Timer定时器、GPIO等。
第三部分 MCU 内部模块简介
1、数字部分&模拟部分
数字部分:大部分使用Verilog编写的RTL代码,执行数据逻辑功能,都是数字电路;Flash等内部存储器则是直接使用现成的物理器件;
模拟部分:大部分都是现成的物理器件,例如PLL、LDO电源等,都是模拟电路。
2、核心组建
1、**CPU**:用于执行用户程序指令,MCU的大脑;
2、**BUS**:MCU内部数据交互的“桥梁”,一般采用AMBA总线,包括AHB,APB,AXI总线;
** 2.1、AHB总线属于高速总线,用于连接MCU内部的高速模块**,如内部存储器,DMA控制器等,还连接高速总线外设,例如USB总线;
** ** 2.2、APB总线属于低速总线,用于连接MCU内部的低速模块,如UART, SPI总线等。
3、**非易失性存储器(**Non-Volatile Memory,NVM**)**:“硬盘”,永久性保存用户程序、数据,掉电后数据依然可以保存;
4、**易失性存储器(**Volatile Memory Storage,VMS**)**:“内存”,用于保护程序的中间变量、堆栈、掉电后数据丢失;
5、**外设**:执行指定的功能,包括功能外设和通信外设。
**** 5.1、功能外设包括****:TIMER, 看门狗,中断控制器等;
** 5.2、通信外设包括**:UART,SPI,I2C,USB,SDIO等。
6、**地址映射表**:“存储映射”,CPU读写操作都会有对应的地址,每一个模块都有自己的地址;
7、**系统控制器**:用于控制MCU内部各个模块的状态;
8、**中断控制器**:连接并管理来自各个模块的中断信号与CPU的中断线;
9、**时钟树**:各个模块的时钟分配,每个模块的时钟信号都可以选择的;
10、**复位树**:各个模块的复位分配,一个MCU中可能有多种复位状态。
第二节 认识CPU及其内部架构
第一部分 CPU 简介
CPU:中央处理器(Central Processing Unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
指令集:CPU所有的指令集合,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效的工具之一。从现阶段的主流体系结构讲,指令集可分为复杂指令集和精简指令集两部分。
常见的CPU核:Intel的89C51内核、ARM公司的Cortex系列、RISC V等。
第二部分 CPU内部架构
本文以ARM Cortex-M3为例:
1、ARM Cortex-M3 特点
1、指令集**Thumb-2**,指令宽度16位或32位,指令执行三级流水线;
2、32位单周期乘法、硬件除法(该CPU没有浮点数计算单元(floating point unit,**FPU)**,不过Cortex-M4及其之后就有了);
3、低延迟进入和退出中断处理函数;
4、NVIC支持1~240个外部中断和11个系统异常,优先级可动态配置;
5、便于调试(利用Jlink调试,可以读取指定寄存器;Keil软件可单步调试 );
6、包含MPU(内存保护单元)、SysTick滴答计时器等;
7、低功耗、低成本。
2、ARM Cortex-M3 组件
1、NVIC:嵌入式中断向量控制器,用于控制中断(内部含有SysTick滴答计时器);
2、CPU核心:CPU指令处理的核心;
3、DEBUG调试接口:用于调试;
4、MPU:用于控制读写访问权限保护数据;
5、总线接口:与外部交换数据。
第三部分 CPU的功能
1、ARM Cortex-M3 核心
1、指令获取单元(Instrution Fetch Unit):用于获取指令;
2、译码器(Decoder):将一条指令进行译码,获取具体的指令信息;
3、ALU:算数逻辑单元,用于进行运算;
4、寄存器组(Register Bank):通用寄存器和特殊功能寄存器;
5、存储器接口(Memory Interface):与外部交互数据;
6、跟踪接口(Trace Interface):用于调试。
2、ARM Cortex-M3 指令执行流水线
a、流水线操作(**三级指令流水线**):取址 -> 译码 -> 执行。80C51亦是如此;
b、完整的流水线操作(**五段式指令流水线**):取址 -> 译码 -> 执行 -> 暂存 -> 写回;
c、下一条指令的执行无需等待上一条指令执行完成;
d、汇编文件(.S文件)里面的代码就是指令,例如:MOV R8,R3
3、ARM Cortex-M3 常见指令操作
a、数据处理指令:用于对数据的处理,例如数据传输指令(寄存器间)、算数指令(加减乘除)、逻辑运算指令(与或非)、比较指令(大于等于小于);
b、跳转指令:用于对程序的跳转;
c、程序状态寄存器访问指令:用于访问程序相关的状态;
d、加载存储指令:用于寄存器与存储器之间数据的传送。
4、ARM Cortex-M3 内部寄存器组
a、通用寄存器: 数据的暂存
b、功能性寄存器包括程序状态寄存器、中断屏蔽寄存器控制寄存器。
c、通用寄存器的R13和R15:
R13堆栈指针SP;
R15程序计数器PC;
Word对齐(字节对齐)。
5、ARM Cortex-M3 总线接口
a、CPU通过总线接口与外部进行数据的交换。
b、指令总线**IBUS**接口:只读,用于读取指令。
c、数据总线**DBUS**接口:可读可写,用于读写中间变量、堆栈、存取用户数据.
d、系统总线**SBUS**接口:可读可写,用来读写外设等模块的寄存器。
e、取址以**word的长度**进行,每个总线都是地址对齐的。
6、ARM Cortex-M3 NVIC
a、NVIC: 嵌入式中断向量控制器。
b、最多支持 1~240 个外部中断,支持1个外部不可屏蔽中断,支持16个异常。
7、ARM Cortex-M3 NVIC中断配置
每个外部中断,都有对应的内部寄存器。
a、使能寄存器**SETENA**: 允许该外部中断;
b、失能寄存器**CLRENA**:禁止该外部中断;
c、优先级寄存器**PRI**: 配置该中断的优先级;
d、活跃状态寄存器**ACTIVE:** 只读,读取可以得到该中断是否活跃;
e、悬起状态寄存器**SETPEND**:读取可以得到该中断是否悬起,也可以手动悬起该中断;
f、解悬寄存器**CLRPEND**:清除该中断的活跃、悬起状态。
8、ARM Cortex-M3 NVIC中断优先级
优先级有两级:主优先级 (抢占优先级),次优先级(响应优先级)。主优先级高的中断可以打断低的中断,但是当主优先级相同时次优先级高的中断不可以打断低的中断。中断优先级的数字越小,级别越高。
优先级可以动态配置,优先级分组可以配置。优先级寄存器PRI不是所有位都会用到,MCU厂商决定用到哪些位,分组配置位于应用程序中断与复为控制寄存器AIRCR中的第8位至第10位共计3位,取值范围由PRI的使用情况决定。
STM32F103 只使用到了PRI的高4位,所以只能将中断分为 5 个组。bit[7:4]指的是PRI寄存器,具体配置如下表所示:
9、ARM Cortex-M3 异常
9-1、系统异常:系统运行进入了异常的状态
a、复位:程序复位;
b、NMI: 外部不可屏蔽中断;
c、HardFault:硬件错误;
d、MemManageFault:错误地访问了MPU保护的区域;
e、UsageFault:指令错误,例如错误的程序;
f、SysTick:滴答计时器溢出。
9-2、1~15是固定的异常,不可改变顺序。
10、ARM Cortex-M3 中断向量表
a、中断向量表:包含中断服务程序的入口地址;
b、中断向量表的首地址在**VTOR**寄存器中配置;
c、中断向量表中1~15为异常,16以后为外部中断(最多支持 1~240 个外部中断);
d、其中所有中断和异常都可以配置优先级,但是只有三个除外,分别为**复位**、**NMI**、**HardFault**。
11、ARM Cortex-M3 中断建立流程
a、设置中断优先级分组;
b、如果需要重定位向量表,先把**HardFaul**和**NMI**服务例程的入口地址写到新表项所在的地址中;
c、配置新的中断向量表的偏移地址即配置**VTOR**寄存器;
d、计算各个中断处理函数的**首地址**并填入向量表;
e、对于要使用的中断,设置该中断的优先级,然后使能。
11、STM32F103 中断向量表(.S里)
12、ARM Cortex-M3 中断的响应
a、将内部相关的寄存器的值**压入堆栈**,起到保护现场的作;
b、从中断向量表中找到对应的**中断处理函数入口地址**;
c、**更新堆栈指针SP**,等待中断返回时还原现场;
d、**更新程序计数器PC**,指向中断处理函数首地址开始执行;
e、执行中断处理函数。
PS:每个异常也有相关的寄存器,但根据M3内核手册上的内容,在这里不建议大家对这些异常进行配置,NVIC是ARM CortexM3内核内部对中断的控制,与CPU外部的中断控制器不是一个模块,而且负责的功能也不一样。
13、ARM Cortex-M3 存储器映射表
1、存储器映射:将整个MCU内外的存储器、外设等所有模块全部进行统一的编址,即使用地址来描述各个模块的位置,每一个地址只能对应一个模块使用,不可以使得多个模块使用同一个地址。
2、CPU访问读写操作都是针对地址进行。
a、4GB的寻址空间;
b、地址空间划分固定,例如SRAM、外设有专门的地址空间,但是每个地址空间里面的安排由MCU厂商决定;
c、一般情况下,建议用户程序读写指定地址做到word对齐。
14、ARM Cortex-M3 位带操作
a、位带:把一个位带区的32位的数据中的每一位都给映射成到位带别名区一个32位的数据;
b、**先读取再修改后写回**的三步直接改为只需一步的写操作;
c、公式:A位要操作的地址,n为第几位。
举例:把0x20000000的bit1改写成1,则直接往0x22000004写1就可以。
15、ARM Cortex-M3 MPU
a、MPU: 存储器保护单元,以区域为单位的,每个区域可以指定大小,共支持8个区域;
b、具体功能:控制指定地址区域(例如存储器)的读写权限,包括特权级访问和用户级访问。当当前级别不允许读写时发生了读写操作,则触发**MemManageFault**异常,起到了保护数据的作用;
c、提高系统的可靠性:系统数据区禁止用户级访问防止被意外破坏,把关键数据区设置为只读;
d、MPU不会限制CPU进行异常处理时读取对应的异常处理函数;
e、用户程序可配置,配置寄存器位于CPU的内部,此配置不经过CPU外部总线。
16、ARM Cortex-M3 SysTick系统滴答定时器
a、SysTick:CPU内部的24位系统滴答定时器,包含配置寄存器;
b、时钟源::CPU内部时钟源、外部时钟源;
c、使用方法:设置一个初始值,然后每过一个时钟周期减1,当减至0时,可以配置是否产生SysTick异常,该定时器会自动重新装载初始值。
17、ARM Cortex-M3 指令流程小结
a、CPU内部的总线接口,通过**指令总线**从外部指定地址(一般是ROM,程序存储在ROM里)读取一条指令代码(**程序计数器PC**也发生了变化准备读取下一条指令);
b、CPU内部的**译码器**将这一条指令进行解码,获得具体的指令信息 (同时下一条指令已经开始取址);
c、将来自内部**寄存器**或者来自于**总线接口的数据总线读取的数据**,进行例如运算操作、逻辑操作等等;
d、CPU将内部的指令执行结果数据,**暂存**在内部的**通用寄存器**中。
e、CPU通过总线接口,将暂存在寄存器内部的数据通过数据总线对外传输到**指定地址。**
18、CPU基本结构小结
a、中断控制器:用于控制中断。
b、CPU核心:CPU指令处理的核心。
c、DEBUG调试接口:用于调试。
d、总线接口:与外部交换数据。
第三节 总线、存储器
第一部分 总线
1、总线
** **总线就是用于连接各个部分并且支持各部分之间的相互通信的公共线路。
2、总线分类
** **串行总线、并行总线。
3、MCU内部的总线
a、用途:连接MCU内各个模块,包括CPU、存储器、外设等;
b、常见的总线:ARM公司的AMBA系列总线、开源的wishbone总线等;
c、AMBA总线:包含**AHB**总线、ASB总线、**APB**总线、AXI接口。
4、AMIBA系列总线:AHB(Advanced High-performance Bus)总线
a、高性能系统中的中枢总线;
b、连接着高性能、高频率的模块,比如说片内片外存储器、DMA、CPU总线接口、高速外设(例如ETH等)等;
c、多主机Master与多从机Slave的连接,构成了**AHB总线矩阵**。每次传输都是由Master发起的;
Master:**可以主动**发起数据交换,包括CPU总线接口、DMA等;
Slave:**不可以主动**发起数据交换,包括存储器接口、各种外设等;
d、支持单一传输,支持4、8、16拍等增量或回环突发传输,也支持字节、半字、字传输;
e、不同的AHB总线矩阵也可以互联。
单一读写
突发读写(4拍增量)
5、AMBA系列总线:APB(Advanced Peripheral Bus)总线
a、低速总线、降低了功耗消耗和接口的复杂性;
b、连接着低性能、低频率模块,比如低速外设 (例如UART、GPIO、TIMER等)等;
c、APB总线通过一个AHB2APB桥与AHB总线连接,AHB2APB是一个AHB总线上的Slave,APB总线也相当于是AHB总线的一个Slave;
d、APB总线内部只有AHB2APB这一个Master,其他的例如外设都是SIave,因此只有AHB2APB才可以发起数据的传输。
读写
6、MCU 内部总线的连接结构
7、MCU 内部总线的屏蔽机制
a、上面是**Master**,竖着的线是**Master**。
b、右边是**Slave**,横着的线是**Slave**。
c、横线与竖线相交时,有**节点**则说明该Master可以**访问**这个Slave。
d、AHB总线矩阵内部有一个屏蔽机制,1个Master不可以访问部分的Slave,一般由厂商决定。
第二部分 存储器
1、存储器的分类
a、按位置
外部存储器:在MCU外部的存储器叫外部存储器,例如FLASH、EEPROM等;
内部存储器:在MCU内部的存储器叫内部存储器,例如SRAM、FLASH等。
b、按读写
RAM: RAM是随机存取存储器,可以根据地址进行任意读写操作;
ROM:ROM是只读存储器,只能进行地址址读操作。
c、按接口 (为了方便理解增加的概念) :
总线存储器:直接与总线相连的存储器;
外设存储器:直接与外设相连的存储器,例如SPI、FLASH等。
d、按断电后存储情况:
易失性存储器:断电后保存数据丢失;
非易失性存储器:断电后数据仍然可以保存。
e、按暂存数据的方式:
SRAM:静态随机存取存储器,暂存数据是不需要反复刷新操作。性能优异,成本高、集成度低、功耗大;
DRAM:动态随机存取存储器,暂存数据是必须反复刷新操作,例如SDRAM。
2、MCU 内部存储器
a、SRAM:用于存放中间变量、暂存用户数据等;
b、FLASH:用于存放用户程序、保存用户数据、芯片相关信息等。
c、一般情况下,MCU内部的FLASH带有Cache,用于提高读取速率。
第四节 存储器控制器、常见的存储器
第一部分 存储器控制器
1、存储器控制器:将存储器的以正确的方式按照总线上的读写数据的操作进行读写数据;
2、不同的存储器有不同的存储器控制器。
第二部分 存储器控制器的内部结构
1、总线接口:连接MCU内部总线的
a、作用一是传输存储器控制器的配置信息;
b、作用二是传输符合存储器控制器接口的存储数据。
2、配置寄存器:配置存储器控制器的功能,例如存储接口的时序配置;
3、存储器接口:与存储器相连接,将总线上的数据交换转换成符合存储介质存储时序的数据交换;
4、存储控制器:控制整个存储器控制器的功能,控制存储器接口正确完成存储器与MCU内部总线的数据交换。负责中断信号的管理。
5、中断信号:数据读写状态中断、错误检测信号中断等.
第三部分 存储器控制器的位置
第四部分 常见的存储器
1、存储器控制器与存储器
内部存储器:性能稳定,减少PCB的面积,使用方便。但是受制于体积、工艺成本等因素容量不会做的太大;
外部存储器:PCB板的面积较大、外围电路设计复杂、信号完整性较差易受干扰。但是一般容量比较大;
MCU一般都是内部包含了一定容量的两种存储器(易失性存储器SRAM和非易失性存储器Flash),同时包含了外部存储器接口及其对应存储器的存储器控制器,例如外部NAND Flash接口。
2、常见的外部存储器
a、易失性存储器:SDRAM、DDR等。用于存放中间变量、堆栈,暂存用户数据等;
b、非易失性存储器:NAND Flash、NOR Flash等。用于存放用户程序,永久保存用户数据等。
3、常见存储器——SDRAM
a、SDRAM(Synchronous Dynamic Random-Access Memory):同步动态随机存取内存;
b、内部是一个以电容单元的存储阵列,电容电量有无代表数据是1还是0;
c、访问一个存储单元,存储器控制器需要将地址转换成一个行地址,一个列地址;
d、由于电容电量会逐渐减少,必须每隔一段时间存储器控制器就要将所有存储数据的电容充电一次,即**刷新**操作,否则内部存储的数据会丢失;
e、SDRAM的**地址线和数据线是分开**的。SDRAM的时序和操作比较复杂,存储器控制器设计复杂。
4、常见存储器——NAND Flash & NOR FIash
a、NAND Flash & NOR Flash:掉电可以保存数据,但是默认存储的数据为1,写入后变为0;
b、内部是一个以MOS管作为最小存储单元,其中的悬浮门是否注入电荷决定存储数据是0还是1;
c、内部分为若干个存储块,一个存储块包含若干个页,至于每页包含若干字节;
d、NAND Fash一般写入和读取的单位是**页**,NOR Flash一般是**字或字节**,所以在NOR Flash里可以直接执行用户程序;
e、如果要修改已经写入的数据,就需要先进行擦除操作,将存储的数据全部变为1,方可重新写入数据。擦除操作一般以块为单位。两种Flash的寿命都是有限的,不能总是频繁的擦除,NAND寿命长一些;
f、NAND Flash的写入、擦除更快,成本低;NOR Flash的读取更快、稳定性好;
g、NAND Flash的存储器控制器比NOR Flash的复杂很多;
h、NAND Flash的存储器控制器的地址线和数据线是公用的,而比NOR Flash的存储器控制器是分开的;
j、NOR Flash可以直接使用SRAM接口;
k、MCU内部一般是一个较大容量的NAND Flash用于用户数据、程序存储。
第五节 常见外设
第一部分 MCU 外设介绍
1、在MCU芯片中,外设分为功能性外设和通信外设。一般是以通信外设为主;
2、外设在MCU内部连接着总线,一般属于总线的Slave,由CPU根据用户程序指令控制外设进行通信。
第二部分 MCU 外设分类
1、按功能分
a、通信外设:与外界进行数据交换;
b、功能性外设:完成特定的功能。
2、按速率分
a、高速外设:连接AHB总线;
b、低速外设:连接APB总线。
3、按通信速率(模糊分类)
a、高速通信外设:速率在MHz级别,甚至几十、几百MHz;
b、低速通信外设:通信速率在10MHz以下。
4、按通信方向
a、全双工:可以同时双向通信;
b、半双工:双向不能在同一时刻同时通信;
c、单工:任何时刻都只能单向通信。
5、按数据线数目
a、并行通信:多根数据线;
b、串行通信: 一根数据线。
6、按主从
a、主从通信:通信网络上包含Master节点;
b、平行通信:通信网络上所有节点平等。
7、按同步异步
a、同步通信:接口包含时钟信号;
b、平行通信:接口不包含时钟信号。
第三部分 常见的外设
1、UART
a、通信外设:UART(Universal Asynchronous Receiver-Transmitter)通用异步传输收发器
b、特点: 全双工、低速通信外设,异步通信,常用波特率115200,没有Master和Slave之分
c、接口:
TXD:发送引脚;
RXD:接收引脚。
d、经常用于设备调试,例如将设备通过串口连接至上位机然后使用串口助手,将内部状态信息通过串口打印出来就可以知道设备内部的运行状态。工业上的UART有的会使用RS485系列的进行通信。部分外部功能模块例如ublox的GPS模块的接口就是UART,还有 WIFI模块通过UART连接MCU传输数据等。
2、I2C
a、特点:半双工,低速外设,同步通信,常用速率100kHz、400kHz、1MHz等,有Master和Slave之分。
b、接口
SCL:时钟引脚,Master负责发送时钟信号。
SDA:数据引脚,Master和Slave都可以发送数据信息。
Master写操作,Master发送对应的Slave设备地址和数据信息。
Master读操作,Master发送对应的Slave设备地址信息,对应的Slave发送数据信息。
c、I2C内部集成电路总线
经常用于连接**外部低速模块**,且I2C可以构成总线网络,连接多个设备。例如无人机的MCU连接各种低速传感器模块等,MCU作为**Master**,气压计、陀螺仪等传感器作为**Slave**,然后Slave根据Master发送的地址作为匹配进行数据交换。I2C接口也可连接外部存储器例如EEPROM,虽然数据读取速率比较慢,但是使用方便,适合存储少量用户数据以及实时性不高的数据。
3、SPI
a、特点: 全双工,速度可以达到几MHz,同步通信,有Master和Slave之分;
b、接口
SSN:片选引脚,Master负责发送片选信号;
SCK:时钟引脚,Master负责发送时钟信号;
MOSI:数据引脚,Master发送给Slave的数据线;
MISO:数据引脚,Slave发送给Master的数据线;
Master读写操作同时进行,Master发送片选信号和时钟信号,然后每个时钟周期MOSI和MISO同步传输数据。
c、SPI串行外设接口
用于连接**外部较高速度的模块**,通信速度明显高于连接部分模块例如陀螺仪、高度计等传感器,支持SPI接口通信。SPI接口连接外部SPI Flash一种常见的用法,这种 Flash是外设存储器,虽然速率没有直接通过存储器接口连接外部Flash快,但是SPI FIash通信接口简单,易于使用。
4、Timer定时器
a、功能:计时、PWM输出、输入捕获;
b、计时:启用内部计数器,用户可配置计数频率和门限值,当计数到设定的门限值,可以产生定时器中断,达到定时延时的效果。常用于程序中进行延时、定时执行程序等;
c、PWM:对外输出PWM信号,占空比可调。用于驱动电机改变电机转速、用于改变输出电压的有效值等;
d、输入捕获:计算输入的信号频率。用于连接电机编码器等计算电机转速、用于测量外部信号的频率。
5、Watchdog看门狗
a、功能:内部计数达到门限值时复位系统;
b、计时:启用内部计数器,用户可配置计数门限值,用户程序中需及时将计数值复位(喂狗),若因没有及时复位计数值,当计数到设定的门限值,可以产生系统复位信号,目的是方式用户程序跑飞导致系统卡死。
6、MCU的常见外设
对于一个MCU,一般情况下:通信外设至少要有**GPIO**口和串口**UART**;功能性外设一般都要有定时器**Timer**等。
第六节 地址表 & 地址树
第一部分 地址表
1、ARM Cortex M3 地址与存储大小
1个byte字节,对应的就是一个地址。
地址 0x00000000 到地址 0x00000010,是16bytes;
地址 0x00000000 到地址 0x00001000,是4kB;
地址 0x00000000 到地址 0x00010000,是64kB;
地址 0x00000000 到地址 0x00100000,是1MB。
2、地址映射关系与地址分配
已知:2个64K的SRAM、一个1M的Flash、4kB的GPIO、1kB的UART,分配地址空间设计地址表。简单分配结果,即地址表:
a、不同模块的地址绝对不能有重叠;
b、模块一定要放在正确的区域;
c、内部的外设和SRAM在分配时可以尽量放在位带区,支持位带操作。
3、STM32F103系列地址表
第二部分 时钟树
1、MCU 时钟树
a、各MCU内部各个模块进行分配时钟;
b、在时钟树上,我们可以看到有哪些时钟源、以及各个模块的时钟是如何分配的。
2、MCU 时钟树的时钟源
a、外部高速时钟HSE、外部低速时钟LSE;
b、内部高速时钟HSI、内部低速时钟LSI;
c、内部PLL锁相环。
3、MCU 时钟树的时钟输出
a、系统时钟:用于给CPU、总线、系统控制器;
b、外设时钟:外设模块
c、低速低功耗时钟:低功耗时使用。
4、MCU 时钟树的相关器件
a、MUX时钟选择器:选择时钟;
b、prescaler时钟分频器:对时钟进行分频;
c、GATE门控:开关时钟。
第七节 复位树、中断控制器、系统控制器
第一部分 复位树
1、MCU 复位树
a、复位树将不同的复位信号分配给不同的模块;
b、在MCU芯片里的数字逻辑部分,复位就是对时序逻辑电路里面的寄存器reg类型变量复位成默认值,实际上就是将模块恢复成默认状态;
c、复位不会改变非易失性存储器存储的内容;
d、复位对于任何模块来说都是异步信号,所以复位树需要将复位信号同步至每一个模块的时钟域内,防止出现复位失败;
e、每个MCU的复位等级对应复位设置不同,由厂商确定;
f、级别高的复位越全面,级别越低,保留不被复位的部分越多;
g、高等级没有被复位的,低等级一定不会被复位。
2、MCU 复位树举例
a、第零等级:断电再上电,属于硬件复位,这个无需复位树参与,整个MCU芯片全部被复位;
b、第一等级:使用复位按键,属于硬件复位,整个MCU芯片除了部分模拟电路之外全部复位;
c、第二等级:软复位,属于软件复位,会使除了第一等级不被复位的和部分系统逻辑之外全部复位,程序重新开始运行;
d、第三等级:模块复位,属于软件复位,只不过这个操作只复位了要被复位的模块,其他模块没有任何影响。
第二部分 中断控制器
1、MCU 中断控制器
a、整理来自各个模块的外部中断,使之与NVIC的中断线匹配;
b、中断可以分为同步中断和异步中断
同步中断:中断所在的模块产生中断的时钟域和CPU是同一个时钟域。中断控制器需要将异步中断进行同步,同步至CPU时钟域下。
c、各个模块的中断信号直接连接中断控制器,不经过内部总线。
第三部分 系统控制器
a、配置时钟树上面的MUX和prescaler的值;
b、配置系统的状态例如正常运行模式和低功耗模式;
c、配置各个模块的时钟状态、复位状态;
d、可以增加一个Lock功能,防止程序运行中因为各种不可预知的原因导致系统某些关键配置被错误修改。
第八节 MCU模拟部分
第一部分 MCU 模拟部分
a、LDO低压差线性稳压器;
b、PLL锁相环;
c、内部时钟;
d、ADC模拟数字转换器。
第二部分 MCU 模拟部分的控制器
a、电源相关:内部LDO的使能信号、电源稳定信号;
b、PLL相关:PLL锁相环参数配置、PLL的LOCK信号;
c、内部时钟相关:内部时钟的开关状态;
d、ADC等相关模拟电路外设一般配置都在各自外设的寄存器里进行配置
第九节 MCU 内部架构图及其总结
1、ARM Cortex-M3 CPU主要用来执行用户程序。总线接口包括IBUS指令总线接口、DBUS数据总线接口、SBUS系统总线接。NVIC用于管理中断。DEBUG接口用于调试。核心按照取址、译码、执行三级流水线执行用户程序指令。
2、总线连接MCU内各个模块,用于MCU内部数据交换。高速模块连接AHB总线,低速模块连接APB总线。AHB总线和APB总线通过AHB2APB桥连接。
3、易失性存储器SRAM用于暂存用户数据、程序中间变量和堆栈。
4、非易失性存储器Flash用于存储用户程序和数据,也可执行用户程序。
5、外设分为高速外设和低速外设,常见的串口UART和GPIO都是低速外设。
6、中断控制器用于将来自于各个模块的外部中断同步至CPU的时钟域,排好顺序发送给CPU的NVIC接口,外部中断按照该顺序形成中断向量表。
7、时钟树将时钟进行不同的处理得到多种输出时钟,给各个需要使用的模块分配合理的时钟。
8、复位树负责管理不同等级的中新,复位树按照不同等级的复位对相关的模块进行复位操作。
9、系统控制器用于控制整个系统的状态,开启或者关闭指定的模块。
10、MCU的数字逻辑部分的设计
a、CPU:直接购买。
b、总线:自己设计或者直接购买。
c、存储器:现成的物理器件。
d、存储器控制器:存储器厂商的控制器包上一层自己的设计。
e、外设:简单的外设自己设计,复杂的外设直接购买。
f、系统控制器、中断控制器、时钟树、复位树:自己设计。
g、地址表:根据使用的模块情况自行安排地址分配。
版权归原作者 一个爱吃烤冷面的处女座工程师 所有, 如有侵权,请联系我们删除。