STM32主控最小电路绘制

ALT+TAB可以快速切换页面方便对板

如果你对下面描述的部分有异或,比如不确定RTC是什么?BOOT引脚对烧录的方式有什么影响?都可以在《参考资料》中ctrl+F快速搜索,免得你去百度了~

电源模块

首先画电源模块,找到主控的VSS VDD以及VBAT,接入GND和3V3,这个VBAT是给备用区供电的,备用区用于掉电后仍然运行的程序,比如外部RTC(Real-Time-Clock)电路,用于解决时间戳不一致的问题(没有 RTC 的设备,每次上电时间都会回到 1970-01-01(Unix 时间起点),导致日志乱序、定时任务失效、摄像头时间戳错误等问题 。)。

然后在电源上加一个小的滤波电容,因为DCDC输出的3V3并不稳定,有可能导致掉电重启,因此需要小电容来储能,在掉电的时候为其补充到3V3。

这几颗电容和stm32主控是并联的关系,找到他们共同的网络标签就知道了

复位电路模块

复位电路有个按钮,按下后就会重启单片机,进入某个内存块中开始执行程序,但是具体会从哪个内存块读取,取决于BOOT引脚。具体来说有三种配置方式,我们默认BOOT0 = 0 → 从 主 Flash 启动,其他方式参考《参考资料》。

接收这个复位信号的引脚是NRST,N代表低电平有效,RST是reset的简写。

因此,按下按钮应该使其切换一瞬间低电平,一般运行时应处于高电平,因此需要加一个上拉电阻。

按下SW1后3V3与GND联通,NRST处的电压和R1下端电压,也就是GND电压一致,为LOW。

弹起后NRST处电压和C5下端电压一致,为3V3,为HIGH。

BOOT烧录电路模块

烧录模式的切换通过引脚帽开关实现。

通过切换两个引脚帽的位置(红黄、蓝灰),有四种烧录方式。

我们只需要从主Flash开始读取程序,因此只需要BOOT=0的烧录方式,也就是把BOOT0置低电平。这样即可:

烧录的时候需要SWCLK SWDIO两个引脚,因此去手册找这两个引脚对应的芯片内引脚

是PA13 PA14

这两个引脚要和烧录器连接,可以直接使用排针,也可以使用简牛插口,就是这个东西:

在烧录器和这块板子上都会有这种接口,这样就不需要每次自己对应着插排针了。

首先查看烧录器端的引脚定义。注意,我们看的是背面,因此正面来看右侧是1号引脚,顺序如上图。

DIO CLK支持SWD烧录,RXTX支持UART ISP烧录方式(虽然在这个项目只需要SWD,如果要UART ISP烧录,则需要将BOOT0置为高电平)

我们采用5V供电,因此3V3可以叉掉。

虽然虽然在这个项目只需要SWD,但我们保留USART ISP接口。

外部晶振电路模块

内部晶振会受到温度影响,因此不准,需要加外部晶振。

32k晶振是低速晶振,我们需要的是一个能替代内晶振的晶振,要用8MHz

这是高速晶振的电路图:

这是低俗晶振的电路图:

都是固定的,记住就好,注意这个电容,选型号的时候会告诉你,比如这款3225,就要用12pF的电容。

然后我们看主控上的引脚:

可以看到两组引脚,分别对应外部高低速晶振:

引脚名称 全称 对应时钟源 典型频率 主要用途
OSC_IN / OSC_OUT 外部高速振荡器输入/输出 HSE(High-Speed External) 4~26 MHz(常见 8MHz) 提供系统主时钟,经 PLL 倍频后驱动 CPU、总线、外设
OSC32_IN / OSC32_OUT 外部低速振荡器输入/输出 LSE(Low-Speed External) 32.768 kHz 驱动 RTC(实时时钟)低功耗模式下的唤醒定时器

如果不知道用那个型号,可以在实力电路找到对应元件,右键,找查看产品链接即可。

