【STM32实践篇】:最小系统组成
文章目录
- 什么是最小系统?
- 1. 供电方案
- 2. NRST 引脚
- 3. 外部时钟源
- 4. 调试电路
- 5. BOOT
什么是最小系统?
-
一个微处理器是无法独立运行的,需配备供电、时钟信号、复位信号;若其内部无程序存储器,还需外接存储器,才能构成完整工作系统。
-
单片机最小系统,指的是用最少器件组成的、可使单片机正常工作的系统。具体到STM32单片机,它同样不能仅靠芯片本身工作,必须搭配相应外围电路,这些能让STM32正常工作的最简单基础电路,就统称为STM32最小系统。
1. 供电方案
-
数字电源 VDD,电压范围:1.8~3.6 V,给芯片的 I/O引脚 和 内部稳压器(如果启用的话)供电;通过芯片的 VDD 引脚,从外部直接接入电源。
- 以 STM32F103ZET6 为例,芯片的 11 组 VDD 电源引脚(VDD_1 - VDD_11)全部并联连接至 VDD_MCU 电源节点,而 11 组 VSS 地引脚(VSS_1 - VSS_11)则全部并联后统一接地 GND:
- 输入电源为 V_3V3(3.3V),通过磁珠FB1隔离高频噪声,采用10μF电容储能并抑制电压波动,11颗并联的0.1μF陶瓷电容滤除高频噪声,最终为 VDD_MCU 提供稳定且低噪声的3.3V供电:
- 系统电源 V_Sys(5V)经0Ω电阻和并联的100μF电解电容储能、0.1μF陶瓷电容高频滤波后输入AMS1117,由AMS1117稳压输出3.3V,再经 100μF电解电容抑制负载波动和0.1μF陶瓷电容滤除高频噪声,最终生成低噪声的 V_3V3,并通过 LED 指示电源状态:
- 以 STM32F103ZET6 为例,芯片的 11 组 VDD 电源引脚(VDD_1 - VDD_11)全部并联连接至 VDD_MCU 电源节点,而 11 组 VSS 地引脚(VSS_1 - VSS_11)则全部并联后统一接地 GND:
-
模拟电源 VDDA VSSA,电压范围:1.8~3.6 V,给芯片内部的 模拟外设 供电,比如:ADC,DAC, 复位模块,RC电路,PLL锁相环;VDDA 必须连到 VDD,VSSA 必须连到 VSS,因为模拟电路和数字电路要共地,否则会有干扰,导致ADC/DAC等模拟功能不准。
- 芯片的 VDDA 引脚连接至 VDDA_MCU 电源节点,而 VSSA 引脚接地 GND:
- 输入电源为 V_3V3(3.3V),通过磁珠FB2隔离高频噪声,采用10μF电容储能并抑制电压波动,1μF电容抑制中频纹波,10nF电容滤除高频噪声,最终为 VDDA_MCU 提供3.3V供电:
- 芯片的 VDDA 引脚连接至 VDDA_MCU 电源节点,而 VSSA 引脚接地 GND:
-
备用电源 VBAT,电压范围:1.65~3.6 V,当主电源 VDD 断电时,作为备用电源给这些关键模块供电:RTC实时时钟,32 kHz外部时钟振荡器,备份寄存器; 通过芯片内部的电源开关自动切换,VDD 有电时不用它,断电后自动启用。
- 芯片的 VBAT 引脚连接至 VBAT 电源节点:
- 当 VDD_MCU (3.3V) 存在时,电流经 BAT54-C 肖特基二极管内部A通道向RTC供电,同时反向阻断电池电流;当 VDD_MCU 断开,CR2032 电池经 BAT54-C 内部B通道为RTC供电:
- 芯片的 VBAT 引脚连接至 VBAT 电源节点:
2. NRST 引脚
- NRST是STM32的主动低电平复位引脚,这意味着:NRST引脚为高电平 — 正常工作状态;当NRST引脚被拉为低电平时,MCU内核和外设会被强制复位。一旦NRST恢复到高电平并满足稳定条件,MCU开始运行程序。
-
电气特性:
- VIL:当NRST引脚上的电压低于或等于这个最大值 0.8V 时,芯片会将其识别为有效的低电平。
- VIH:当NRST引脚上的电压高于或等于这个最小值 2V 时,芯片会将其识别为有效的高电平。
- Vhys:NRST内部包含施密特触发器输入电路,具有约 200mV 的迟滞窗口。
- Rpu:内部永久上拉电阻的阻值范围。通常典型值为 40kΩ,可能在 30kΩ 到 50kΩ 之间。当外部器件需要拉低NRST时,它必须能克服这个上拉电阻将电压拉至有效低电平(<=0.8V)。例如,当 VDD=3.3V, Rpu=40kΩ 时,下拉器件需要能吸入最大约 (3.3V - 0V)/30kΩ ≈ 110uA(以最坏的 Rpu Min=30kΩ计算)的电流。
- VF:NRST引脚内部带有滤波器,会被过滤掉的低脉冲宽度最大值是 100ns。
- VNF:在 VDD > 2.7V 条件下,一个宽度大于等于300ns的低脉冲一定不会被内部滤波器忽略,将被视为有效复位信号。
- TNRST_OUT:当MCU因为内部原因需要复位时,它会通过NRST引脚向外部电路输出一个至少持续20us的低脉冲。
-
推荐的NRST引脚保护电路:
外部复位源: 可以是一个简单的按键+电阻,当按键按下时,NRST通过按键被拉向GND,电压≈0V,低于0.8V,可靠复位。 -
参考设计:
- 当SW1按键按下时,NRST直接接地被拉为低电平,触发MCU复位;释放按键后,VDD_MCU通过R43上拉使NRST恢复高电平,MCU退出复位状态。
3. 外部时钟源
-
用晶体 + 外部元件(电容、电阻)搭建稳定的高速外部时钟:
- 8MHz 无源晶体 + 2个负载电容 + 电阻使得晶体精确工作在 8MHz;OSC_IN 和 OSC_OUT作为时钟输入和输出引脚与无源晶体跨接,形成反馈回路(内部振荡信号从 OSC_OUT 输出,经晶体后回到 OSC_IN),内部集成反馈电阻RF给内部振荡电路提供直流偏置,让放大器工作在合适区间,确保振荡能启动并持续;芯片内部振荡模块从 fHSE 输出8MHz 时钟:
- 参考电路:
- 8MHz 无源晶体 + 2个负载电容 + 电阻使得晶体精确工作在 8MHz;OSC_IN 和 OSC_OUT作为时钟输入和输出引脚与无源晶体跨接,形成反馈回路(内部振荡信号从 OSC_OUT 输出,经晶体后回到 OSC_IN),内部集成反馈电阻RF给内部振荡电路提供直流偏置,让放大器工作在合适区间,确保振荡能启动并持续;芯片内部振荡模块从 fHSE 输出8MHz 时钟:
-
使用 32.768kHz 无源晶体搭建低速外部时钟:
- 为什么用 32.768kHz 晶体做 LSE:分频 15 次后可精准得到 1Hz 信号(32768 ÷ 2¹⁵ = 1Hz),完美匹配 RTC秒计数需求,是行业标准RTC晶体频率。
- 参考电路:
4. 调试电路
- 调试接口并非系统运行的必需接口电路,但为便于系统开发、调试及升级等操作,在设计最小系统时可加入这部分电路。STM32系列微处理器内置JTAG与SWD两个接口,借助这两个接口,能够控制芯片运行并获取内部寄存器信息。这两个接口均需使用GPIO(普通I/O口)为调试仿真器提供支持,只需选用其中一个接口,就能将PC上编译完成的程序下载到单片机中进行运行调试。
-
JTAG
JTAG是一种与IEEE 1149.1标准兼容的国际测试协议,主要应用于芯片的内部测试。如今多数高端器件都支持这一协议,像DSP、FPGA等器件均在此列。标准的JTAG调试接口包含4根线,分别是模式选择线(TMS)、时钟线(TCK)、数据输入线(TDI)和数据输出线(TDO)。参考电路:
-
SWD
在高速场景或数据量较大时,通过JTAG下载程序容易失败,而SWD下载的失败概率更低,可靠性更强。若仿真器支持,通常在采用JTAG模式时,可直接切换为SWD模式。SWD模式所需引脚更少,因此占用的PCB空间更小。当芯片体积受限的情况下,推荐采用SWD模式,此时可选用间距2.54mm的小型5芯端子作为仿真接口。SWD模式的连接只需2根线:SWDIO作为双向数据口,负责主机与目标设备间的数据传输;SWDCLK作为时钟口,由主机提供驱动信号。
参考电路:
- STM32系列处理器支持两种调试模式,其中JTAG模式会占用较多PCB面积,而SWD模式的占用量则小很多。并且在调试速度等性能上,SWD也不逊色于JTAG模式,因此建议在实际应用中优先采用SWD模式进行设计。SWD并非标准端口,可根据实际需求灵活排列引脚。
5. BOOT
-
在STM32单片机里,程序计数器寄存器的默认值,决定了处理器会从哪个具体地址去获取第一条要执行的指令。不过,处理器启动的时候,对于自身所连接的存储设备——不管是闪存、内存还是硬盘,其实是“一无所知”的。这就需要通过硬件设计,来告诉它存储第一条指令的外设究竟是哪一个。所以,STM32系列处理器第一条执行指令的地址,是由硬件设计来确定的。
-
通过BOOT[1:0]引脚选择3种不同的启动模式
- 主 Flash
- 芯片上电后,若检测到BOOT0引脚为低电平,0x00000000与0x00000004这两个地址会映射至内部FLASH的起始地址0x08000000和0x08000004。此时,内核退出复位状态后,会先读取内部FLASH中0x08000000地址存储的内容,将其写入栈指针MSP作为栈顶地址;再读取0x08000004地址存储的内容,赋给程序指针PC,作为第一条要执行的指令所在地址。完成这两步操作后,内核就能从PC指向的地址开始读取并执行指令了。
- 系统存储器
- 当芯片上电后,若采样到BOOT0=1且BOOT1=0的引脚状态组合,内核会从系统存储器的0x1FFFF000与0x1FFFF004地址处读取MSP和PC的值,完成自举过程。系统存储器是一块用户无法访问的特殊空间,ST公司在芯片出厂前,已在其中固化了一段代码。因此,采用系统存储器启动方式时,内核会执行这段固化代码;代码运行时,能够为ISP(在线编程)提供支持。在STM32F4系列芯片上,其典型功能是检测USART1传输的信息,并根据这些信息更新内部FLASH的内容,以此实现产品应用程序的升级——所以,这种启动方式也被称为ISP启动方式。
- SRAM
- 与内部Flash的情况类似,当芯片上电后检测到BOOT0与BOOT1引脚均为高电平时,0x00000000与0x00000004地址会映射至内部SRAM的起始地址0x20000000和0x20000004,内核会从SRAM空间读取内容完成自举。实际应用中,0x00000000与0x00000004地址存储的内容由启动文件startup_stm32f407xx.s决定;而在链接阶段,这些内容的绝对地址(即分配到内部Flash还是内部SRAM)则由分散加载文件(sct)决定。
- 主 Flash
-
参考电路: