| 编辑推荐: |
本文主要介绍了MCU硬件架构相关内容。希望对您的学习有所帮助。
本文来自于微信公众号汽车电子工程知识体系,由火龙果软件Alice编辑、推荐。
|
|
微控制器(Microcontroller Unit, MCU)是将中央处理器(CPU)、存储器、定时器/计数器、多种I/O接口以及时钟系统集成在单一芯片上的微型计算机。无论是8位单片机(如九齐NY8系列)还是32位ARM
Cortex-M系列(如STM32L432xx),其系统框架图都遵循相似的层次结构:时钟系统提供节拍基准,CPU内核执行指令运算,存储器系统存放程序与数据,内部总线承担信息传输,外设模块则负责与外部世界交互。
如图1-1所示,一颗典型MCU的内部框图清晰地展示了CPU、存储器、总线控制单元、中断控制、定时器、I/O端口和串口等模块如何通过内部总线互联,形成一个完整的单片计算机系统。
图1-1 MCU典型系统架构框图。图中展示了CPU通过总线与片上ROM、RAM、定时器、I/O端口及串口等外设的连接关系,体现了MCU高集成度的设计特征。(图片来源:Hackatronic)
1.1 时钟系统
时钟系统是MCU的"心脏",为所有数字电路提供同步节拍。没有稳定的时钟源,CPU无法取指执行,总线无法传输数据,外设也无法按预期工作。
MCU的时钟源通常分为外部晶振和内部RC振荡器两大类。如图1-2所示,以STM32为代表的现代MCU时钟树结构极为复杂,包含HSE(外部高速晶振)、LSE(外部低速32.768
kHz晶振)、HSI(内部高速RC)、LSI(内部低速RC)等多个源,经过多路选择器和PLL锁相环后,分频输出SYSCLK系统主时钟,再进一步分频为AHB、APB1、APB2等总线时钟域。
图1-2 STM32时钟树框图。图中展示了从HSE、HSI、LSE、LSI等时钟源到SYSCLK,再到AHB、APB1、APB2总线时钟的完整分配路径,体现了现代MCU时钟管理的灵活性。(图片来源:ST
Community)
外部高速晶振(HSE)通过芯片的XIN/XOUT引脚接入,配合负载电容形成皮尔斯振荡电路。如图1-3所示,一个典型的8
MHz外部晶振电路包含晶振Y2、两个20 pF负载电容C14/C15以及可选的1 MΩ反馈电阻R6,这种结构精度高、稳定性好,适合对通信波特率或采样同步要求严格的场合。
图1-3 外部高速晶振(HSE)皮尔斯振荡电路。8 MHz晶振Y2配合20 pF负载电容和1 MΩ反馈电阻,构成MCU最常用的精密时钟源。(图片来源:tty.uchuujin.de)
内部高速RC振荡器(HSI)无需外部元件,上电即可工作,常用于系统初始化阶段或电池供电设备的低功耗模式。如图1-4所示,在STM32CubeMX时钟配置界面中,HSI
RC(16 MHz)与MSI RC(32 kHz~4 MHz可调)均可作为PLL的输入源,通过倍频/分频得到高达80
MHz的系统时钟。
图1-4 内部RC振荡器与PLL时钟选择示意图。HSI(16 MHz)和MSI(32 kHz~4
MHz)均可作为PLL输入,经倍频后输出系统主时钟,体现了内部时钟源的灵活性。(图片来源:Electronics
Stack Exchange)
PLL(锁相环)是现代MCU实现高频时钟的核心模块。如图1-5所示,PLL通过相位误差检测器比较输入时钟与反馈分频时钟的相位差,控制VCO(压控振荡器)输出频率,再经分频后得到稳定的高频时钟。这种闭环控制结构使得MCU可以用低成本低频晶振获得数百MHz的系统主频。
图1-5 PLL锁相环频率合成原理框图。输入时钟经相位检测器、环路滤波器控制VCO输出,反馈分频网络确保输出频率稳定锁定,是MCU高频时钟的核心技术。(图片来源:lcamtuf.substack.com)
如表1所示,主流MCU的时钟源可按速度等级与实现方式划分为四个类型。
表1:MCU常用时钟源对比
| 时钟源类型 |
典型频率 |
精度 |
功耗 |
主要应用场景 |
| HSE(外部高速晶振) |
8 MHz / 12 MHz / 16 MHz / 25 MHz |
高(±10~30 ppm) |
中等 |
主系统时钟,高精度定时、通信波特率生成 |
| LSE(外部低速晶振 |
32.768 kHz |
高(±20 ppm) |
低 |
RTC实时时钟、低功耗唤醒定时 |
| HSI(内部高速RC) |
8 MHz / 16 MHz / 64 MHz |
中等(±1%~3%) |
低 |
上电启动、低功耗运行、应急备用时钟 |
| LSI(内部低速RC) |
32 kHz / 40 kHz |
低(±5%~10%) |
极低 |
看门狗(IWDG)、低功耗时基 |
如表2所示,ARM Cortex-M系列MCU的典型时钟分配结构体现了"高速主干+低速分支"的设计思想。
表2:典型MCU时钟总线分配
| 总线/时钟域 |
来源 |
最高频率 |
挂载模块 |
特点 |
| SYSCLK(系统主时钟) |
HSE/HSI/PLL |
与MCU型号相关 |
作为根时钟分发 |
可通过PLL倍频获得更高频率 |
| AHB(Advanced High-performance Bus) |
SYSCLK分频 |
72 MHz / 168 MHz / 480 MHz |
CPU、DMA、Flash接口、SRAM |
高速总线,零等待访问 |
| APB1(Advanced Peripheral Bus 1) |
AHB分频 |
36 MHz / 84 MHz / 120 MHz |
定时器、USART、I2C、SPI、USB |
中低速外设域,部分定时器支持倍频 |
| APB2 |
AHB分频 |
72 MHz / 168 MHz / 240 MHz |
ADC、高级定时器、SDIO、SPI1 |
高速外设域,ADC时钟常需预分频 |
| 独立外设时钟 |
LSE/LSI/PLL |
32 kHz / 48 MHz |
RTC、独立看门狗、USB PHY |
可在主时钟关闭后继续运行 |
1.2 CPU内核
CPU内核是MCU的"大脑",负责取指令、译码、执行并写回结果。如图1-6所示,以ARM
Cortex-M3为例,内核不仅包含ARM core本身,还集成了NVIC中断控制器、ETM跟踪单元、DAP调试端口、存储保护单元、总线矩阵以及代码/Flash/SRAM接口,形成了一个高度集成的处理器子系统。
图1-6 ARM Cortex-M3内核架构框图。图中展示了ARM core、NVIC、ETM、DAP、Memory
Protection Unit、Bus Matrix以及Code/SRAM/Peripheral接口的完整连接关系。(图片来源:Watelectronics)
CPU内核由五大功能单元协同构成。如表3所示,这些单元共同完成程序的执行流程。
表3:CPU内核核心功能单元
| 功能单元 |
英文全称 |
位宽 |
核心作用 |
典型操作 |
| 算术逻辑单元 |
ALU(Arithmetic Logic Unit) |
8/16/32位 |
执行算术与逻辑运算 |
加减乘除、与或非异或、移位、比较 |
| 累加器 |
ACC(Accumulator) |
与ALU同宽 |
暂存运算结果与操作数 |
存放ALU输出、中间计算结果、数据传送缓冲 |
| 程序计数器 |
PC(Program Counter) |
16/32位 |
指向下一条待取指令的地址 |
顺序执行时自增,跳转时加载目标地址 |
| 堆栈指针 |
SP(Stack Pointer) |
16/32位 |
指向当前栈顶位置 |
函数调用时保存返回地址、中断时保存现场 |
| 状态寄存器/程序状态字 |
PSW/CPSR(Program Status Word) |
8/32位 |
记录运算结果特征与CPU模式 |
零标志Z、进位标志C、负标志N、中断使能位 |
程序计数器(PC)是CPU执行程序的"导航仪"。如图1-7所示,PC保存着下一条待执行指令的地址,每取指一次自动递增,指向下一个存储单元。当遇到跳转指令或中断发生时,PC会被加载新的目标地址,从而改变程序执行流。
图1-7 程序计数器PC顺序执行原理示意图。PC当前值为1001h时,CPU从地址1000h取指执行;随后PC自增,指向下一条指令1001h,实现程序的顺序执行。(图片来源:Renesas)
堆栈是程序运行时的"临时仓库",用于保存函数返回地址、局部变量和中断现场。如图1-8所示,当异常或中断发生时,CPU自动将xPSR、PC、LR、R12以及R3~R0等寄存器压入堆栈(Stacking);中断服务程序执行完毕后,再通过出栈操作(Unstacking)恢复现场,保证主程序无缝继续执行。
图1-8 中断堆栈压栈与出栈操作示意图。异常发生时,CPU将关键寄存器压入内存堆栈区;中断退出时,按相反顺序弹出恢复,确保程序上下文完整保存。(图片来源:Toshiba)
除上述核心单元外,CPU还包含一组特殊功能寄存器(SFR),用于配置CPU运行环境。如表4所示,SFR覆盖了中断控制、时钟配置、低功耗模式切换等系统级功能。
表4:常用特殊功能寄存器分类
| 寄存器类别 |
代表寄存器 |
功能描述 |
可读写性 |
| 中断控制 |
NVIC_ISER、NVIC_ICER、PRIMASK |
中断使能/禁止、优先级设置、全局中断屏蔽 |
可读可写 |
| 时钟与功耗 |
RCC_CR、RCC_CFGR、PWR_CR |
时钟源选择、PLL配置、低功耗模式进入 |
可读可写 |
| 调试与跟踪 |
DHCSR、DCRSR、DWT_CTRL |
调试 halt/单步、断点设置、性能计数 |
调试器专用 |
| 系统控制 |
SCR(Sleep Control Register)、CCR |
睡眠/深度睡眠模式选择、对齐与除零异常配置 |
可读可写 |
| 存储保护 |
MPU_RBAR、MPU_RASR |
存储器区域基地址与属性配置(仅部分型号支持) |
特权级可写 |
1.3 存储器系统
存储器系统是MCU的"记忆中枢",其设计需要在速度、容量、功耗和非易失性之间取得平衡。MCU的存储器架构普遍采用哈佛结构或改进型哈佛结构,即程序存储器与数据存储器在物理或逻辑上分离。
如图1-9所示,哈佛架构的核心特征是指令存储器与数据存储器拥有独立的地址总线和数据总线,CPU可同时取指令和读写数据,显著提升了吞吐率;而冯·诺依曼架构则共享同一组总线,结构简单但无法并行访问。现代Cortex-M
MCU虽然对外呈现统一地址空间,但内核内部仍保留了独立的I-Code总线(取指)和D-Code总线(访存),属于改进型哈佛结构。
图1-9 哈佛架构框图。指令总线与数据总线相互独立,CPU可同时访问程序存储器和数据存储器,这是MCU实现高效流水线执行的基础架构。(图片来源:GeeksforGeeks)
程序存储器用于存放固件代码、常量数据和中断向量表,其关键特性是断电后数据不丢失。如图1-10所示,NOR
Flash与NAND Flash是两种主流的Flash技术:NOR Flash采用并行结构,每个存储单元直接连接到位线,支持随机读取和按字节执行(XIP),适合存放程序代码;NAND
Flash采用串行结构,存储密度高、成本低,但需要按页读取,多用于大容量数据存储。
图1-10 NOR Flash与NAND Flash存储阵列结构对比。NOR Flash支持随机访问和片上执行(XIP),是MCU程序存储的主流选择;NAND
Flash则以高密度、低成本优势用于数据存储。(图片来源:Embedded.com)
如表5所示,MCU中使用的非易失性存储器技术经历了从掩膜ROM到Flash的演进。
表5:MCU非易失性程序存储器技术对比
| 储存器类别 |
写入方式 |
擦除方式 |
可重复擦写 |
在线编程 |
应用场景 |
| Mask ROM(掩膜ROM) |
工厂光刻掩膜 |
不可擦除 |
0次 |
不支持 |
大批量成熟产品,成本极低 |
| PROM(一次性可编程) |
用户专用编程器烧写 |
不可擦除 |
0次 |
不支持 |
早期原型验证,已淘汰 |
| EPROM |
编程器高压写入 |
UV紫外线照射(约20分钟) |
约100次 |
不支持 |
早期开发阶段,已淘汰 |
| EEPROM |
电信号逐字节写入 |
电信号逐字节擦除 |
10万~100万次 |
部分支持 |
存放校准参数、序列号等小数据 |
| Flash ROM(闪存) |
电信号页/扇区写入 |
电信号页/扇区擦除 |
1万~10万次 |
支持IAP/ICP |
当前绝对主流,存放主程序 |
数据存储器用于存放程序运行时的变量、堆栈和中间计算结果,主流是SRAM。如图1-11所示,SRAM的存储单元由六个晶体管(6T)构成双稳态触发器,只要持续供电,数据即可长期保持,无需刷新操作。这种结构访问速度快、接口简单,但占用芯片面积较大,因此MCU内部SRAM容量通常从几KB到几百KB不等。
图1-11 SRAM六晶体管(6T)存储单元电路图。交叉耦合的反相器构成双稳态电路,只要供电稳定即可保持数据,是MCU内部数据RAM的主流实现方式。(图片来源:TU
Wien)
如表6所示,SRAM与DRAM是两种主要的随机存取存储器技术,但在MCU领域,SRAM占据统治地位。
表6:SRAM与DRAM技术特性对比
| 特性 |
SRAM(静态随机存取存储器) |
DRAM(动态随机存取存储器) |
| 存储原理 |
6晶体管触发器稳态电路 |
1晶体管+1电容电荷存储 |
| 数据保持条件 |
持续供电即可,无需刷新 |
需定期刷新(每64ms内全部行刷新一次) |
| 访问速度 |
快(ns级) |
中等(需考虑预充电和刷新延迟) |
| 集成度/位成本 |
低(6T结构占用面积大) |
高(1T1C结构面积小) |
| 功耗特性 |
静态功耗存在(漏电流) |
动态功耗大(刷新操作+读写) |
| 在MCU中的应用 |
通用数据RAM、缓存(Cache)、TCM |
几乎不用于MCU内部,多见于外部扩展 |
| 适用场景 |
小容量、高速度、低延迟、简单控制 |
大容量、低成本、高带宽(如PC内存) |
如表7所示,以32位MCU为例,其4 GB地址空间被划分为多个区域,体现了"代码、数据、外设、内核"分离的哈佛思想。
表7:ARM Cortex-M典型存储器映射
| 地址范围 |
大小 |
区域名称 |
用途 |
| 0x0000_0000 ~ 0x1FFF_FFFF |
512 MB |
Code(代码区) |
Flash、ROM、SRAM(别名映射)、启动配置 |
| 0x2000_0000 ~ 0x3FFF_FFFF |
512 MB |
SRAM(数据区) |
内部SRAM、外部SRAM扩展 |
| 0x4000_0000 ~ 0x5FFF_FFFF |
512 MB |
Peripheral(外设区) |
所有外设寄存器映射 |
| 0x6000_0000 ~ 0x9FFF_FFFF |
1 GB |
External RAM |
外部存储器扩展(FSMC/FMC) |
| 0xA000_0000 ~ 0xDFFF_FFFF |
1 GB |
External Device |
外部设备扩展 |
| 0xE000_0000 ~ 0xEFFF_FFFF |
256 MB |
Private Peripheral Bus |
内核外设(NVIC、SysTick、MPU、调试组件) |
| 0xF000_0000 ~ 0xFFFF_FFFF |
256 MB |
Vendor Specific |
厂商自定义区域 |
1.4 内部总线结构
总线是MCU内部的信息高速公路,负责在CPU、存储器和外设之间传输地址、数据和控制信号。现代MCU普遍采用AMBA(Advanced
Microcontroller Bus Architecture)总线协议,尤其是ARM公司推出的AHB/APB分层总线架构。
任何计算机系统都包含三条功能总线。如表8所示,这三条总线各司其职,共同完成数据交换。
表8:MCU三大功能总线
| 总线名称 |
英文全称 |
传输方向 |
信号内容 |
位宽决定因素 |
典型信号示例 |
| 地址总线
|
Address Bus |
CPU → 存储器/外设 |
目标地址编码 |
可寻址空间大小 |
A[31:0](32位地址可寻址4 GB) |
| 数据总线 |
Data Bus |
双向 |
实际传输的数据 |
CPU位宽/存储器位宽 |
D[31:0](32位MCU) |
| 控制总线 |
Control Bus |
双向/多向 |
读写控制、中断、时钟、应答 |
系统复杂度 |
WR、RD、INT、CLK、READY、HTRANS |
地址总线的位宽决定了CPU的寻址能力,数据总线的位宽决定了一次总线事务能传输多少数据,控制总线则负责协调整个总线操作的时序与仲裁。
现代MCU采用多级总线矩阵以支持多主设备并发访问。如表9所示,ARM Cortex-M系列MCU的总线架构体现了"内核高速+外设分层"的设计理念。
表9:现代MCU多级总线架构
| 总线层级 |
协议 |
主设备 |
从设备 |
特点 |
| 内核总线(I-Code/D-Code) |
AHB-Lite |
Cortex-M内核 |
Flash接口、SRAM |
分离的指令总线与数据总线,支持同时取指和访存 |
| 系统总线 |
AHB-Lite |
内核、DMA |
SRAM、外设桥接器 |
通过总线矩阵实现多主仲裁 |
| 外设总线(低速) |
APB |
AHB-to-APB桥 |
UART、I2C、SPI、定时器 |
低功耗、简单接口,适合寄存器型外设 |
| 外设总线(高速) |
AHB |
DMA、USB OTG |
USB、SDIO、以太网MAC |
高带宽,支持突发传输和FIFO |
| 调试总线 |
APB |
DAP(调试访问端口) |
所有调试组件 |
独立于内核运行,支持在线调试 |
总线矩阵(Bus Matrix)允许多个主设备(如CPU和DMA)同时访问不同的从设备,只要不存在地址冲突。当冲突发生时,仲裁器按优先级调度访问顺序。这种架构显著提升了数据吞吐率,特别是在DMA进行背景数据搬运而CPU继续执行代码的场景下。
1.5 外设模块
外设模块是MCU与外部物理世界交互的"手脚"。通过配置外设寄存器,MCU可以感知按钮按下、驱动电机旋转、采集温度数据或与云端服务器通信。
1.5.1 I/O类外设
通用输入输出端口(GPIO)是MCU最基础也是最灵活的外设。如图1-13所示,以STM32为例,单个GPIO引脚内部结构极为复杂,包含模拟开关、TTL施密特触发器输入缓冲、可配置的上下拉电阻、推挽/开漏输出驱动、ESD保护二极管以及复用功能选择器,使其既能作为普通数字I/O,也能复用为UART、SPI、ADC等外设引脚。
图1-13 STM32 GPIO引脚内部结构框图。图中展示了输入路径上的模拟开关、施密特触发器、上下拉电阻,以及输出路径上的推挽/开漏驱动、ESD保护二极管和复用功能选择器。(图片来源:Aticleworld)
如表10所示,GPIO的配置选项决定了引脚可适应的多种场景。
表10:GPIO工作模式与配置
| 模式名称 |
方向 |
输出驱动 |
输入检测 |
典型应用 |
关键配置参数 |
| 推挽输出(Push-Pull) |
输出 |
强上拉/强下拉 |
无 |
LED驱动、电平控制、高速数字输出 |
输出速度(2/10/50 MHz)、驱动能力 |
| 开漏输出(Open-Drain) |
输出 |
仅下拉(需外部上拉) |
无 |
I2C总线、电平转换、线与逻辑 |
外部上拉电阻阻值 |
|
浮空输入(Floating Input) |
输入 |
无 |
高阻态检测 |
外部中断触发、按键检测(需外部上下拉) |
无 |
| 上拉输入(Pull-Up) |
输入 |
无 |
内部上拉到VDD |
按键检测(低电平有效)、默认高电平输入 |
上拉电阻阻值(通常30~50 kΩ) |
| 下拉输入(Pull-Down) |
输入 |
无 |
内部下拉到VSS |
按键检测(高电平有效)、默认低电平输入 |
下拉电阻阻值 |
| 模拟输入(Analog) |
输入 |
无 |
直接连至ADC |
传感器电压采集、电池电压监测 |
关闭数字输入缓冲以降低漏电流 |
| 复用功能(Alternate Function) |
双向 |
由外设控制 |
由外设控制 |
UART_TX/RX、SPI_MOSI/MISO、TIM_PWM |
AF编号映射、复用功能选择寄存器 |
1.5.2 定时计数类外设
定时器是MCU实现"时间基准"的核心外设。如图1-14所示,PWM(脉宽调制)通过定时器计数器与比较寄存器的匹配事件,控制输出引脚在高电平和低电平之间翻转,从而产生占空比可调的方波。改变比较匹配值即可调整占空比,配合低通滤波器还可实现简易DAC功能。
图1-14 PWM脉宽调制输出波形原理图。定时器计数器从0递增到周期值(Overflow),当计数值与比较匹配值(Match)相等时,输出电平翻转,形成占空比可调的方波。(图片来源:AllAboutCircuits)
CCP(Capture/Compare/PWM)模块是定时器的高级应用形态。如图1-15所示,在输入捕获模式下,外部引脚的边沿跳变触发定时器当前计数值被锁存到CCPR寄存器;通过两次捕获值的差值,结合定时器时钟频率,可精确计算外部脉冲的周期和占空比。此技术广泛应用于超声波测距、旋转编码器解码和红外遥控信号解码。
图1-15 CCP输入捕获模块框图。外部信号经预分频器和边沿检测器后,触发定时器计数值(TMR1H/TMR1L)锁存到捕获寄存器(CCPR1H/CCPR1L),实现脉冲宽度测量。(图片来源:DeepBlueEmbedded)
如表11所示,定时器类外设按功能复杂度分为基础型、通用型和高级型。
表11:定时器类外设分类与功能
| 外设类型 |
计数位宽 |
主要功能 |
特殊功能 |
典型应用 |
| 基本定时器(Basic Timer) |
16位 |
时基生成、定时中断 |
主从模式触发 |
系统滴答(SysTick)、简单延时 |
| 通用定时器(GPTIM) |
16/32位 |
定时、输入捕获、输出比较、PWM |
编码器接口、霍尔传感器接口、单脉冲模式 |
电机测速、舵机控制、超声波测距 |
| 高级定时器(ATIM) |
16位 |
三相PWM互补输出、死区插入、刹车 |
重复计数器、断路输入(Break)、锁定配置 |
BLDC电机驱动、PFC电源控制、逆变器 |
| 看门狗定时器(IWDG/WWDG) |
12位/7位 |
系统监控、超时复位 |
窗口模式、早期唤醒中断 |
程序跑飞保护、死循环检测 |
| 实时时钟(RTC) |
32位 |
日历计数、闹钟、唤醒 |
亚秒级精度、时间戳、篡改检测 |
日历时钟、低功耗定时唤醒、数据记录时间戳 |
1.5.3 模拟接口类外设
模拟接口架起了物理世界模拟信号与MCU数字世界之间的桥梁。如图1-16所示,SAR(逐次逼近型)ADC是MCU中最常见的模数转换器结构,包含采样保持电路(S/H)、比较器、逐次逼近寄存器(SAR)和内部DAC。转换时,SAR从最高位开始逐位确定数字码,内部DAC输出对应模拟电压与输入信号比较,经N次比较后得到N位数字输出。
图1-16 SAR型ADC逐次逼近转换原理框图。采样保持电路捕获输入电压后,SAR通过逐位二分搜索与内部DAC比较,最终输出二进制数字码。(图片来源:MicrocontrollersLab)
如表12所示,ADC和DAC是两类最基本的模拟接口外设。
表12:模拟接口外设特性
| 外设 |
转换方向 |
分辨率 |
采样率 |
关键参数 |
典型应用 |
| SAR ADC(逐次逼近型) |
模拟→数字 |
8/10/12/16位 |
1 MSPS以下 |
采样时间、参考电压、INL/DNL、信噪比 |
温度传感、电压监测、电流采样、音频采集 |
| Sigma-Delta ADC |
模拟→数字 |
16/24位 |
较低(kSPS级) |
过采样率、数字滤波器阶数、有效位数 |
高精度称重、音频处理、电能计量 |
| DAC(电压输出型) |
数字→模拟 |
8/12位 |
1 MSPS以下 |
建立时间、输出驱动能力、单调性 |
波形生成、偏置电压设置、音量控制 |
| 比较器(Comparator) |
模拟→数字(1位) |
1位 |
实时 |
响应时间、迟滞电压、功耗 |
过零检测、电池欠压保护、快速事件触发 |
DAC负责将数字信号还原为模拟电压或电流。如图1-17所示,MCU内部的DAC可输出锯齿波、三角波和正弦波等标准波形,在音频播放、电机控制偏置电压和自动测试设备中有广泛应用。
图1-17 DAC数模转换输出波形示例。通过定时器触发DMA向DAC数据寄存器写入不同数值,可产生锯齿波、三角波和正弦波等标准模拟波形。(图片来源:DeepBlueEmbedded)
1.5.4 通信接口类外设
通信接口决定了MCU与其他设备交换数据的方式和效率。如图1-18所示,UART(通用异步收发传输器)采用异步通信方式,数据帧以起始位(低电平)开头,随后是8位数据位、可选的校验位和停止位(高电平)。接收端通过检测起始位的下降沿同步,并在每位中心时刻采样,无需共享时钟线即可实现可靠通信。
图1-18 UART异步串行通信时序图。一帧数据包含起始位(Start)、8位数据位(D0~D7)、可选校验位(PB)和停止位(Stop),接收端在每位中心采样以确保可靠解码。(图片来源:Electric
Imp)
如图1-19所示,SPI(串行外设接口)是一种同步全双工通信协议。主设备通过SCLK提供时钟,数据在MOSI(主出从入)和MISO(主入从出)线上同时传输,片选信号nCS选中目标从设备。SPI协议简单、无起始位开销、支持高时钟频率,是驱动TFT屏幕、外部Flash和SD卡的理想选择。
图1-19 SPI同步串行通信时序图(CPOL=0, CPHA=0模式)。nCS拉低后,SCLK上升沿采样MOSI/MISO数据,8个时钟周期完成1字节传输,全双工同时收发。(图片来源:mbedded.ninja)
如图1-20所示,I2C(Inter-Integrated Circuit)仅用SDA(数据线)和SCL(时钟线)即可实现多设备互联。起始条件定义为SCL高电平时SDA下降沿,停止条件则为SCL高电平时SDA上升沿。这种独特的电平组合使得总线上的所有设备都能明确识别通信边界。
图1-20 I2C起始条件与停止条件时序图。起始条件(Start)为SCL高电平时SDA下降沿;停止条件(Stop)为SCL高电平时SDA上升沿,二者构成了I2C通信的帧边界。(图片来源:Analog
Devices)
如图1-22所示,在完整的数据传输过程中,主设备每发送8位数据后释放SDA线,从设备在第9个时钟周期将SDA拉低以发送应答位(ACK);若从设备无法接收,则保持SDA高电平(NACK),主设备据此判断通信状态。
图1-22 I2C完整数据帧与应答时序。每传输8位数据后,接收方在第9个时钟周期发送ACK(拉低SDA)或NACK(保持高电平),实现可靠的握手通信。(图片来源:vanhunteradams.com)
如表13所示,MCU常见的串行通信接口各有其协议特征和适用场景。
表13:MCU常用通信接口对比
| 接口 |
信号线 |
同步/异步 |
双工模式 |
拓扑结构 |
典型速率 |
关键特性 |
| USART/UART |
TX、RX(可选RTS/CTS) |
异步 |
全双工 |
点对点 |
115.2 kbps ~ 数Mbps |
波特率可配置、支持硬件流控、LIN总线兼容 |
| SPI |
MOSI、MISO、SCK、CS |
同步 |
全双工 |
一主多从(片选选择) |
数Mbps ~ 数十Mbps |
协议简单、无起始位开销、适合短距离高速传输 |
| I2C |
SDA、SCL |
同步 |
半双工 |
多主多从(地址寻址) |
100 kbps / 400 kbps / 3.4 Mbps |
仅需两根线、支持总线仲裁、设备地址可编程 |
| CAN |
CAN_H、CAN_L |
异步 |
半双工 |
多主总线 |
125 kbps ~ 1 Mbps |
差分信号抗干扰、硬件仲裁、错误自动重传 |
| USB |
D+、D-(USB2.0) |
同步 |
半双工 |
主从(一主多从) |
12 Mbps / 480 Mbps |
即插即用、协议栈复杂、需外部PHY或内置PHY |
| Ethernet |
TX±、RX±(MII/RMII) |
同步 |
全双工 |
星型(交换机)/总线 |
10/100 Mbps |
需外部PHY芯片、支持DMA描述符、协议栈庞大 |
1.6 复位电路
复位电路是MCU可靠运行的"保险栓",确保系统在任何异常状态下都能回到确定的初始状态重新开始执行。复位源可分为内部自动复位和外部强制复位两大类,覆盖了从电源上电、电压跌落到程序跑飞的全部风险场景。
如图1-23所示,上电复位(POR)与欠压复位(BOR)的触发条件截然不同。POR在电源电压从0V上升并越过阈值(通常为1.6V~2.0V)时释放复位信号,保证MCU在电源稳定后才启动;BOR则在系统运行中检测到电源电压跌落至阈值以下时立即触发复位,防止MCU在低压下出现指令执行错误或存储器误写入。
What is a Brown-Out Reset in a Microcontroller? -
Magellan Circuits-Top Quality PCB & PCBA Manufacturer
图1-23 上电复位(POR)与欠压复位(BOR)时序对比。POR发生在电源上升沿越过阈值时释放;BOR则在电源运行中跌落至阈值以下时触发,保护MCU免受低电压误操作。(图片来源:Magellan
Circuits)
如图1-24所示,典型的外部RC复位电路由电阻R1(1 kΩ)、R2(4 kΩ)、电容C1(4.7
µF)和按键SW1组成。上电瞬间,电容C1两端电压不能突变,NRST/MCLR引脚被拉低,随着电容充电,引脚电压按RC时间常数上升,当超过复位释放阈值时,MCU开始执行程序。并联的按键SW1提供手动强制复位功能,二极管D1在电源快速跌落时为电容提供快速放电通路,确保短时断电后再次上电仍能产生有效复位脉冲。
图1-24 典型MCU外部RC复位与手动按键复位电路。R1、R2与C1构成上电延时复位;SW1实现手动强制复位;D1为电源跌落时电容提供快速放电通路。(图片来源:Electronics
Stack Exchange)
如图1-25所示,更完善的复位电路还区分了冷复位(Cold Reset,完全断电后重新上电)和热复位(Warm
Reset,运行中强制重启)。冷复位通过RC网络实现上电延时;热复位通过按键或看门狗直接拉低复位引脚,无需等待电容充电过程,响应更快。两者结合可覆盖产品全生命周期的全部复位场景。
图1-25 冷复位与热复位组合电路。冷复位通过RC网络实现上电延时;热复位通过直接拉低复位引脚实现快速重启,两者结合覆盖全部复位场景。(图片来源:Electronics
Stack Exchange)
如表14所示,现代MCU的复位源覆盖了从电源监控到软件控制的完整谱系。
表14:MCU常见复位源分类与特性
| 复位源类型 |
触发条件 |
复位对象 |
延时特性 |
典型应用场景 |
| 上电复位(POR) |
电源电压从0V上升至阈值以上 |
全芯片 |
固定延时(由RC或内部电路决定) |
首次上电启动,确保电源稳定 |
| 欠压复位(BOR) |
电源电压跌落至阈值以下 |
全芯片 |
即时触发 |
电池供电设备电压跌落保护 |
| 外部手动复位 |
NRST引脚被外部拉低(通常<<0.8V) |
全芯片 |
取决于按键持续时间 |
开发调试、现场故障恢复 |
| 独立看门狗(IWDG) |
看门狗计数器溢出未及时喂狗 |
全芯片 |
固定超时周期 |
程序跑飞、死循环自动恢复 |
| 窗口看门狗(WWDG) |
喂狗时间不在允许窗口内 |
全芯片 |
可配置窗口期 |
时序严格场景的精确监控 |
| 软件复位 |
内核AIRCR寄存器SYSRESETREQ置位 |
全芯片(除调试域) |
即时触发 |
固件在线升级后重启 |
| 电源电压检测(PVD) |
电压越过可编程阈值(可高可低) |
可配置中断或复位 |
可配置 |
预警式电源管理 |
1.7 DEBUG调试电路
调试电路是MCU开发效率的"倍增器"。没有调试接口,开发者只能通过串口打印或LED闪烁来推测程序状态,效率极低。现代MCU在芯片内部集成了调试访问端口(DAP),通过外部2~5根信号线即可实现代码下载、在线调试、内存查看和实时跟踪。
如图1-26所示,以STM32为例,JTAG/SWD调试接口的原理图设计包含MCU侧的JTMS/SWDIO、JTCK/SWCLK、JTDO、JTDI、NRST等信号,通过标准连接器(如CN1)引出。为保护信号完整性,通常在数据线上串联22~100
Ω电阻抑制振铃,并配置ESD保护二极管防止热插拔损坏。
图1-26 STM32 JTAG/SWD调试接口原理图设计。MCU调试引脚通过标准连接器引出,数据线串联电阻抑制振铃,并配置ESD保护器件,确保调试信号完整性与接口安全。(图片来源:ST
Community)
JTAG(Joint Test Action Group)是传统的5线调试标准。如图1-27所示,JTAG支持菊花链(Daisy
Chain)连接方式,即多个MCU的TDI和TDO首尾串联,共享TMS和TCK信号,通过不同的指令选择目标设备。这种拓扑在复杂板级系统中可节省调试端口资源,是FPGA和SoC调试的常见做法。
图1-27 JTAG菊花链连接拓扑。多个设备共享TMS和TCK,TDI与TDO首尾串联,通过指令寄存器选择目标设备,实现单调试口访问多芯片。(图片来源:wiki-power.com)
然而,JTAG占用5个引脚(TMS、TCK、TDI、TDO、NRST),对于引脚资源紧张的MCU过于奢侈。ARM推出的SWD(Serial
Wire Debug)协议仅需2根信号线:SWDIO(双向数据)和SWCLK(时钟)。如图1-28所示,ST-Link调试器通过标准连接器与目标MCU连接,最小连接仅需SWDIO、SWCLK、GND和VCC四根线即可完成代码下载与单步调试,相比JTAG节省了3个GPIO。
图1-28 ST-Link与目标MCU的最小SWD连接示意图。SWDIO(PA13)和SWCLK(PA14)为必需信号,NRST提供硬件复位控制,VCC用于电平匹配,UART_TX/RX可选用于虚拟串口。(图片来源:Electronics
Stack Exchange)
如图1-29所示,STDC14连接器是ST官方推荐的调试接口标准,14个引脚不仅包含SWD/JTAG信号,还集成了UART虚拟串口(VCP_TX/VCP_RX)和电源检测(GNDDetect),实现"调试+串口+供电"三合一,大幅简化了开发板的接口设计。
图1-29 STDC14调试连接器引脚分配与连接实例。14脚连接器集成了SWD/JTAG调试信号、UART虚拟串口和电源检测,实现调试与通信的一体化接口。(图片来源:ST
Community)
如表15所示,JTAG与SWD是两种主流的调试接口标准,各有其适用场景。
表15:JTAG与SWD调试接口对比
| 特性 |
JTAG(IEEE 1149.1) |
SWD(ARM
Serial Wire Debug) |
| 信号线数量 |
5线(TMS/TCK/TDI/TDO/TRST,TRST可选) |
2线(SWDIO/SWCLK) |
| 物理引脚占用 |
多 |
极少(节省3个GPIO) |
| 拓扑支持 |
支持菊花链多设备 |
仅点对点 |
| 调试功能 |
完整(边界扫描、调试、编程) |
完整(调试、编程) |
| 跟踪功能 |
需额外TRACE信号 |
支持SWO单线跟踪输出 |
| 数据传输方式 |
串行移位(TDI→TDO) |
双向包传输(SWDIO) |
| 协议复杂度 |
高(状态机复杂) |
低(请求-响应包格式) |
| 典型应用 |
复杂SoC、FPGA、多芯片板级测试 |
ARM Cortex-M MCU主流方案 |
| 推荐连接器 |
20针JTAG、14针TI-JTAG |
10针Cortex Debug、14针STDC14 |
1.8 从芯片到PCB:晶振与封装的物理实现
MCU的硬件架构不仅体现在内部框图,也体现在物理封装和外围电路中。如图1-21所示,MCU常见封装包括LQFP(薄型四方扁平封装)、TQFP(更薄型)、QFN(方形扁平无引脚)和BGA(球栅阵列)等。引脚间距从1.27
mm(标准LQFP)到0.4 mm(高密度QFN)不等,封装选择直接影响PCB布局密度和焊接工艺。
图1-21 MCU常见封装形式实物图。左图为NXP LQFP封装,右图为焊接在PCB上的QFP44封装,展示了MCU从裸片到可用芯片的物理形态。(图片来源:立创商城)
时钟系统的物理实现同样关键。如图1-12所示,在PCB布局中,晶振及其负载电容必须尽可能靠近MCU的时钟引脚,走线短且对称,周围需铺设完整地平面以抑制电磁干扰。负载电容的接地过孔应独立且靠近,避免与其他高速信号线交叉,这是保证晶振起振稳定和频率精度的必要条件。
图1-12 PCB上晶振与负载电容布局实例。16 MHz晶振X1紧贴MCU放置,两侧负载电容C1/C2对称布局并就近接地,走线短而等长,确保振荡回路稳定可靠。(图片来源:Electronics
Stack Exchange)
1.9 总结:MCU硬件框架通用认知模型
通过对时钟系统、CPU内核、存储器、内部总线、外设模块、复位电路和DEBUG电路的梳理,可以提炼出一个理解任何MCU的通用认知模型:
1.先问时钟:系统主频是多少?时钟源选择外部晶振还是内部RC?哪些外设挂在哪条总线上、最高能跑多快?
2.再看存储:程序有多大?Flash容量是否足够?RAM能否容纳堆栈和全局变量?启动模式从Flash还是System
Memory启动?
3.接着理解总线:是否存在DMA?总线矩阵支持哪些并发访问?外设寄存器映射到哪个地址段?
4.然后掌握外设:需要哪些GPIO?定时器资源是否满足PWM和捕获需求?通信接口的速率和拓扑是否匹配系统架构?
5.最后确认可靠性:复位电路是否覆盖POR/BOR/手动/看门狗全部场景?DEBUG接口是SWD还是JTAG?是否预留了虚拟串口?
无论是九齐的8位NY8系列还是ST的32位STM32L4系列,上述框架均适用。掌握这一通用模型后,面对新的MCU平台,只需查阅其数据手册(Datasheet)和参考手册(Reference
Manual)中对应章节的参数差异,即可快速上手开发。 |