为什么晶振要接电容到地?

根本原因 :晶振是一个被动谐振元件 ,必须依靠外部电容构成完整的 LC 谐振回路,才能:

  1. 满足振荡起振条件(相位 + 增益)
  2. 匹配负载电容,确保频率精准
  3. 抑制噪声和 EMI,提高稳定性
  4. 提供可靠的直流偏置参考

整体

以上就是如何绘制stm32的最小电路的流程。

参考资料

Cortex-M 是什么?

它不是某个具体的品牌或产品,而是 ARM 公司设计的一种"CPU 蓝图"

就像发动机的设计图一样,ARM 把这个"低功耗、反应快、省电又便宜"的 CPU 设计好,然后授权给 ST(意法半导体)、NXP、兆易创新等公司,让他们做成各种微控制器(MCU)卖出去。

Cortex-M 有什么用?

让小设备变聪明,而且不费电、不贵、反应快。

DSP(数字信号处理器)

是一种专门用来"快速处理声音、图像、传感器信号等实时数据"的专用芯片。

假设你戴着一副 主动降噪耳机,外面很吵(比如地铁轰隆声),但你听到的却是安静的音乐。

这个神奇效果是怎么来的?

→ 耳机里的麦克风先"听"到噪音,

→ 然后 DSP 芯片立刻计算出一个"反向声波"

→ 再把反向声波和原音乐混合,

→ 噪音就被抵消了!

整个过程必须在 几毫秒内完成 ,否则你就听出延迟了。

这种"高速+大量数学运算"的任务,普通 CPU 或单片机搞不定,但 DSP 就是干这个的


🔧 DSP 的核心特点(简单说):

  1. 专精数学运算

    特别擅长做 乘法 + 加法 (比如 a×b + c),这是处理声音、图像的基础操作。

    普通芯片要好几个步骤,DSP 一个时钟周期就搞定

  2. 哈佛架构

    程序和数据分开存、分开读,就像两条高速公路并行,不堵车,速度更快。

  3. 流水线工作

    像工厂流水线:取指令、解码、运算同时进行,效率翻倍。

  4. 有专用指令

    比如"快速傅里叶变换(FFT)"------把声音从"时间域"转成"频率域"(比如识别你是男声还是女声),DSP 一条指令就能加速完成。

  5. 实时性强

    数据来了马上处理,绝不拖延,适合雷达、电机控制、语音通话等对时间敏感的场景。

为什么很多音频处理要通过FFT转换到频率域处理?

在"时间域"里,声音是一团乱麻;而在"频率域"里,它被拆成了清晰的"音高成分",处理起来就像调音台一样简单直接。

什么是RTC 为什么实现RTC还需要添加外部低速晶振而不是高速晶振

RTC = Real-Time Clock(实时时钟)

你可以把它理解成设备里的 "电子表" ------即使主芯片断电、关机,它依然能靠一颗小纽扣电池(比如 CR2032)继续走时,记住当前的 年、月、日、时、分、秒、星期

📌 没有 RTC 的设备,每次上电时间都会回到 1970-01-01(Unix 时间起点),导致日志乱序、定时任务失效、摄像头时间戳错误等问题 。


✅ 二、为什么 RTC 需要晶振?而且必须是 低速 的(32.768 kHz)?

🔧 核心原因:为了精准地"每秒走一步"

RTC 的本质是一个计数器:它靠一个稳定的时钟信号不断计数,数到一定值就认为"过了一秒"。

32.768 kHz 这个数字不是随便选的 ------它等于 2¹⁵(32768)

这意味着:

  • 晶振每秒振动 32768 次
  • 只需一个 15 级二分频电路(就是连续除以 2,15 次)
  • 就能得到 1 Hz 的精确秒脉冲(32768 ÷ 2¹⁵ = 1)

优势

  • 电路简单(只需计数器,无需复杂 PLL)
  • 功耗极低(微安级,适合电池供电)
  • 成本低、稳定性好'

