ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32F103C8T6小系统板硬件设计全解析:从电源到晶振的实战指南

STM32F103C8T6小系统板硬件设计全解析:从电源到晶振的实战指南 1. 拿到一块STM32F103C8T6小系统板先别急着写代码很多人入门STM32的第一反应是装Keil、找例程、点灯。我见过太多人卡在第一步——板子买回来USB线插上电脑没反应然后就开始怀疑人生。问题往往不在代码而在你根本没搞清楚手上这块板子到底是怎么工作的。STM32F103C8T6小系统板市面上常见的“最小系统板”或者“核心板”通常就是一块比大拇指大一点的PCB上面焊了一颗LQFP48封装的STM32F103C8T6、一颗8MHz晶振、一颗32.768kHz晶振有些板子省了、一个复位按键、一个BOOT跳线区、一个Micro USB口或者Type-C口、一颗AMS1117-3.3稳压芯片再加上若干去耦电容和指示灯。看起来简单但每一部分都有它存在的理由缺一个都可能让你在调试时多花三天时间。这篇文章就是带你把这套电路原理图从头到尾捋一遍。不是泛泛地讲“这个是电源、那个是晶振”而是告诉你每个元件为什么选这个值、为什么放在这个位置、省掉会怎样、换掉会怎样。适合刚接触STM32的初学者也适合从51单片机转过来、第一次画STM32板子的朋友。看完之后你拿到任何一块STM32F103C8T6的板子都能自己分析它的硬件设计是否合理甚至能自己画一块。2. 整体设计思路最小系统到底“最小”在哪里2.1 最小系统的定义与边界所谓“最小系统”指的是让一颗单片机能够正常运行程序所必须的最少外围电路。注意关键词必须和最少。不是“好用”不是“方便”是“能跑起来”。对于STM32F103C8T6来说这个最小集合包括电源电路把USB的5V或者外部输入的5V转成3.3V因为STM32F103的IO电压和核心电压都是3.3V部分引脚兼容5V输入但供电必须是3.3V。晶振电路提供系统时钟源。虽然STM32有内部8MHz RC振荡器但精度差、温漂大做串口通信容易出问题所以外部晶振几乎是必须的。复位电路上电时给NRST引脚一个低电平脉冲让芯片从确定的状态开始执行。启动模式配置BOOT0和BOOT1引脚决定芯片从Flash启动、从系统存储器启动还是从SRAM启动。调试接口SWD接口至少引出SWDIO和SWCLK两根线用于下载程序和在线调试。去耦电容每对电源引脚旁边放100nF电容滤除高频噪声。这六项凑齐了板子就能跑。至于LED、按键、USB转串口芯片、EEPROM、传感器那些都是“扩展”不属于最小系统。2.2 为什么选STM32F103C8T6这颗芯片在入门市场火了很多年原因很实在特性参数对入门者的意义内核ARM Cortex-M3资料多生态成熟主频最高72MHz性能够用学完能直接做项目Flash64KB中等规模程序够用RAM20KB比51单片机宽裕太多封装LQFP48引脚间距0.5mm手工焊接难度适中价格常年低位坏了不心疼外设3个USART、2个SPI、2个I2C、2个ADC、多个定时器覆盖绝大多数入门实验市面上还有国产替代型号比如GD32F103C8T6、CH32F103C8T6等引脚和寄存器基本兼容价格更低。但初学阶段建议先用原厂STM32F103C8T6因为网上例程、视频教程、社区问答几乎都基于它遇到问题容易搜到答案。国产替代可以作为后续降本方案来考虑。2.3 小系统板的典型布局逻辑一块设计合理的小系统板布局通常遵循以下原则USB口和稳压芯片放在板子一端远离晶振和模拟部分。晶振紧贴芯片放置走线尽量短下方不走其他信号线。去耦电容紧贴对应的VDD引脚越近越好。SWD接口引出到板边方便插调试器。BOOT跳线放在容易操作的位置。LED和按键放在板边方便观察和按压。这些原则背后的逻辑只有一个减少干扰方便使用。晶振是高频信号源走线长了容易辐射噪声去耦电容离引脚远了等效电感增大滤波效果大打折扣SWD接口如果被其他元件挡住调试时你会想砸板子。3. 电源电路AMS1117-3.3不是随便选的3.1 从5V到3.3V的转换路径小系统板的供电通常有两种方式USB供电和外部引脚供电。USB供电时Micro USB或Type-C口提供5V电压经过一颗AMS1117-3.3线性稳压芯片输出3.3V给STM32和其他外设。外部供电时你可以直接从5V引脚输入5V或者从3.3V引脚直接输入稳定的3.3V此时AMS1117不工作。这里有个细节AMS1117-3.3的压差大约是1.1V到1.3V。也就是说输入电压至少要4.4V以上它才能稳定输出3.3V。USB的5V完全满足这个条件但如果你用两节干电池供电3VAMS1117就无能为力了这时候需要换低压差稳压器或者升压方案。3.2 AMS1117-3.3的外围元件计算AMS1117-3.3的典型应用电路需要两个电容输入端一个10uF到22uF的钽电容或陶瓷电容输出端一个10uF到22uF的电容。这两个电容的作用不同输入电容当负载电流突变时防止输入电压跌落过多。AMS1117的瞬态响应不算快输入电容给它提供“缓冲”。输出电容保证环路稳定性。AMS1117对输出电容的ESR等效串联电阻有要求太小或太大都可能导致振荡。一般用10uF钽电容或者22uF陶瓷电容比较稳妥。有些板子还会在输出端并联一个100nF的小电容用来滤高频噪声。这个不是必须的但加上没坏处。注意AMS1117-3.3在输出电流较大时比如500mA以上会明显发热。如果板子上只带STM32和几个LED电流通常不到100mA芯片只是微温。但如果你外接了多个传感器模块就要算一下总电流必要时加散热片或者换开关电源方案。3.3 电源指示与滤波细节几乎每块小系统板上都有一颗电源指示灯通常是绿色LED串联一个1kΩ到2kΩ的限流电阻接在3.3V和GND之间。这颗LED的作用不是照明是告诉你“电通了”。调试时如果板子没反应第一眼看这颗灯亮不亮能省很多时间。限流电阻的计算很简单LED正向压降约2V3.3V减去2V等于1.3V如果想让电流在1mA左右现代LED 1mA就很亮了电阻取1.3kΩ实际用1kΩ或2kΩ都行。另外STM32F103C8T6有多个VDD引脚和VDDA引脚。VDD是数字电源VDDA是模拟电源。小系统板上通常把VDDA通过一个磁珠或者0Ω电阻连接到VDD再在VDDA旁边放一个100nF和一个1uF电容。磁珠的作用是隔离数字电路的高频噪声让ADC采样更干净。如果你不做模拟采集直接短接也没问题。4. 晶振电路8MHz和32.768kHz各司其职4.1 高速外部晶振HSE电路STM32F103C8T6的外部高速晶振通常选8MHz。为什么是8MHz因为STM32F103的PLL锁相环可以把8MHz倍频到72MHz正好是这颗芯片的最高主频。如果选12MHz倍频到72MHz需要6倍频也可以但8MHz是官方推荐值例程里默认配置也是8MHz。晶振电路包括一颗8MHz石英晶体接在OSC_INPD0和OSC_OUTPD1之间。两颗负载电容通常取20pF到30pF接在晶振两端到GND。有些板子还会并联一颗1MΩ到10MΩ的反馈电阻帮助起振。负载电容的计算公式是CL (C1 × C2) / (C1 C2) Cstray其中Cstray是PCB走线的寄生电容一般3pF到5pF。如果晶振规格书要求CL20pF那么C1和C2各取36pF左右考虑寄生电容后。但实际使用中20pF到30pF都能起振差别在频率精度上。做串口通信时如果波特率误差太大可以微调这两个电容。实操心得我遇到过一块板子晶振能起振但串口乱码。用示波器测晶振频率发现偏了0.5%。把负载电容从30pF换成22pF后频率准了串口也正常了。所以如果你做串口实验发现数据不对先检查晶振频率别急着怀疑代码。4.2 低速外部晶振LSE电路32.768kHz晶振接在OSC32_INPC14和OSC32_OUTPC15之间主要给RTC实时时钟提供时钟源。32.768kHz这个数字不是随便选的因为32768是2的15次方经过15次二分频后正好得到1Hz方便RTC计时。LSE电路的负载电容通常取6pF到12pF比HSE小很多因为32.768kHz晶振的等效串联电阻很大负载电容太大会导致起振困难。有些小系统板为了省空间和成本直接省略了LSE晶振RTC改用内部LSI约40kHz或者直接不用RTC。如果你需要做万年历、定时开关之类的项目LSE晶振还是加上比较靠谱。4.3 晶振布局的注意事项晶振是板子上最容易出问题的部分之一。布局时要注意晶振和负载电容尽量靠近芯片引脚走线长度控制在10mm以内。晶振下方不要走其他信号线尤其是高频信号。晶振周围可以铺地铜但不要形成完整的包围环否则可能引入干扰。如果板子空间允许晶振下面挖空不走任何铜减少寄生电容。这些措施的目的只有一个让晶振稳定起振频率准确。晶振不起振STM32就只能用内部RC振荡器精度差一个数量级串口、USB、CAN这些对时钟敏感的外设都会受影响。5. 复位与启动模式两个容易被忽视的关键点5.1 复位电路的设计STM32F103C8T6的NRST引脚是低电平复位。也就是说当NRST被拉低时芯片复位释放后芯片从启动地址开始执行。最小复位电路包括一颗10kΩ上拉电阻接在NRST和3.3V之间保证平时NRST是高电平。一颗100nF电容接在NRST和GND之间上电时电容充电NRST短暂保持低电平完成复位。一个复位按键按下时NRST直接接地手动复位。有些板子还会在NRST和GND之间加一颗反向二极管如1N4148作用是快速释放电容电荷让复位更干脆。不加也能用但快速反复按复位键时可能反应迟钝。复位时间由RC常数决定10kΩ × 100nF 1ms。STM32的复位脉冲要求至少20us1ms绰绰有余。如果你把电容换成1uF复位时间变成10ms也能用但上电到程序开始运行的时间会变长。5.2 BOOT0和BOOT1的配置STM32F103C8T6的启动模式由BOOT0和BOOT1两个引脚决定BOOT1BOOT0启动模式用途00从Flash启动正常运行程序01从系统存储器启动串口下载程序10从SRAM启动调试用极少使用11保留不用小系统板上BOOT1通常直接接地或者通过电阻接地BOOT0通过一个跳线帽或者按键选择接地或接3.3V。正常运行时BOOT0接地需要串口下载时把BOOT0跳到3.3V下载完再跳回来。注意有些板子把BOOT0通过10kΩ电阻接地同时引出一个排针。如果你用ST-Link或DAPLink下载程序BOOT0接地即可不需要改动。只有用串口下载通过USART1时才需要把BOOT0拉高。5.3 复位和启动的常见问题我见过最多的两个问题第一板子焊好后第一次上电没反应。检查发现BOOT0悬空芯片进入不确定状态。解决办法BOOT0必须通过电阻接地或接3.3V不能悬空。第二串口下载失败。检查发现BOOT0跳到了3.3V但USART1的TX和RX接反了。串口下载时电脑的TX接板子的RX电脑的RX接板子的TX交叉连接。这个错误新手经常犯。6. 调试接口与去耦电容细节决定稳定性6.1 SWD接口的引出STM32F103C8T6支持SWD和JTAG两种调试接口。SWD只需要两根线SWDIOPA13和SWCLKPA14加上3.3V和GND一共四根线。小系统板通常把这四个信号引到一个4针排针上顺序一般是3.3V、SWDIO、SWCLK、GND。为什么选SWD而不是JTAG因为SWD占用的引脚少速度也够快而且ST-Link和DAPLink都支持。JTAG需要5根线对于引脚本来就紧张的C8T6来说太浪费了。调试器方面ST-Link V2和DAPLink是最常见的选择。ST-Link是官方调试器价格稍高但兼容性最好DAPLink是开源方案价格便宜支持多种芯片。两者在小系统板上都能用接上SWDIO、SWCLK、3.3V、GND即可。实操心得SWDIO和SWCLK的走线尽量等长虽然SWD速度不高通常1MHz到4MHz但等长走线能减少信号反射。如果板子上有多个GND引脚调试接口的GND要单独走一根线到芯片的GND不要和其他大电流回路共用。6.2 去耦电容的布置STM32F103C8T6有多个VDD引脚引脚9、24、36、48和VDDA引脚引脚8。每个VDD引脚旁边都应该放一颗100nF陶瓷电容越近越好。VDDA旁边放一颗100nF和一颗1uF电容。去耦电容的作用是提供瞬态电流。当芯片内部逻辑翻转时需要瞬间从电源抽取电流如果电源走线太长电感效应会导致电压跌落。100nF电容能在纳秒级时间内提供电流弥补电源走线的延迟。为什么是100nF而不是10uF因为大电容的等效电感大高频响应差。100nF陶瓷电容的等效电感小自谐振频率高正好覆盖STM32的工作频段。大电容和小电容配合使用才能覆盖宽频段。6.3 其他细节LED、按键和扩展排针小系统板上通常还有一颗用户LED接在某个GPIO上常见的是PC13串联限流电阻。PC13在STM32F103C8T6上比较特殊它属于备份域驱动能力弱只能灌电流LED接3.3VPC13输出低电平点亮。限流电阻一般取470Ω到1kΩ。一个用户按键接在某个GPIO上另一端接地GPIO配置为上拉输入。按下时GPIO读到低电平。扩展排针把剩余的GPIO引出来方便接传感器和模块。排针间距通常是2.54mm兼容面包板和杜邦线。这些不是最小系统的必须部分但几乎每块小系统板都会加因为成本增加很少实用性提升很大。7. 常见问题与排查技巧实录7.1 上电后芯片不工作现象电源灯亮但程序不运行SWD连不上。排查顺序测3.3V电压是否正常。如果低于3.0V检查AMS1117输入电压是否足够或者是否有短路。测NRST引脚电压。正常应该是3.3V。如果一直是低电平检查复位按键是否卡住或者电容是否短路。测BOOT0引脚电压。正常运行时应为低电平。如果为高电平芯片在等待串口下载。测晶振是否起振。用示波器看OSC_OUT引脚应该有8MHz正弦波。如果没有检查晶振和负载电容。检查SWD接口连线。SWDIO和SWCLK是否接反3.3V和GND是否接对。7.2 程序下载失败现象Keil或STM32CubeProgrammer提示“No target connected”。常见原因调试器驱动没装好。ST-Link需要安装驱动DAPLink通常免驱。SWD线太长或接触不良。换短一点的杜邦线试试。芯片进入了低功耗模式或者读保护状态。用STM32CubeProgrammer解除读保护。BOOT0被拉高芯片在系统存储器模式SWD可能不响应。把BOOT0接回GND。7.3 串口通信乱码现象串口助手收到乱码或者波特率不对。排查晶振频率是否准确。用示波器测OSC_OUT或者用MCO引脚输出时钟测量。波特率配置是否正确。STM32F103的USART波特率计算公式是baud fCK / (16 × USARTDIV)其中fCK是APB时钟频率。串口线TX和RX是否交叉连接。地线是否共地。电脑和板子必须共地否则电平参考不一致。7.4 常见问题速查表问题可能原因解决方法电源灯不亮USB线坏、AMS1117坏、短路换线、换芯片、查短路芯片发热电源接反、短路、芯片坏立即断电查电源极性SWD连不上接线错、BOOT0高、读保护检查接线、BOOT0接地、解除保护晶振不起振负载电容不对、晶振坏换电容、换晶振串口乱码晶振频偏、波特率错调负载电容、检查波特率复位键无效按键坏、电容太大换按键、换100nF电容独家避坑技巧焊好的第一块板子先不要焊STM32芯片只焊电源部分上电测3.3V。确认电源正常后再焊芯片。这样如果电源有问题不会烧芯片。我见过太多人一口气焊完上电冒烟芯片和稳压芯片一起报废。8. 从原理图到实物我的实操体会画完原理图只是第一步PCB布局才是真正考验经验的地方。我自己的习惯是电源走线尽量粗至少20mil因为电流虽然不大但粗走线能降低压降和噪声。晶振走线尽量短包地处理下方不走其他线。SWD接口放在板边方向朝外方便插调试器。去耦电容放在芯片背面通过过孔连接节省正面空间。打样回来后先目测检查有没有虚焊、短路然后用万用表测3.3V和GND之间的电阻正常应该是几百欧姆到几千欧姆。如果接近0欧姆说明有短路先别上电。上电后先测电压再测晶振最后连调试器。这个顺序能帮你快速定位问题在哪一级。最后分享一个小技巧如果你手头没有示波器可以用STM32的MCO功能把系统时钟或者晶振时钟从PA8引脚输出然后用频率计或者另一块单片机测量。这样即使没有专业仪器也能判断晶振是否工作。这块STM32F103C8T6小系统板虽然简单但它是你进入嵌入式世界的第一块跳板。把它的原理图吃透后面不管换什么芯片、做什么项目你都能快速上手。硬件设计没有捷径多看、多画、多测经验自然就来了。
返回列表