ARTICLE DETAIL

资讯详情

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

STM32F103C8T6最小系统Altium Designer设计指南

STM32F103C8T6最小系统Altium Designer设计指南 1. 为什么选STM32F103C8T6搭配Altium Designer来画最小系统STM32F103C8T6这颗芯片在嵌入式圈子里算是老面孔了LQFP48封装、72MHz主频、64KB Flash、20KB SRAM价格便宜、资料铺天盖地拿来练手或者做小批量项目都挺合适。而Altium Designer作为原理图和PCB设计的常用工具元件库管理、网络标签、ERC检查这些功能做得比较顺手两者搭配起来画一块最小系统板是很多人入门硬件设计的必经之路。所谓最小系统说白了就是让芯片能跑起来所需要的最少外围电路——电源、复位、晶振、启动配置、下载接口这几块凑齐了芯片就能正常烧录程序并运行。这篇内容主要面向刚接触硬件设计的朋友也适合从51单片机转过来想自己画板子的开发者。我会把从建工程、准备库文件、放置元件、连线到ERC检查的完整流程拆开讲同时把每个外围电路为什么要这么设计、参数怎么算、坑在哪里都说清楚。哪怕你之前没碰过Altium Designer跟着走一遍也能把这块板子的原理图落地。提示本文以Altium Designer 20及以上版本为操作基准低版本菜单位置可能略有差异但核心逻辑一致。2. 最小系统的电路构成与设计思路拆解2.1 最小系统到底最小到什么程度很多人第一次画最小系统板容易犯一个错误——把能加的外设全加上去结果画出来的板子又大又贵调试还容易出问题。最小系统的核心目标是让芯片能工作而不是让芯片能演示所有功能。按这个标准必须包含的模块只有五类电源模块3.3V供电含稳压电路和去耦电容复位模块NRST引脚的上拉电阻和滤波电容时钟模块8MHz外部高速晶振HSE启动配置BOOT0和BOOT1引脚的电平设置调试接口SWD两线接口SWDIO、SWCLK至于USB接口、LED指示灯、按键这些属于可选项。我个人的习惯是保留一个电源指示灯和一个用户LED调试的时候能直观看到板子有没有上电程序有没有跑起来其他能省就省。这样一块板子做下来BOM成本能控制在很低的水平焊接难度也低。从设计思路上讲最小系统的布局要围绕芯片本身展开。LQFP48的引脚分布是四周排列电源引脚和地引脚分布在芯片两侧晶振引脚在固定位置设计原理图的时候按功能模块分区画后面转PCB的时候走线会顺很多。如果一上来就把所有元件堆在一起网络交叉乱成一团后期查线会非常痛苦。2.2 芯片引脚功能必须先摸清楚画原理图之前有一件事必须做——把STM32F103C8T6的引脚定义过一遍。这颗芯片48个引脚实际可用的GPIO有37个剩下的被电源、地、复位、晶振、BOOT占用。几个关键引脚需要特别注意引脚类型引脚名功能说明处理方式数字电源VDD_1/2/33.3V数字供电每个引脚配100nF去耦电容模拟电源VDDAADC/DAC模拟供电经磁珠或电感隔离配100nF1uF数字地VSS_1/2/3数字地就近接地模拟地VSSA模拟地单点接地复位NRST低电平复位10K上拉100nF到地主晶振PD0/PD1OSC_IN/OSC_OUT8MHz晶体接口配20pF负载电容启动BOOT0启动模式选择10K下拉可跳线拉高调试PA13/PA14SWDIO/SWCLK引出排针这里有个容易被忽略的点VDDA和VSSA即使在不用ADC的情况下也建议接上因为芯片内部某些模块会参考这个电源域。如果偷懒不接可能出现芯片工作不稳定甚至无法启动的情况。我见过有人画板子为了省事把VDDA直接悬空结果程序烧进去跑不起来查了半天才发现是电源问题。另外BOOT0引脚要注意它决定芯片上电后从哪里启动。BOOT00从主闪存启动正常运行程序BOOT01从系统存储器启动也就是进入出厂bootloader。一般设计用10K电阻下拉到地同时预留一个跳线帽或者测试点方便需要的时候拉高。BOOT1在F103C8T6上对应PB2正常运行时也要下拉到地。3. Altium Designer实操从建工程到元件摆放3.1 工程创建与库文件准备打开Altium Designer第一步是新建工程。菜单路径是File → New → Project → PCB Project给工程起个名字比如STM32F103_MinSystem选好保存路径。工程建好之后右键工程名依次添加Schematic原理图文件和PCB文件。养成一个习惯所有相关文件放在同一个文件夹里工程文件、原理图、PCB、库文件都在一起后期打包或者迁移不会丢文件。接下来是库文件的问题。Altium Designer自带Miscellaneous Devices.IntLib和Miscellaneous Connectors.IntLib两个集成库里面有电阻、电容、排针这些通用元件画最小系统够用了。但STM32F103C8T6这颗芯片自带的库里没有需要自己解决。三个途径从官网或第三方下载现成的库ST官方曾提供过Altium格式的元件库网上也能找到热心网友整理好的STM32库文件直接加载即可。用Altium Designer的IPC向导生成Tools → IPC Compliant Footprint Wizard输入封装参数自动生成但原理图符号还是要自己画。手动建库新建SchLib文件自己画矩形符号、放置引脚、定义属性。虽然费时间但最可控引脚编号和名称不会出错。我一般推荐第二种加第三种结合封装用向导生成保证尺寸准确符号手动画保证引脚定义符合数据手册。建库的时候有个细节——引脚编号必须和实际芯片一一对应Name可以写功能名如PA0Designator写引脚号如10。画符号的时候按端口分组排列左边放电源和晶振右边放GPIO下面放调试接口这样连线的时候一目了然。注意从网上下载的库文件一定要核对引脚定义尤其是电源引脚和晶振引脚的位置。我之前用到过一个流传很广的库PD0和PD1的引脚编号标反了画完板子打样回来才发现晶振不起振只能飞线补救。3.2 电源电路绘制与去耦电容布局电源部分是最小系统的根基。如果输入是5V需要一颗LDO稳压到3.3V常用的有AMS1117-3.3、LM1117-3.3这类。画原理图的时候输入端放一个DC座或者Type-C座加一个电源指示灯LED串联1K电阻然后进LDO。LDO的外围电路参考数据手册输入端接10uF电容输出端接10uF电容这是为了保证稳压器稳定工作。具体的电容量不是随便定的AMS1117这类LDO对输出电容的ESR有要求用钽电容或者低ESR的电解电容比较稳妥。如果用普通的陶瓷电容建议至少22uF起步否则可能出现自激振荡。STM32F103C8T6有三个VDD引脚引脚24、36、48每个引脚旁边都要放一个100nF的去耦电容。这三个电容的布局有讲究——在原理图上画的时候放在芯片符号附近转PCB之后要尽量靠近对应的VDD引脚走线越短越好。去耦电容的作用是滤除电源上的高频噪声给芯片提供一个稳定的局部电源。如果离得太远走线电感会让滤波效果大打折扣芯片在高频工作时可能出现复位或者死机。VDDA引脚9的处理稍微特殊一点。它给芯片内部的模拟电路供电对噪声更敏感。常规做法是VDD经过一个磁珠或者10uH电感再接到VDDA同时VDDA旁边放100nF和1uF两个电容一个滤高频一个滤低频。VSSA引脚8单独走一根线到地在芯片底部或者靠近芯片的位置和数字地单点连接。3.3 复位电路与启动配置的细节复位电路看着简单但也有讲究。NRST引脚内部有上拉但阻值比较大为了可靠复位外部再接一个10K上拉电阻到3.3V然后接一个100nF电容到地。这个RC组合的时间常数是1ms足够芯片完成上电初始化。如果电容太大复位时间过长芯片启动会变慢如果太小可能滤不掉电源上的毛刺导致误复位。按键复位是可选项。如果加就在NRST和地之间并联一个轻触开关按下时把NRST拉低。画原理图的时候注意开关的两个引脚不要接反虽然机械开关理论上不分方向但布局时按实际焊接方向画转PCB之后不会出现走线绕圈的情况。BOOT0引脚需要10K下拉电阻到地同时预留一个两针的排针需要进入bootloader的时候用跳线帽短接拉高。BOOT1PB2同样10K下拉到地。这两个电阻的位置要靠近芯片走线尽量短避免引入干扰导致启动模式误判。这里再提醒一句BOOT0和BOOT1的状态是芯片上电瞬间锁存的上电之后再改变电平不会影响当前运行状态除非手动复位。所以调试的时候如果程序跑不起来先检查这两个引脚的上电电平是不是正确。3.4 晶振电路与负载电容计算晶振电路是最小系统里最容易出问题的部分。STM32F103C8T6支持4到16MHz的外部高速晶振最常用的是8MHz。晶振本身是一个机械谐振器需要配合负载电容才能起振。负载电容的计算公式是CL (C1 × C2) / (C1 C2) Cstray其中CL是晶振数据手册标称的负载电容常见值有12.5pF、20pF等C1和C2是实际接在晶振两端的电容Cstray是PCB走线的杂散电容一般取3到5pF。如果晶振标称负载电容是12.5pF取Cstray为3pF那么代入公式反推C1和C2大约在18到22pF之间所以常规设计用20pF是合理的。画原理图的时候C1和C2分别接OSC_IN和OSC_OUT到地晶振跨接在两个引脚之间。如果要加RTC功能还得配32.768kHz的低速晶振接PC14和PC15负载电容一般是6pF或者12.5pF选型的时候要看晶振手册。注意晶振的负载电容不要随便用22pF或者30pF这种常用值一定要看数据手册。负载电容不匹配会导致频率偏移虽然芯片还能工作但通信时序可能出问题比如串口波特率偏差过大导致通信失败。4. 完整实操流程从元件放置到ERC检查4.1 元件放置与网络连接的操作方法工程和库准备好了正式进入原理图绘制。Altium Designer放置元件的快捷键是P → PPlace Part或者直接在右侧的Components面板里搜索。每放置一个元件都要检查其Designator位号有没有重复Value值是不是正确。电阻的Value写阻值如10K电容写容值如100nF晶振写频率如8MHz。连线有两种方式Place → Wire快捷键P → W是普通的物理连线Place → Net LabelP → N是网络标签。对于芯片和周边元件的连接我建议多用网络标签少用长线。比如VDD网络在芯片每个VDD引脚旁边放一个VDD的网络标签LDO输出也放一个VDD标签Altium Designer会自动认为它们连在一起。这样原理图看起来干净后期修改也方便。电源和地用Net Label的时候要注意Altium Designer有专门的Power Port快捷键P → O比如VCC、GND、3V3。这些符号自带全局连接属性比普通网络标签更规范。我习惯把3.3V网络统一命名为3V3地网络命名为GND然后在原理图里用Power Port标注。对于SWD接口PA13SWDIO和PA14SWCLK各引出一个网络标签连到一个4针排针上另外两针分别是3.3V和GND。排针的位号写J1Value写SWD或DEBUG。如果板上还要接串口可以把PA9TX和PA10RX也引出来做成一个4针或6针的调试口。4.2 原理图编译与ERC错误处理图画完了先别急着高兴编译一下看看有没有错误。菜单Project → Compile PCB ProjectAltium Designer会跑一遍电气规则检查ERC。常见的问题有几类错误类型含义处理方式No Driver网络没有驱动源检查是否有引脚忘记接电源或地Floating Net悬空网络给网络加标签或连接Duplicate Designator位号重复重新标注位号Unconnected Pin引脚未连接确认是否需要连接Net with Multiple Names一个网络多个名称统一网络命名No Driver这个错误新手最容易遇到通常是某个电源引脚忘了接去耦电容或者某个GPIO接了出去但没有标网络标签。还有一种是芯片的NCNot Connected引脚被误连了需要检查数据手册确认哪些引脚是真正的NC。编译完成之后建议生成一份BOM表Reports → Bill of Materials核对元件数量和参数。BOM里的位号、Comment、Footprint三列必须完整否则转PCB的时候找不到封装会报错。我一般会把BOM导出成Excel格式按位号排序逐个核对一遍确认没有遗漏或者错值。4.3 原理图转PCB前的封装检查原理图画完只是第一步转PCB之前必须确认每个元件都有对应的PCB封装Footprint。在原理图里双击元件在Properties面板的Footprint栏里检查。电阻电容用0402、0603还是0805根据自己的焊接能力决定芯片用LQFP48排针用HDR1X4这类。封装名称必须和PCB库里的名字完全一致大小写敏感。封装检查有个偷懒的办法Tools → Footprint Manager所有元件列出来一眼就能看到哪些没有指定封装。没有封装的元件会显示None逐个补上即可。都设置好之后Design → Update PCB Document把原理图同步到PCB如果有错误会弹出提示根据提示修正。提示转PCB之前记得给原理图做一次AnnotateTools → Annotation → Annotate Schematics把所有位号重新编号避免重复或者跳号。编号顺序按从左到右、从上到下排列PCB布局的时候元件位置会更有规律。5. 常见问题与排查技巧实录5.1 原理图画完芯片跑不起来怎么查这是最让人头疼的问题。硬件焊好了程序烧进去没反应排查的时候要从电源开始。第一步用万用表量VDD和VSS之间的电压正常应该是3.3V左右。如果电压不对检查LDO的输入输出和外围电容。第二步量NRST引脚电压正常应该是3.3V上拉如果一直是0V说明复位电路有问题或者按键短路。第三步用示波器或者频率计量OSC_IN和OSC_OUT正常应该能看到8MHz的正弦波或者方波。如果不起振检查负载电容和晶振焊接方向。还有一类问题是程序下载不进去。SWD接口的SWDIO和SWCLK接反了是最常见的错误对着引脚定义表核对一遍。另外如果芯片之前被设置成了读保护或者写保护SWD可能连不上需要用STM32CubeProgrammer解锁。BOOT0的状态也要确认下载程序的时候BOOT00如果误接成高电平芯片进不了主闪存启动SWD也可能连不上。5.2 Altium Designer使用中的高频坑用Altium Designer画图有几个坑我踩过不止一次。第一个是缓存问题。AD用久了之后有时元件库加载不出来或者界面卡顿这通常是缓存文件出了问题。清理方法是删除用户目录下的AppData\Roaming\Altium下的缓存文件夹重启软件重新加载。第二个是安装报错stream write error这个一般是安装包损坏或者权限不足用管理员身份运行安装程序关闭杀毒软件再试。第三个坑是原理图页码重复。如果工程里有多个原理图文件编译的时候提示page number都设成了1需要在原理图属性里手动设置每张图的页码或者用Tools → Annotation → Number Schematic Sheets自动编号。第四个是导出PDF只有部分区域这通常是页面设置问题在File → Page Setup里把纸张大小调大或者选择Fit to page选项确保整张图都在导出范围内。5.3 元件选型与国产替代的实操建议STM32F103C8T6这几年价格波动比较大很多项目开始考虑国产替代。GD32F103C8T6、CH32F103C8T6这些型号在引脚和功能上基本兼容但细节上有差异。比如GD32的主频可以跑到108MHz但Flash和RAM的访问时序不同CH32的外设寄存器地址有调整程序需要少量修改。画原理图的时候如果考虑替代方案建议在PCB上预留兼容封装电源和地的引脚布局完全一致这样换芯片的时候不需要改板。LDO的选择也是同理AMS1117是最常用的但静态电流偏大电池供电的项目可以换成HT7333或者XC6206这类低功耗LDO。晶振的话8MHz的无源晶振随便选但要注意负载电容匹配。去耦电容用普通的X7R陶瓷电容就行耐压值选16V或者25V容值100nF。最后说一个实操心得画原理图的时候每个功能模块之间留出足够的空白区域别全挤在一起。网络标签用醒目的颜色区分比如电源用红色、地用黑色、信号用绿色。这样后期查线的时候效率高很多别人接手你的图也能快速看懂。原理图是给别人看的也是给未来的自己看的画得清楚比画得快重要。
返回列表