备份域

问题 答案
什么是备份域? MCU 中由 VBAT 供电的"保险柜",用于在掉电/复位时保存 RTC 时间和关键数据。
为什么不直接用 1Hz 晶振? 物理上不可行 (太大太贵)、抗干扰差无法支持高精度时间,而 32.768kHz 是经过验证的最优解。

BOOT引脚的选择对烧录方式有什么影响

一、核心机制:BOOT 引脚决定"启动入口"

STM32 为例(其他如 ESP32、NXP i.MX 类似):

  • BOOT0 = 0 → 从 主 Flash 启动(运行用户程序)✅ 正常工作模式
  • BOOT0 = 1, BOOT1 = 0 → 从 系统存储器(System Memory) 启动 → 运行 ST 出厂预置的 Bootloader串口/USB 烧录模式
  • BOOT0 = 1, BOOT1 = 1 → 从 SRAM 启动(调试用)

🔑 关键点:只有进入 Bootloader 模式,才能通过 UART、USB 等接口接收新固件

二、对不同烧录方式的影响

1️⃣ SWD/JTAG 烧录(如 ST-Link、J-Link)→ ❌ 不受 BOOT 引脚影响

  • 原理 :调试器通过 SWD 接口直接访问芯片内核和 Flash 控制器,绕过 CPU 启动流程。
  • 即使 BOOT0=0(从 Flash 启动),只要芯片未被写保护,ST-Link 仍可擦除/烧录。
  • 无需切换 BOOT 引脚,开发最方便。

📌 结论:使用 ST-Link/DAP-Link 烧录时,BOOT 引脚保持默认(BOOT0=0)即可


2️⃣ UART/USB 串口烧录(Bootloader 模式)→ ✅ 必须正确设置 BOOT 引脚

  • 前提 :芯片必须从系统存储器启动,才能运行内置 Bootloader。
  • 操作要求
    • 烧录前:BOOT0 = 1, BOOT1 = 0
    • 按复位(或上电),使芯片采样到该状态
    • 通过串口发送固件(如使用 STM32CubeProgrammer)
    • 烧录完成后:必须将 BOOT0 改回 0,否则下次上电仍进 Bootloader,不运行用户程序!

⚠️ 常见错误:烧完忘记改 BOOT0,设备"变砖"(其实只是没跑用户代码)。


  • DAP-Link 内部模拟 U 盘,实际仍是通过 SWD 协议烧录
  • 和 ST-Link 一样,直接操作 Flash,不经过 CPU 启动流程
  • BOOT 引脚状态无关紧要

4️⃣ OTA / 应用层更新 → ❌ 完全不需要动 BOOT 引脚

  • 用户程序自己实现升级逻辑(如接收新固件写入 Flash 某区域)。
  • 启动时由用户代码跳转,BOOT 引脚始终为 0
  • BOOT 引脚只在出厂首次烧录或救砖时才需要干预。

1️⃣ 主 Flash(Main Flash / User Flash)------ 你的"程序仓库"

  • 是什么 :芯片内置的 非易失性存储器(断电不丢数据),容量从几 KB 到几 MB 不等。
  • 存什么 :你写的 用户程序(.bin/.hex 文件)、常量数据、配置参数等。
  • 特点
    • 只能按 页(Page)擦除(比如 2KB 一页),写入前必须先擦。
    • 写入速度慢,但读取快。
    • 掉电后内容永久保存(可擦写约 10 万次)。
  • 类比 :就像电脑的 硬盘 ------ 存放操作系统和软件。

正常运行时,CPU 就是从这里加载并执行你的代码。


