ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

STM32F103C8T6最小核心板设计:从原理图到PCB完整实战

STM32F103C8T6最小核心板设计:从原理图到PCB完整实战 做硬件这些年我一直觉得 STM32F103C8T6 是最适合“亲手画第一块板”的芯片之一。这颗 LQFP48 封装的小家伙内核是 ARM Cortex-M3主频 72MHzFlash 64KB、RAM 20KB资源不算豪华但做控制、采集、通信完全够用更重要的是——它足够简单简单到你把最小系统的原理图研究透就已经把 MCU 硬件设计的底层逻辑摸了个七七八八。网上成品核心板卖得很便宜但自己从原理图到 PCB 完整走一遍收获完全不一样。你会真正理解为什么电源引脚要放那么多电容、为什么晶振旁边要并一个 1M 电阻、为什么 SWD 只需要两根线就能下载调试。这篇文章我就把设计一块 STM32F103C8T6 最小核心板的完整流程拆开讲从最小系统需要哪些电路、每个元件参数怎么定到 PCB 布局布线的关键规则再到打样回来之后的排错思路。内容面向电子类学生、刚入行的硬件工程师以及任何想自己做小板子的开发者。1. 动手之前先想清楚最小系统的边界和方案选择1.1 最小核心板到底需要哪些电路很多人拿到 STM32F103C8T6 的数据手册就蒙了——100 多页全是寄存器、电气特性、封装尺寸新手根本不知道从哪里开始看。其实你只要抓住一个核心问题要让这颗芯片跑起来硬件上必须满足什么条件答案就四件事供电、时钟、复位、程序下载途径。供电保证芯片有能量工作时钟给芯片一个节拍复位保证上电后进入确定状态下载途径解决“程序怎么进去”的问题。基于这四件事最小核心板的外围电路就非常清晰了电源部分USB 座或排针引入 5V经过 LDO 稳压到 3.3V配合输入输出滤波电容时钟部分8MHz 主晶振两个负载电容一个并联反馈电阻复位部分10k 上拉电阻加 100nF 电容可选手动复位按键启动配置BOOT0 下拉到地BOOT1 悬空或下拉再留个跳线位下载调试SWD 四针接口SWDIO、SWCLK、GND、3.3V有条件再引 NRST辅助部分电源指示灯、复位按键、两排 2.54mm 排针把 GPIO 全部引出。如果你做的是“最小核心板”而不是“最小系统”那外设一律不往上放LED、按键最多留一两个做状态指示千万不要把传感器接口、电机驱动、显示模块都堆上去那是应用板的活。核心板的价值在于“小而精”做出来能反复用在各种项目里。1.2 器件选型便宜不等于省钱很多新手画第一块板时容易陷入一个误区原理图照着别人抄元件随便选结果打样回来板子就是工作不正常。器件选型这件事我建议你花点时间认真想。主控方面STM32F103C8T6 这颗芯片有大量国产兼容替代型号比如 GD32F103C8T6、CH32F103C8T6 等封装和引脚定义基本一致原理图可以完全共用。设计时如果不考虑极端性能差异留出替换空间是个务实的做法供应链出问题时不至于卡脖子。电源芯片是核心器件要重点说。最常见的 AMS1117-3.3 便宜、好买、电路简单但它有一个短板压差大。AMS1117 的 dropout 电压典型值在 1.1V 左右输入 5V、输出 3.3V 时压差 1.7V理论上是能工作的但如果你用 3.7V 锂电池供电就麻烦了——电池满电 4.2V 还能勉强工作放到 3.6V 时压差只剩 0.3VAMS1117 直接掉出调整范围输出电压会跟着电池电压往下掉系统就开始不断复位。所以我的建议是如果板子以 USB 5V 供电为主用 AMS1117-3.3 没问题如果考虑电池供电选低压差 LDO比如 XC6206P332MR、ME6211 这类压差只有 100 到 300mV3.7V 锂电池可以一直用到 3.4V 还能稳定输出 3.3V。XC6206 这类芯片价格也不贵几毛钱但设计余量完全不一样。晶振这块STM32F103C8T6 需要 8MHz 主晶振才能以 72MHz 全速运行。晶振本身不贵几毛钱到一两块都有但要注意选择负载电容匹配的型号。无源晶振常见负载电容有 20pF、12pF、9pF 等选型时要看清规格书然后根据负载电容去算外接电容值。这部分在第三章我会详细算给你看。电阻电容方面常规用 0402 或 0603 封装。我建议新手统一用 0603焊接难度低打样回来手工焊也方便。去耦电容用 MLCC 陶瓷电容100nF104是标配耐压 16V 或 25V 都行。电源滤波的大电容10uF 可以用陶瓷电容但要注意 DC 偏压特性小封装陶瓷电容在直流偏压后实际容值会明显下降所以电源入口的 10uF 我习惯用 0805 封装或者用钽电容、电解电容。1.3 引脚分配48个引脚怎么安排才不返工STM32F103C8T6 是 LQFP48 封装除去电源、地、晶振、复位、启动配置这些专用引脚可作为 GPIO 的引脚大约 37 个。画核心板时引脚分配的核心思路是“把专用功能的引脚固定住其余全部引出丝印标清楚”。哪些引脚是必须在原理图阶段就处理好的PA13 和 PA14这是 SWD 调试接口的 SWDIO 和 SWCLK虽然可以复用为普通 GPIO但如果你不想第一次下载就吃瘪请务必把它们引出到 SWD 排针上PA9 和 PA10这是 USART1 的 TX 和 RX也是串口 ISP 下载要用到的引脚建议引到排针附近方便调试时接串口PC14 和 PC15可以做 32.768kHz 外部低速晶振也可以做 GPIO。如果你不打算做 RTC 或低功耗唤醒功能就当 GPIO 用但要注意一旦你画了 32.768kHz 晶振的位置这两个引脚就不能再接其他外设了NRST复位引脚必须接上拉电阻和滤波电容BOOT0启动模式选择引脚拉低从主 Flash 启动这是正常模式PB2它同时是 BOOT1 引脚启动配置会用到。正常从 Flash 启动时 BOOT1 是“任意电平”所以 PB2 可以当普通 GPIO 用但外部电路要避免把它强制拉死不然切换启动模式时会麻烦。我的做法是把 GPIO 按顺序从 PA0 到 PB15 全部用双排排针引出不按功能分组全部拉出来就行。排针间距 2.54mm两排间距做成 20mm 左右可以直接插在面包板上或者用杜邦线连接使用非常灵活。丝印上一定要标清楚引脚号这个钱不能省不然调试的时候拿万用表找引脚会怀疑人生。2. 电源电路设计从USB 5V到稳定的3.3V2.1 三种供电方式和对应的LDO选型最小核心板的供电方式我总结下来常见的就三种USB 5V 供电、外部 3.3V 直接供电、电池供电。设计之前先想清楚你这块板子主要怎么用因为供电电路会直接影响板子尺寸和成本。如果是 USB 供电板上需要一颗 LDO 把 5V 降到 3.3V。这种方案最通用插上 USB 线就能跑还顺便有了串口通信的可能。电路结构是USB 座 5V → 输入滤波电容 → LDO → 输出滤波电容 → 3.3V 电源轨。这里有一个细节USB 座子的 VBUS 在插入瞬间会有浪涌输入电容要选大一点我习惯在 LDO 输入端放一个 10uF 再加一个 100nF兼顾低频和高频滤波。如果是外部 3.3V 直接供电板上就不需要 LDO 了直接把 3.3V 接到 VDD 网络。这种方案适合已经有一套稳定的 3.3V 电源系统、核心板作为子模块插在底板上的场景。要注意的是这时候板上最好留一个 0 欧电阻或跳线位方便选择“板上 LDO 供电”还是“外部 3.3V 直供”两种方式。0 欧电阻的妙用就是在这里贴上是板上 LDO 供电不贴、外部供 3.3V。如果是电池供电正如我在选型部分说的务必用低压差 LDO。XC6206 系列最大输出电流只有 300mA 左右够用但如果你后续要带动 WiFi 模块、蜂鸣器这类大电流负载就要选更大电流的低压差 LDO比如 RT9013500mA或者 ME6211500mA。电池供电还有一个容易忽略的点电池反接。LDO 和芯片一般都不耐负压建议在电源输入处加一个肖特基二极管做反接保护虽然会有 0.2 到 0.3V 的压降但能保住芯片的命。2.2 去耦电容和VDDA滤波细节决定稳定性很多新手画完电源电路芯片也能跑但系统不稳定跑着跑着就死机。十有八九是去耦电容没放对位置。STM32F103C8T6 有好几个 VDD 引脚我的原则是每一个 VDD 引脚旁边都要放一个 100nF 的高频去耦电容并且这个电容要尽可能靠近对应的引脚走线要先经过电容再到 MCU 引脚。为什么要 100nF因为数字电路翻转瞬间会产生高频噪声100nF 的谐振频率刚好覆盖几十 MHz 这个区间能有效抑制这类高频干扰。而大电容的谐振频率低对高频噪声基本不起作用所以“小电容挨着引脚大电容管全局”是最基本的配置。VDDA 引脚需要额外照顾。我给 VDDA 的处理方式是串联一个 10Ω 电阻或磁珠后接到 3.3V 电源轨然后加一个 10uF 和 100nF 的滤波电容。这是因为 VDDA 给内部 ADC 和模拟电路供电如果直接连接数字电源开关噪声会直接影响 ADC 采样精度。10Ω 电阻在这里起一个简单的 π 型滤波作用成本不到一分钱但对模拟性能的提升是实打实的。另外注意 VREF 引脚。这颗芯片的 VREF 内部其实和 VDDA 相连如果你的应用对 ADC 精度要求高可以把 VREF 单独引出来接一个高精度基准源如果只是普通应用VREF 直接接到 VDDA 即可。2.3 电源指示与功耗估算最小核心板上至少要有一颗电源指示灯不是好看是实用。板子通电后到底有没有电、LDO 有没有正常工作灯一亮一目了然省去你用万用表到处探的时间。指示灯电路很简单3.3V 串联一个 1k 电阻再串 LED 到地。1k 电阻下 LED 工作电流大约 3mA 左右亮度在室内完全够看。如果你想更省电可以换 2k 或 4.7k电流更小但要注意电流太小 LED 亮度会明显下降有些低亮度的灯 1k 都不亮。关于功耗估算虽然核心板不算大功率设备但养成这个习惯很重要。STM32F103C8T6 在 72MHz 全速运行时的电流大约 30 到 50mA加上 LED、LDO 自身静态电流、各个电阻的漏电流整板功耗大概在 60 到 80mA。用 AMS1117 时压差 1.7V、电流 70mALDO 上的功耗大约是 119mW虽然不至于烫手但如果板子长时间运行还是会有温升。这时候把 LDO 的铜皮铺大一点散热条件会好很多。这个计算过程就是硬件工程师所谓的“功耗预算”板子设计完能不能稳定工作提前算一遍心里才有底。3. 时钟、复位与启动配置最小系统的“灵魂三件套”3.1 复位电路RC复位为什么够用关于复位电路我知道很多人会纠结要不要用专门的复位芯片这个问题我的答案是STM32F103 这类 MCU 的 NRST 引脚内部已经集成了上拉电阻所以最小系统完全可以用一个 10k 上拉电阻加一个 100nF 电容实现上电复位成本只有几分钱可靠性对绝大多数应用足够了。讲一下原理上电瞬间电源电压从 0 开始爬升此时 100nF 电容相当于短路NRST 被拉低到地芯片保持复位状态随着电源稳定电容通过 10k 上拉电阻充电NRST 电压逐渐上升到高电平芯片复位结束开始从 0x08000000 执行程序。这个充电时间常数是 τ R × C 10kΩ × 100nF 1ms也就是说上电后大约 3 到 5 毫秒复位才会解除。这个时间足够让内部电源和时钟稳定所以是可靠的设计。如果想加手动复位按键就把按键并联在电容两端按下按键NRST 直接接地芯片立刻复位松开后电容重新充电恢复高电平。这里有个小技巧按键复位时100nF 电容属于瞬间放电电流比较大如果按键距离芯片远走线长可能会引入噪声所以我建议把复位按键放在 NRST 引脚附近走线短而粗。哪些情况才需要专门的复位芯片供电电压跌落检测、上电时序严格控制的系统、需要看门狗复位的场合。这些情况用 MAX809、MCP100 这类复位芯片芯片会在电压跌落到阈值以下时给 NRST 一个低电平防止 MCU 在电压不稳定时跑飞。核心板我不用因为会给新手增加不必要的复杂度。把 RC 复位理解透你以后看任何 MCU 最小系统原理图都是一眼的事。3.2 8MHz主晶振负载电容计算与布局要求主晶振电路是新手最容易画错的地方之一。STM32F103C8T6 外部主晶振频率是 8MHz内部经过 PLL 倍频到 72MHz。晶振电路由三部分组成8MHz 无源晶振、两个负载电容、一个 1MΩ 并联反馈电阻。负载电容的计算是重点。晶振规格书会给出一个负载电容值 CL常见的是 20pF。外接的两个电容 C1、C2 通常是相等值它们与晶振内部电路的等效电容之和要等于 CL。计算公式是CL (C1 × C2) / (C1 C2) Cstray其中 Cstray 是引脚和 PCB 走线的寄生电容大约 5 到 10pF。假设我们用 CL 20pF 的晶振取 Cstray 10pF那么(C1 × C2) / (C1 C2) 20 - 10 10pF如果 C1 C2 20pF那么并联等效就是 10pF正好满足要求。所以 20pF 负载电容的晶振外接两个 20pF 电容是最标准的做法。如果你买的是 12pF 负载电容的晶振那外接电容要小得多用同样的公式12 - 10 2pF此时外接电容要选 4pF 左右但这么小的电容很容易受寄生参数影响所以布局时就要求晶振离芯片非常近。这也是为什么我建议新手直接买 20pF 负载电容的 8MHz 晶振匹配电路最方便容错率最高。1MΩ 并联反馈电阻的作用是让晶振内部的 CMOS 反相器工作在放大区建立一个稳定的直流工作点。这颗电阻在大多数 STM32 最小系统里都是标准值 1MΩ建议放上。有些芯片内部已经集成了反馈电阻但 STM32F103 的数据手册里建议外部放置所以我们按手册做。PCB 布局时晶振电路有两个硬性要求晶振要走线最短从 OSC_IN 和 OSC_OUT 引脚出来先经过负载电容再到晶振晶振下方不能走任何信号线尤其是数字信号线。晶振是敏感器件50Hz 工频干扰、数字信号耦合都会导致起振困难或频率偏移。我在实际项目中见过太多因为晶振下方走过孔而出现的诡异问题一开始随机死机、串口乱码查了半天发现是晶振被干扰了。3.3 BOOT0/BOOT1启动模式怎么设计STM32F103 的启动模式由 BOOT0 和 BOOT1也就是 PB2两个引脚的电平决定。最小系统板上我强烈建议 BOOT0 不要直接固定下拉而是要引出到跳线帽或排针因为你迟早会用到串口 ISP 下载功能。启动模式对照关系如下BOOT0 电平BOOT1 电平启动区域说明0任意主 Flash正常执行用户程序10系统存储器运行出厂 Bootloader可串口 ISP 下载11SRAM在 SRAM 中调试程序一般不常用正常运行时BOOT0 必须为低电平所以板上下拉一个 10k 电阻到地这是默认状态。如果要通过串口 ISP 下载程序就把 BOOT0 短接到高电平然后让系统复位芯片会执行系统存储器里的 Bootloader通过 USART1 接收程序写入 Flash。下载完以后再切回低电平复位跑新程序。这个“跳线切换 BOOT0”的过程虽然每次要手动操作但它是理解 STM32 启动机制的启蒙课。第一次用串口线给芯片下载程序时那种“焊死 BOOT0”之后死活连不上的经历我相信很多硬件工程师都遇到过。所以画板子的时候我建议 BOOT0 引出一根排针旁边放一个跳线帽两脚间距 2.54mm非常方便。4. 下载与调试接口SWD/JTAG怎么选怎么画4.1 SWD接口设计要点刚开始学 STM32 时我也用过 JTAG 调试器20 针的接口占了一大块板子面积后来换 SWD发现真的是“简单到令人感动”的发明。SWD 全称是 Serial Wire Debug只要两根信号线加一根地线就能实现下载和调试。SWD 接口我推荐至少引出 4 个引脚SWDIO数据线对应 PA13SWCLK时钟线对应 PA14GND地线调试器和板子共地是必须的3.3V给调试器提供参考电平不一定要接但接了以后调试器能检测到目标板供电状态。如果调试空间允许再加一条 NRST有些调试器可以通过复位引脚控制芯片复位配合调试器做特殊操作比如在芯片死机时强制复位重新连接。不过这个引脚不是必需我有的板子就只放四针用 ST-Link 下载调试一点问题都没有。为什么选 SWD 不用 JTAG原因很简单第一SWD 只占两个 GPIOJTAG 要占五个对于引角不够用的最小核心板来说省下来的三个引脚太宝贵了第二SWD 抗干扰能力其实比 JTAG 好线长了也不容易出问题第三现在的 ST-Link、DAP-Link、J-Link 全都支持 SWD 模式兼容性毫无压力。这里必须提醒一个新手常踩的坑PA13 和 PA14 是 SWD 专用引脚如果你把它们复用成普通 GPIOSWD 下载就会失效。这是好多人把引脚用得太满、板子画完程序烧不进去的原因。如果你确实要用 PA13/PA14 做其他外设那请确保调试接口还有别的通道并且要先下载好程序再复用否则下次就只能用串口 ISP 恢复。最稳妥的做法是SWD 接口保留PA13/PA14 不再接其他功能。4.2 串口ISP备用通道与读保护问题串口 ISP 下载是 SWD 之外的一个重要备用通道。STM32F103 的系统存储器里出厂就带了一段 Bootloader通过 USART1 接收数据。所以设计板子时PA9USART1_TX和 PA10USART1_RX一定要引出来。串口 ISP 的接线有个容易弄反的地方板子的 PA9 是发送端TX需要连接到 USB 转串口模块的 RX板子的 PA10 是接收端RX要连接到模块的 TX。很多人第一次接反了下载程序一直没有反应还以为是芯片坏了。我每次接串口模块都会先看一眼标注交叉连接。另外一个和下载相关、新手基本都会踩的坑是芯片读保护问题。STM32 支持通过设置 RDPRead Protection级别来防止 Flash 被非法读取。虽然这个机制对产品保护很有用但如果你在调试过程中不小心开启了读保护比如用了某些带加密功能的烧录工具再去用 ST-Link 连接时调试器会报错说“Flash access denied”之类的提示这时候你以为芯片坏了其实是 Flash 整个被保护SWD 被禁用。解决方案是用 ST-Link Utility 或官方工具执行整片擦除擦除后读保护会自动解除但坏消息是 Flash 里的程序也会全部没了。这个“芯片彻底锁死”的假象我见过好多次知道原理之后就不再慌了。串口 ISP 正好也是解锁的一个备用方案如果 SWD 处于保护状态可以先通过把 BOOT0 拉高进入系统存储器 Bootloader然后用串口工具对整片 Flash 执行擦除也能解除保护。所以不要忽视板上那根小小的 BOOT0 跳线关键时候是真的能救命的。5. PCB Layout从零到一布局布线的完整实操5.1 层叠配置与板框尺寸规划原理图画完进入 PCB 设计环节。STM32F103C8T6 最小核心板我建议用双层板底层做完整的地平面顶层走信号和电源。用四层板当然更好但成本和打样难度都会上升对这个项目来说完全没有必要。板厚 1.6mm 是标准值不用思考直接用。铜厚 1oz 是常规工艺打样厂默认就是这种。板框尺寸我习惯做成两排排针内侧间距 20.32mm也就是 0.8 英寸8 个 2.54mm 的倍数总长约 45 到 55mm这样可以很方便地插到面包板上。你买的洞洞板、面包板孔距都是 2.54mm 标准核心板做成这样开发阶段直接插在各种实验板上用极其舒服。Layer 配置在 EDA 工具里设置。如果你用的是嘉立创 EDA新建 PCB 时选双层板把底层命名为“GND”并设置网络为 GND之后在布线时它会被自动铺铜覆盖。早期版本我们还手工铺铜现在 EDA 软件都有“铺铜”功能选中底层铺铜后双击设置为 GND 网络就行。铺铜的好处是给所有回流电流提供最短路径同时降低地阻抗减少噪声。5.2 元件布局顺序与关键区域约束布局决定布线布线决定成败。这句话在 PCB 设计里永远是真理。我画最小核心板时的元件布局顺序是这样的第一步放 MCU。芯片放在板子正中央方向决定以后排针的引出顺序。我习惯把 48 脚芯片横放左右各 12 个引脚上下各 12 个引脚这样 PCB 左右两侧正好引出两排排针走线也顺。第二步放晶振电路。8MHz 晶振放在芯片的 OSC_IN、OSC_OUT 引脚那一侧尽可能靠近引脚这是全板最关键的布局区域。32.768kHz 晶振如果板上有放在芯片另一侧离主晶振远一点避免互相干扰。第三步放去耦电容。每个 VDD 引脚旁边的 100nF 电容放在芯片背面靠近对应引脚的过孔。这是最小系统板的标准操作——背面放电容正面走信号空间利用率最高。第四步放电源部分。LDO、输入输出滤波电容、电源指示灯放在板边靠近 USB 座或电源排针。电源线和 GND 线尽量短避免和信号线交叉。LDO 输出的 3.3V 走线先经过总滤波电容再加过孔送到各个引脚。第五步放接口。SWD 排针、BOOT 跳线、串口排针、GPIO 排针统一靠板沿方便插线。排针间距 2.54mm焊接时不容易连锡。布局时还要预留测试点。电源 3.3V、GND、NRST、每个晶振引脚我都习惯放一个测试点裸露的焊盘就行。别小看这几个小点调板时万用表探针往上一放就能量电压真的能省很多事。5.3 布线规则线宽、间距、过孔与地平面布局完成后进入布线环节。我直接给你一组能用的核心参数这些是我实际验证过的适用场景就是 STM32F103C8T6 最小核心板双层板普通打样工艺信号线宽10mil0.254mm走 GPIO、SWDIO、SWCLK、复位、BOOT 信号电源线宽20mil0.5mm以上3.3V 和 5V 网络都按这个标准走地线不手工走靠铺铜实现线间距板子空间够我一般设 8mil 以上焊接和 EMC 都好一些过孔外径 0.6mm、内径 0.3mm常规打样工艺都能做。电源过孔可以打两个到三个并联减小压降最小铜皮间距6mil 以上打样厂都能加工。说几个新手很容易忽略的布线细节。晶振区域要包地。所谓包地就是用 GND 铜皮把晶振和负载电容包围起来形成一个屏蔽圈减少外部干扰。实现方式很简单晶振的正下方留一块完整的地铜皮两侧放地过孔让晶振区域四周都有地围绕。去耦电容的回流路径要对。100nF 电容如果放在芯片背面那么电容的两个焊盘要通过过孔连接到正面 MCU 的 VDD 和 GND 引脚过孔位置要靠近芯片引脚让回流路径最短。如果过孔离得太远电容就变成了“摆设”滤波效果大打折扣。铺铜时注意热焊盘。如果你用直连方式铺铜焊接时焊盘散热太快特别难焊。所以 EDA 软件里最好把焊盘的“十字连接”或“散热连接”打开让铜皮通过细线连接焊盘这样焊接温度能快速达到。这不是雕刻细节是打完样拿着烙铁焊到想骂人的时候才会明白的优化。模拟地还是数字地的问题如果这片板子只用内部 ADC 的内部基准你甚至可以不做模拟地和数字地的分离统一一个完整的地平面就好。真正做分割的场景是外部有高精度模拟电路比如 16 位以上 ADC、微弱信号放大器那时候才需要在地平面上开槽分割。STM32F103 内置 ADC 是 12 位只要 VDDA 滤波做得到位统一地平面对噪声的影响不大反而有可能地平面割裂后跨分割走线会带来更大的问题。5.4 丝印、安装孔与打样前检查清单布线完成之后千万别急着导出 Gerber 文件还有三件小事要处理。第一件是丝印。板子上要标注芯片型号“STM32F103C8T6”、板名和版本号比如“CoreBoard V1.0”、排针的引脚编号至少标注第一脚的圆点、电源正负极标注VCC、GND、5V、3.3V、SWD 接口的信号名称。这些丝印在调板时能救命。我记得有一次拿一块没有任何丝印的“裸板”调试引脚找半天最后只能拿万用表一个个量。从那以后我每次画板都把丝印当一回事。第二件是安装孔。最小核心板两侧可以放两个直径 3mm 的孔把板子固定在铜柱上。安装孔要避开走线内壁可以镀铜也可以不镀我习惯做非金属化孔省预算也避免和地平面短路。第三件是封装检查。这个太重要了。用 3D 预览功能最后检查一遍每个器件的封装是否正确特别是 LQFP48 芯片的焊盘间距LED 的方向阴极和阳极有没有反电解电容和钽电容的极性。我在实际项目中遇到过一次 LED 画反、焊上去怎么都不亮的问题当时第一反应是芯片坏了折腾半天才发现是封装方向反了。3D 预览在出图前把这些低级错误扼杀掉绝对是低投入高回报的一件事。打样前我还习惯过一遍 DRCDesign Rule Check把 EDA 里的规则设置得严格一点让软件帮我们找出问题。虽然常规打样厂都有自己的工艺能力标准但 DRC 拦下的每一个错误都意味着少一笔打样费、少一次循环等待。6. 打样回来之后的常见问题与排查技巧6.1 不上电、下载失败、晶振不起振问题速查表第一版板子打样回来焊接完成插上 USB 线心情是激动中带着忐忑。大多数情况下不会一次点亮这是硬件工程师的宿命。我整理了一个高频问题速查表都是实际操练过的血泪经验。现象常见原因排查方法电源指示灯不亮LDO 虚焊、输入输出短路、5V 没过来万用表先量 USB 座的 5V再量 LDO 输入和输出逐级定位芯片发热严重3.3V 和 GND 短路、芯片焊反断电万用表蜂鸣档量 3.3V 和 GND 之间是否短路用手摸芯片表面发烫的十有八九是电源接反SWD 连接失败SWDIO/SWCLK 虚焊、芯片没供电、BOOT0 状态异常、芯片读保护先确认 3.3V 正常用万用表量 SWDIO 和 SWCLK 到芯片引脚的导通性尝试拉高 BOOT0 上电后再连能连上就是 Flash 读保护程序能下载但无反应BOOT0 被拉高跳到了 Bootloader、复位电路异常、晶振没起振确认 BOOT0 为低电平并复位示波器或万用表量 NRST 电压是否在 3.3V量晶振引脚是否有振荡波形串口输出乱码主频配置不对、晶振频率不对、串口波特率误差先确认 RCC 时钟初始化用的是 8MHz 外部晶振还是内部 HSI波特率用 9600 测试降低误码率按键复位时随机死机复位走线过长、去耦电容缺失缩短复位键到 NRST 走线确保每个 VDD 旁 100nF 电容都在位排查的顺序有讲究先电源再时钟最后程序。很多人在下载失败时就怀疑芯片坏了其实大多数情况只是芯片没工作起来。我自己的流程是拿到新板子先不焊主控把电源部分全部焊好上电量好 3.3V 没问题之后再焊 MCU。这个习惯帮我拦下了至少一半的问题因为电源问题是最常见也最容易排除的。6.2 第一板成功点亮的关键习惯最后说几个我积攒下来、对新手尤其有价值的操作习惯。焊接温度要注意。STM32F103C8T6 是 LQFP48 封装用烙铁手工焊的话烙铁温度设置在 330℃ 到 350℃ 比较合适。太高容易烫坏芯片或让焊盘脱落太低焊锡流动性差容易连锡。焊接时先固定对角两个引脚确保芯片位置对正后再拖焊其他引脚。焊完用放大镜检查有没有虚焊和连锡尤其是引脚间距小的封装。上电之前先做静态检查。用万用表蜂鸣档量一下 3.3V 和 GND 之间有没有短路量一下 USB 座子是否焊歪量一下 LDO 的输入输出脚是否虚焊。这一步看似简单但能拦住大多数低级错误。调板时准备好一个“三板斧”工具包一个万用表、一个 ST-Link 调试器、一根 USB 转串口线。这三样东西能覆盖从电源检查到下载调试的所有场景。示波器当然更专业但如果没有用万用表的频率档也能大致判断晶振是否起振。写程序时第一段代码建议是最简单的闪灯程序。注意串口下载、SWD 下载、晶振起振全套链路验证通过之后再开始写实际应用代码不要一上来就跑复杂外设不然出问题根本不知道是硬件还是软件。我自己的习惯是第一版打样回来先在板子上点亮一颗 LED然后用 SWD 单步调试确认芯片时钟树工作正常再逐渐增加功能。这个流程虽然慢但每一步都有明确的结果验证底子是稳的。这个项目做完之后你会对 MCU 最小系统有一种“尽在掌控”的感觉。以后不管用什么芯片、画什么板子原理图中电源、时钟、复位、下载调试这四个核心模块的设计思路都是相通的。很多年前我第一次画 STM32F103C8T6 核心板的时候因为晶振没起振折腾了整整两天后来才明白是负载电容值选错了。你若是一开始就理解了这些细节会少走很多弯路。
返回列表