2️⃣ 系统存储器(System Memory)------ 出厂预装的"救火队长"

  • 是什么 :芯片厂商(如 ST)在生产时固化在芯片内部的一段特殊 ROM 区域(通常 16--32KB)。
  • 存什么官方 Bootloader 程序(不可修改!)。
  • 作用 :当你的主 Flash 程序损坏、或首次烧录时,可通过它 从串口(UART)、USB 等接口接收新固件
  • 如何进入 :设置 BOOT0=1, BOOT1=0,上电复位 → 芯片从 System Memory 启动。
  • 类比 :就像手机的 Recovery 模式 或 电脑 BIOS 的 PXE 网络启动 ------ 用于"救砖"或无调试器烧录。

⚠️ 注意:它不是 RAM,也不是普通 Flash,而是 掩膜 ROM(Mask ROM),出厂就写死,无法更改。


3️⃣ Bootloader ------ "启动脚本"(可以是多个角色)

这个词有两层含义,容易混淆:

🔹 A. 系统级 Bootloader(即 System Memory 里的那个)

  • 厂商提供,固定功能:接收 UART/USB 数据 → 写入主 Flash。
  • 用户不能改,只能"用"。

🔹 B. 用户自定义 Bootloader(放在主 Flash 开头)

  • 你自己写的程序,放在主 Flash 起始位置。
  • 功能更强大:比如支持 OTA 升级、加密校验、多应用切换等。
  • 启动流程:
    上电 → 主 Flash 的 Bootloader 运行 → 检查是否要升级 → 跳转到 App 区执行

✅ 很多智能设备(如路由器、IoT 终端)都采用这种"双区设计"。

📌 关键区别

  • System Memory 里的 Bootloader = 厂商给的"急救包"
  • 主 Flash 里的 Bootloader = 你自己写的"智能管家"

4️⃣ SRAM(Static RAM)------ CPU 的"工作台"

  • 是什么 :芯片内部的 高速易失性内存(断电清零)。
  • 存什么
    • 程序运行时的 变量、堆栈、函数调用记录
    • 中断服务程序(ISR)的临时数据
    • DMA 缓冲区(如串口接收缓存)
  • 特点
    • 读写速度极快(纳秒级),与 CPU 同频
    • 容量小(几 KB 到几 MB)
    • 掉电即丢失(所以不能存程序)
  • 类比 :就像你办公桌上的 桌面 ------ 所有正在处理的文件都放这儿,关灯(断电)就收走了。

所有计算、逻辑判断、实时控制,都是在 SRAM 上完成的!


🔄 它们如何协作?------ 一个完整启动流程

  1. 上电 → 芯片采样 BOOT 引脚

  2. 情况 A:BOOT0=0

    → 从 主 Flash 启动

    → CPU 直接执行你的程序

    → 程序中的变量自动分配到 SRAM

    → 正常工作 ✅

  3. 情况 B:BOOT0=1, BOOT1=0

    → 从 系统存储器 启动

    → 运行 ST 官方 Bootloader

    → 等待 PC 通过串口发送新固件

    → 收到后写入 主 Flash

    → 烧录完成,需手动改回 BOOT0=0 才能运行新程序

  4. (高级)用户 Bootloader 模式

    → 主 Flash 开头放自研 Bootloader

    → 它先运行,检查是否有新固件(比如从 SD 卡或网络下载)

    → 有则擦写 App 区,无则跳转到 App

    → 实现"无缝升级"

一、"APP区"是什么?

📌 简单说:

"APP区"就是主 Flash 中专门存放你写的"应用程序"的那一块内存区域。

它通常和 Bootloader 区 配对出现,构成一种常见的 双区固件架构


🔧 为什么要有 APP 区?

想象你的智能手环需要升级固件:

  • 如果直接覆盖整个 Flash,升级中途断电 → 设备变砖!
  • 所以工程师把 Flash 分成两部分:

表格

区域 地址范围(示例) 内容 特点
Bootloader 区 0x08000000 ~ 0x08007FFF 启动管理程序 小、稳定、不常更新
APP 区 0x08008000 ~ 0x0807FFFF 用户应用程序 大、经常 OTA 升级

🔄 工作流程:

  1. 上电 → CPU 先运行 Bootloader
  2. Bootloader 检查:
    • 是否有新固件?
    • APP 是否有效?(校验 CRC/签名)
  3. 如果一切正常 → 跳转到 APP 区地址,开始执行你的 main() 函数
  4. 如果需要升级 → 从网络/SD卡接收新固件 → 写入 APP 区 → 重启

💡 这样即使 APP 升级失败,Bootloader 还在,可以重新下载,永不掉砖

二、为什么 STM32 开发板除了 4 针 SWD 烧录口,还有一个 USB 的"T字口"?

你看到的这个 USB Type-C 或 Micro-USB 接口(常标为 "USB USER" 或 "USB OTG") ,和烧录口是完全不同的功能

🔌 它主要有三大用途:


1️⃣ 给开发板供电(Power Supply)

  • 最基础的作用:插上 USB 线,5V 电源进来 → 板载 LDO 转成 3.3V → 给 STM32 供电。
  • 不需要额外电源适配器,方便调试。

⚠️ 注意:这个 USB 不用于烧录(除非特殊设计),只是供电!


2️⃣ STM32 的 USB 功能测试(Device / Host / OTG)

  • 模拟 U 盘、键盘、鼠标(USB Device)
  • 读取 U 盘(USB Host)
  • 实现手机与开发板互传数据(OTG)

✅ 举例:

📌 这个 USB 是 STM32 自己的功能引出,和烧录无关!


3️⃣ 某些开发板支持 USB DFU 烧录(但需配合 BOOT 引脚)

一、整体框架:STM32 的 4GB 地址空间(Cortex-M 架构)

STM32 基于 ARM Cortex-M 内核,是 32 位处理器,理论寻址空间为:

0x0000_0000 ~ 0xFFFF_FFFF(共 4GB)

但实际硬件资源远小于 4GB,ARM 预先将这 4GB 划分为 8 个 512MB 的 Block,STM32 在此基础上填充真实硬件:

表格

地址范围 名称 主要内容
0x0000_0000 -- 0x1FFF_FFFF 代码区(Code) Flash、System Memory、ITCM RAM(H7)
0x2000_0000 -- 0x3FFF_FFFF SRAM 区 主 SRAM、DTCM RAM、备份 SRAM
0x4000_0000 -- 0x5FFF_FFFF 外设寄存器区 GPIO、UART、TIM、ADC 等控制寄存器
0x6000_0000 -- 0x9FFF_FFFF 外部存储器区 FMC/FSMC 控制的 PSRAM、NOR Flash、SDRAM
0xE000_0000 -- 0xFFFFFFFF 内核私有外设区 NVIC、SysTick、MPU、调试组件

所有存储器(包括外设寄存器)都统一编址 ,CPU 用 LDR/STR 指令就能访问它们。


🧱 二、内部存储器详解(芯片集成部分)

1️⃣ 主 Flash(Main Flash / User Flash)

  • 地址0x0800_0000 开始(物理地址)
  • 类型:非易失性 NOR Flash
  • 容量:64KB ~ 2MB(依型号而定,如 STM32F103C8T6 是 64KB)
  • 用途
    • 存放 用户程序(APP)
    • 可划分出 Bootloader 区 + APP 区
    • 剩余空间可模拟 EEPROM(存配置参数)
  • 特点
    • 掉电不丢失
    • 写入前需按 页擦除(Page Erase)
    • 支持 XIP(Execute In Place)------直接在 Flash 运行代码

🔍 APP 区 = 主 Flash 中从某个偏移地址开始的一段区域,由链接脚本定义。


2️⃣ 系统存储器(System Memory)

  • 地址0x1FFF_0000 开始(不同系列略有差异)
  • 类型掩膜 ROM(Mask ROM) ------ 出厂固化,不可修改
  • 内容 :ST 官方 Bootloader(支持 UART、USB DFU、CAN 等 ISP 协议)
  • 用途:首次烧录、救砖、无调试器时更新固件
  • 如何启用 :通过 BOOT0/BOOT1 引脚 选择启动源

⚠️ 注意:这不是 Flash,不能写!只是只读的"急救包"。


3️⃣ 选项字节(Option Bytes)

  • 地址0x1FFF_F800 附近
  • 类型:特殊 Flash 区域(可擦写,但次数有限)
  • 用途 :配置芯片行为,如:
    • 读保护(RDP)
    • 写保护(WRP)
    • BOOT0 引脚功能重映射
    • 看门狗使能
  • 特点:独立于主程序,烧录时可选择是否覆盖

4️⃣ SRAM(Static RAM)

  • 地址0x2000_0000 开始(主 SRAM)

  • 类型:高速易失性静态 RAM

  • 容量:几 KB ~ 1MB+(如 H7 有 1MB)

  • 细分(以 STM32H7 为例):

    • DTCM RAM(0x2000_0000):数据紧耦合内存,CPU 直连,零等待
    • ITCM RAM(0x0000_0000):指令紧耦合内存,放关键代码(如中断服务程序)
    • AXI SRAM(0x2400_0000):大容量通用 RAM
    • 备份 SRAM(0x3880_0000):接 VBAT,掉电保持(需纽扣电池)
  • 用途

    • 全局变量(.data, .bss
    • 栈(Stack)和堆(Heap)
    • DMA 缓冲区
    • RTOS 任务栈、TCB

✅ 所有运行时数据都在 SRAM!


5️⃣ 备份域(Backup Domain)

  • 不是独立存储器 ,而是 SRAM 和 RTC 寄存器的一个逻辑区域
  • 供电 :由 VBAT 引脚(纽扣电池)单独供电
  • 包含
    • RTC 寄存器(时间、闹钟)
    • 备份 SRAM(4KB~32KB)
    • 备份数据寄存器(BKP)
  • 作用:系统复位/掉电后仍保留关键状态

🔌 三、外部扩展存储器(通过 FMC/FSMC 或 OCTOSPI)

6️⃣ PSRAM(Pseudo SRAM)

  • 地址0x6000_0000 起(Bank1),通过 FMC 控制器映射
  • 类型:伪静态 RAM(内部是 DRAM + 自刷新控制器,接口像 SRAM)
  • 用途:当内部 SRAM 不够时,扩展图像帧缓存、音频缓冲、AI 模型权重
  • 优点:比 SDRAM 接口简单,比 SRAM 成本低、容量大(常见 8~64MB)

💡 常用于 ESP32-S3、STM32H7 视觉项目。


7️⃣ 外部 NOR/NAND Flash、SDRAM

  • 也通过 FMC/OCTOSPI 映射到 0x6000_0000~0x9FFF_FFFF
  • 用于存储大文件(如 UI 图片、语音提示、固件备份)
相关推荐
蓬荜生灰1 小时前
STM32(10)-- 创建库函数版工程
stm32·单片机·嵌入式硬件
LYS_06181 小时前
寒假学习(13)(HAL库4+模数电13)
单片机·嵌入式硬件·学习
Y1rong2 小时前
STM32之BKP和RTC
stm32·嵌入式硬件
买辣椒用券2 小时前
STM32F407音频采集与播放实战:INMP441麦克风与MAX98357A扬声器
stm32·嵌入式硬件·音视频
代码游侠2 小时前
学习笔记——Linux内核与嵌入式开发2
linux·运维·arm开发·嵌入式硬件·学习·架构
哎呦 你干嘛~2 小时前
plc仿真来控制单片机
单片机·嵌入式硬件
czwxkn2 小时前
10单片机PWM
单片机
ℳ๓. Sweet2 小时前
【STM32】关于DMA发送后立刻复位单片机导致无法正确发送的问题
stm32·单片机·嵌入式硬件
恒锐丰小吕2 小时前
屹晶微 EG2136S 600V三相半桥驱动芯片技术解析
嵌入式硬件·硬件工程