刚入嵌入式这行的朋友,一开始大多把精力放在C语言、单片机、RTOS、Linux驱动这些软件层面的东西上,但真到了做项目、调板子、看别人开源方案的时候,最先拦路的往往是“嵌入式原理图”。原理图是嵌入式硬件设计的核心交付物,也是软硬件工程师之间沟通的“通用语言”。不会看原理图,你连一个LED应该接在哪个引脚、一个串口为什么收不到数据都很难定位。
这篇文章就聚焦一个事儿:拿到一张嵌入式原理图,应该按什么顺序看、看哪些东西、怎么把图里的信息和代码、调试对应起来。我尽量用最接近实际项目的方式来讲,不堆术语,以STM32F103C8T6最小系统板、H桥电机驱动、DDR4内存这类常见的图为例子,从零把你领进门。适合正在学嵌入式的学生、准备从软件转硬件的开发,以及所有想自己画板子、调板子的创客。
1. 原理图到底在表达什么
1.1 先弄明白电路图的“语法”
很多新手拿到原理图,第一反应是试图按照PCB板上的物理位置去找器件,结果越看越晕。这里必须先把一个观念纠正过来:原理图不是平面布置图,它表达的是电气连接关系,不是物理位置关系。它更像是装修时用的水电线路图,告诉你哪根管接到哪个插座、哪个开关控制哪盏灯,但并不代表墙里两根线真的走在一起。
原理图里最基础的元素就是“线”和“符号”。直线表示导线,两个点被导线连在一起意思是“在电学上等电位”。弯弯曲曲的东西是器件符号,比如电阻、电容、芯片,每个符号上的引脚都有编号和名字。原理图阅读能力,本质上就是在大脑里把这些符号和导线翻译成“某芯片的第几脚,通过某网络,连到了另一个芯片的第几脚”。
还有一个关键点:原理图上的器件摆放顺序通常按照“信号流”来组织——输入在左,输出在右,电源在上,地在下。拿一张典型的最小系统板原理图来看,左上角往往是USB座或电源输入,中间偏左是稳压芯片,右上角是晶振,中间大块就是MCU,MCU右边伸出去的是排针或接口。这个阅读习惯养成之后,速度会快很多。
1.2 看懂网络标号是第一步
原理图复杂的部分在于:并不是所有连线都真的画出来。比如整个板子上有几十个芯片都需要3.3V电源,不可能从电源芯片拉一根线绕遍全图。这时候就引入了“网络标号”(Net Label)。
网络标号是一段文字,比如VCC、3V3、GND、UART1_TX、PA0。规则只有一条:名字完全相同的网络标号,在电气上是连通的,哪怕它们画在不同的页面上。你可以把它们想象成用了同一条“无线信道”,虽然图上看不到线,但它们确实是同一根线。
这个规则太重要了,我几乎每次带新人都会强调。以后你拿万用表测板子,发现一个3.3V的芯片引脚居然有电压,另一个网络标号同样叫3V3的引脚却没电压,先别急着怀疑原理图,大概率是板子有断线,或者某个焊点虚焊。
新手容易踩的坑就是“看起来差不多”的网络名。3V3和3.3V不是同一个网络,VBAT和VDD也不是同一个网络,GND和AGND更不能随便统一。原理图设计软件做电气规则检查(ERC)时,也不会自动帮你模糊匹配。所以读图时遇到网络标号,一定要一个字符一个字符地对清楚。
1.3 电源和地为什么总是“到处都是”
看原理图时你会发现,VCC、VDD、GND这些符号反复出现,而且经常不直接连线。有些环境里,电源和地是用特殊符号表示的,比如“电源端口”“地端口”,软件里默认这些都是全局网络,所有同名端口无论在图纸哪个位置都是连通的。
所以读图时要有一个“电源树”思维:整个板子上有几路电源,每一路从哪里来,经过哪个稳压器,最后变成几伏,供给哪些芯片。这是后面排查故障、估算功耗的基础。很多原理图第一页就是电源页,把整板的电源网络梳理得清清楚楚,目的就是让读图的人先建立全局观。
2. 拿到一张原理图,先看这四样东西
2.1 先找图框、标题栏和页面清单
不管图纸是PDF、OrCAD还是Altium Designer工程,先别急着放大看某个芯片,第一步是数清楚一共有多少页,每页大概讲什么。正规原理图右下角有标题栏,标了项目名称、版本、设计者、日期,最重要的是“页号/总页数”,让你知道手中的文件是完整的还是缺页的。
这里插一个近期很多人在群里问的典型问题:OrCAD导出的PDF原理图,页脚显示第1页,第二张也显示第1页,页码全部重复,导致打印和查阅时根本分不清顺序。这个问题的根源通常是绘图时未正确设置每一页的Page Number,或者在导出时未勾选顺序选项。解决方法是:在OrCAD的.dsn文件中每一页原理图属性里把页号改成1、2、3……重新生成PDF;AD中则使用Smart PDF向导时确认勾选“按照原理图顺序编号”。这个问题看似小,但真实项目里图纸一多,很容易被搞懵。
拿到完整图纸后,我习惯先翻一遍页面清单,心里记个地图:第一页电源,第二页主控,第三页存储器,第四页接口……后面要查哪个模块,就直接翻到对应页,效率高很多。
2.2 找核心芯片,圈出“主角”
一份嵌入式原理图的核心通常只有一个主角:MCU(比如STM32F103C8T6)、MPU(比如i.MX系列)、FPGA(比如AXU15EGP这类嵌入式处理器开发板上用的Zynq UltraScale+),或者是蓝牙/WiFi模块。找到主角的方法是看页数最多、引脚最多、图幅最大那块。
把核心芯片圈出来后,先别急着看细节,先回答三个问题:
- 这款芯片需要哪几路电源?
- 它需要怎样的启动/复位条件才能跑起来?
- 它对外提供哪些通信接口(UART、I2C、SPI、USB、以太网)?
对刚开始学的人,我强烈推荐找一块STM32F103C8T6最小系统板的原理图来当第一张精读图。这块板子器件少、结构典型、网上资料铺天盖地,读懂了它,再去看复杂的开发板就有基础了。
2.3 按功能模块把电路切成几块
一张几十页的原理图如果直接通读,人的脑子很快会宕机。正确打法是“分而治之”,把整张图按功能切成若干模块。一般可以分成:
- 电源模块:输入接口、防反接、稳压器、滤波电容、指示灯。
- 主控模块:MCU/MPU最小系统,包括供电、复位、时钟、启动配置。
- 存储模块:Flash、SRAM、DDR、eMMC。
- 通信接口:USB、UART、CAN、Ethernet、RS485。
- 传感与执行:GPIO外设、ADC采样、电机驱动、继电器。
每看一个模块时,只关注这个模块与其他模块的连接点,不要被无关细节带跑。用一个笨但有效的方法:用彩笔或PDF标注工具,把不同模块用不同颜色框出来,框完你就发现一张复杂的图被拆成了若干张“小程序”,每块单独都能看懂。
2.4 建立引脚到信号的映射表
这是很多工程师工作中经常做,但新手教程很少提的技巧:建立一张“引脚对照表”。表的列是:芯片引脚编号、引脚名称、原理图上的网络标号、连接去向、功能备注。
比如STM32F103C8T6的PA9引脚,网络标号是USART1_TX,去向是板载USB转串口芯片的RXD引脚,功能备注“调试串口输出”。这张表建好后,写代码时查CubeMX配置、调试时查信号方向、画PCB时查引脚封装,全靠它。
有些人觉得记在脑子里就行,我劝你别省这个功夫。芯片引脚动辄几十上百个,你不可能全记住。而且建表的过程本身就是一次精读,比翻来覆去盯图有效十倍。
3. 从最小系统读懂一张典型原理图
3.1 STM32F103C8T6最小系统怎么读
最小系统板之所以叫“最小系统”,是因为它把MCU跑起来所需的电路压到了最少。我们来拆一下一张典型的STM32F103C8T6核心板原理图,看看每个部分为什么存在。
电源部分。主芯片需要3.3V供电,板上一般有USB的5V输入,经过一颗AMS1117-3.3或RT9193之类的LDO降到3.3V。要注意的是MCU有多个电源引脚,VDD、VDDA、VBAT都要分别接3.3V,每个电源引脚旁边通常配一个100nF(0.1uF)的去耦电容。这个电容的作用是就近给芯片提供高频电流、滤除电源噪声,必须尽量靠近芯片引脚放置,这是原理图和PCB设计里的基础素养。VBAT引脚如果不用外部电池,一般直接接3.3V,而不是悬空,否则RTC和备份寄存器无法工作。
复位电路。NRST引脚通过一个10kΩ电阻上拉到3.3V,同时接一个100nF电容到GND。上电瞬间电容充电,NRST被拉低一段时间,之后被电阻拉到高电平,MCU复位结束开始运行。这就是典型的RC复位电路,时间常数约1ms,足够让MCU稳定复位。
时钟电路。STM32F103C8T6一般外接8MHz晶振作为HSE(高速外部时钟),晶振两个引脚各接一个约20pF的负载电容到GND。负载电容的选择要参照晶振数据手册,不是随便取的,选错会导致起振困难或者频率偏差。另一个32.768kHz晶振是给RTC用的,属于可选配置,不是所有最小系统都带。
启动配置。BOOT0引脚通过一个10kΩ电阻下拉到GND,BOOT1一般悬空或下拉。这样MCU从Flash启动,也就是正常运行用户程序。如果BOOT0拉高,就从系统存储器启动,可以进入ISP下载模式。新手如果发现自己程序烧不进去、或烧进去不运行,可以先量一下BOOT0电平。
下载调试接口。现在大多数核心板用SWD接口而非古老的JTAG,只需要SWDIO、SWCLK两根线加GND,三根线就能下载调试。这也是很多开源项目只引出4Pin调试口的原因。读图时找到SWDIO和SWCLK的网络标号,一路追到排针,就知道该往哪里接ST-Link或J-Link了。
3.2 核心板控制LED亮灭这类入门例子的读图顺序
很多人的第一个实验是“点灯”。热搜词里也有“STM32C8T6核心板控制LED亮灭的原理图”,下面我就以这个为例,演示正确的读图顺序。
第一步,在原理图上找到LED符号。LED在图上是一个二极管符号,有三角箭头和一条横线表示PN结,旁边两个小箭头表示发光。第二步,看LED的阳极(正极)接的是谁,阴极(负极)接的是谁。
常见的接法有两种:一种是把LED阳极接电源3V3,阴极经限流电阻接到MCU的GPIO引脚,这时GPIO输出低电平点亮;另一种是LED阳极经电阻接GPIO,阴极接地,GPIO输出高电平点亮。两种接法对应到代码里就是电平相反,不看清原理图直接抄代码,灯是肯定点不亮的。
第三步,看限流电阻的大小。假设LED正向压降VF=2V,工作电流选5mA,电源3.3V,那限流电阻就是(3.3-2)/0.005=260Ω,工程上取330Ω或470Ω都行。如果电阻取1kΩ,电流只有1.3mA,灯会明显偏暗。这不是让你死记公式,而是让你理解元器件数值是“算出来的”,不是随手画的。
3.3 数据手册与原理图配合看
原理图只告诉你MCU的某个引脚连接到了哪里,但没告诉你这个引脚是什么功能。想知道PA9可以复用成USART1_TX还是TIM1_CH2,必须去查STM32F103C8T6的数据手册(Datasheet)或参考手册里的引脚功能复用表。
读引脚时重点看几类信息:引脚名(PA9)、默认功能(GPIO)、复用功能AFIO(USART1_TX等)、是否5V容忍(FT标识)。5V容忍的意思是,这个引脚可以直接接5V逻辑电平,不需要电平转换。STM32F103的大部分I/O都是FT引脚,但也有一部分不是,接5V会损坏芯片。这个信息原理图上不会写,必须靠手册。
数据手册里还有一个经常被忽略的图是“Pinout”,就是芯片封装引脚图。它按物理位置画出了每个脚的编号和功能,看这个图能建立“引脚在芯片上的实际位置”与“原理图符号位置”的对应关系,对后续用示波器探头去点引脚、飞线调试非常有用。
4. 按电源网络把全板串起来
4.1 电源树是原理图的“大动脉”
如果说信号线是原理图的神经,那电源网络就是大动脉。我读任何一块板子,都是先从电源入手,把整块板子的供电路径画出来。这个“从输入到各个负载的供电路径”就是电源树。
一块典型的开发板电源树长这样:USB或DC座输入5V,经过一颗DC-DC降压到3.3V,给MCU、传感器供电;同时3.3V再经过一颗LDO降压到1.8V,给某些DDR或模拟前端供电。5V这一路可能还直接给电机驱动、LED灯带等大电流负载供电。
读电源树的步骤是:先找电源输入口,看它经过哪些保护(保险丝、防反接二极管、TVS管),再到稳压器,再看稳压器的输入输出电容和反馈电阻,最后看各个负载芯片的电源引脚。每一步都确认电压对不对、电流够不够、纹波要求能不能满足。
用LDO(如AMS1117)和DC-DC(如MP1584、TPS5430)的区别也要心里有数。LDO是线性降压,简单便宜、纹波小,但压差大电流大时发热严重;DC-DC是开关降压,效率高适合大电流,但电路复杂、纹波相对大。原理图上看到电感和大容量电容成对出现,基本就是DC-DC;看到一个小三端器件加两个电容,大概率是LDO。
4.2 用电源域判断“这个模块能不能工作”
一个模块不正常,很多情况下是它的电源没供上,或者电压不对。这个排查思路在原理图阶段就能形成:先看这个模块的电源引脚接的是哪一路,这路电压正常吗?去耦电容容量够吗?地回路完整吗?
高频数字电路尤其要关注去耦电容的布局。原理图里每个芯片电源引脚旁边通常并联多个电容,比如100nF+10uF的组合,分别负责高频和低频滤波。如果图上只有容量、没有给出摆放要求,那你只能默认“尽量靠近引脚”。有些芯片的数据手册会明确要求“每个电源引脚必须接一个0.1uF电容,位置距引脚不超过3mm”,这时候原理图检查时就得盯紧。
还有一个很容易踩的坑是模拟地与数字地。很多混合信号板卡原理图上能看到AGND和GND两套地网络,它们之间通过磁珠或0Ω电阻在单点连接。这样做的目的是把数字开关噪声和模拟小信号隔离开,防止ADC采样被干扰。初学者千万不要为了省事直接把两种地在原理图里画在一起,否则ADC精度会惨不忍睹。
4.3 快速估算整板电流需求
看原理图时顺手估算整板电流,能帮你判断稳压器选型是否合理。方法很粗暴:把每一路负载的典型工作电流加起来,留出至少30%裕量,再和稳压器的额定电流、散热能力对比。
比如STM32F103C8T6跑在72MHz时,自身功耗大约50mA左右;板载LED按5mA算,有4颗就是20mA;某个传感器模块标称最大30mA;USB转串口芯片大约10mA。加起来大约110mA。如果电源用的是AMS1117-3.3,它能稳定输出1A,当然绰绰有余。但如果你把电源换成一颗只有100mA的电荷泵,那显然设计就有问题。
这个估算方法对排查还很有用:板子上电后电流远超预估,说明有短路或过流元器件;电流过小,芯片可能没工作、处于复位或掉电状态。这种“先估后量”的习惯,能让你在做硬件调试时更有底。
5. 通信接口与特殊模块的读图方法
5.1 UART、I2C、SPI在原理图上的识别方式
嵌入式板上最常见的三类通信接口,在原理图上都有很明显的命名套路。你先通过网络标号判断,再去芯片手册确认,基本不会错。
UART(串口)的网络标号常见为USART1_TX、UART2_RX、DEBUG_TX等。关键规则是:设备A的TX要接设备B的RX,交叉连接。很多人第一次飞线调试时把TX接TX、RX接RX,结果数据死活出不来。看原理图时如果发现TX、RX直接同名连在一起,要格外小心是不是设计错误。
I2C只有两根线:SCL(时钟)和SDA(数据),网络标号通常是I2C1_SCL、I2C1_SDA。I2C是开漏结构,所以必须要有上拉电阻,一般在1kΩ到10kΩ之间。原理图上看到SCL、SDA分别接了一个电阻到电源,那是I2C的标配。如果图上有多个I2C设备挂在同一条总线上,各个设备的地址要靠硬件配置引脚区分。
SPI用到至少四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。在原理图上,CS往往标注为SPI1_CS、FLASH_CS、LCD_CS等。读SPI部分时要特别注意,很多外设用到的并不是标准4线,而是“3线+某个控制脚”,这时候要把控制脚和它对应的功能一起看,避免漏接。
5.2 H桥驱动电路这个经典模块怎么读
H桥是电机驱动里的经典拓扑,热搜词里反复出现,确实值得单独拆一下。一张H桥驱动电路原理图,比如用四个MOS管或三极管搭的电机驱动,读图顺序是这样的。
先找到电机接口,通常是两个端子,标注MOTOR+、MOTOR-或M+、M-。然后看这两个端子分别接在哪两个管子之间。H桥的意思是四个开关管组成“H”形,电机相当于H中间的一横,左上右下导通时电机正转,左下右上导通时反转。
读图时有几个重点。一是看每个开关管旁边是否并联了续流二极管(或MOS管内部的寄生二极管是否满足要求)。电机是感性负载,关断瞬间会产生反向电动势,没有续流回路会击穿管子。二是看控制端是怎么接的,用的专用驱动芯片(比如L298N、DRV8833、BTN7971)还是分立器件加三极管电平转换。三是看逻辑输入和功率电源是不是共地,控制信号的地你如果不和驱动板的地接在一起,MOS管是无法可靠开关的。
H桥还有个概念叫“死区时间”:同一侧上下两个管子绝不能同时导通,否则电源直接短路烧毁。专用驱动芯片内部有死区控制,分立方案就要软件保证。看原理图时如果发现驱动芯片有DT引脚(Dead Time)或配置电阻,那一定是在设置死区时间,软件上也要配合。
5.3 高端内存和FPGA这类复杂原理图的特别提醒
现在很多嵌入式处理器已经到了可以跑Linux或裸机多任务的水平,板上往往会带DDR颗粒,比如DDR4。很多初学者拿到含DDR4的原理图就发怵,这很正常,但也不是完全没法入门。
读DDR4原理图,第一件事不是看每根线的网络名,而是先找一组概念:地址线、命令线、控制线、数据线、差分时钟、供电、终端电阻。DDR4的DQ数据线一般是8位或16位一组,CBA0~CBA7这样命名;地址线是A0~A15;控制线有CS、RAS、CAS、WE等。
DDR读图的关键是注意差分对。CK和CK#是一对差分时钟,DQS和DQS#是数据选通差分对。原理图上它们通常画在一起,命名也成对出现。另一个重点是终端电阻,DDR4地址命令线末端常常接VTT终端电阻网络,原理图上能看到一排排电阻接同一个电源网络。
FPGA这类的器件原理图更复杂,引脚动辄几百上千个。我的建议是先看芯片厂商提供的功能框图(Block Diagram),建好“逻辑功能块”的概念,再回来一张一张看原理图页面。不是每根线都需要马上看懂,先从电源、时钟、复位、配置这几个“命脉”入手,一步步扩大认知范围。
6. 常见问题与排查技巧实录
6.1 原理图和PCB对不上,问题出在哪
原理图是设计源头,PCB是根据原理图生成的,但在真实项目里“图实不符”的情况时有发生。原因通常是改了原理图之后没有重新更新PCB,或者PCB里器件的封装与原理图符号不对应。
比如原理图上某颗电容用的是0603封装,PCB上却放了一颗0805,两颗同样容值的电容位置对不上。再比如原理图里网络标号改了名字,但没有重新导入网表,PCB上还是旧网络名,于是布线时耍了半天,实际电气连接早就断了。
规避方法就一条:养成“改完原理图必须重新生成网表并更新PCB”的习惯。Altium Designer里叫Design → Update PCB Document,立创EDA里是“设计→更新PCB”,OrCAD配合Allegro则是在Project Manager里重新导出网表。每次更新后跑一遍DRC,检查未连接引脚数是否为0。
6.2 看原理图时几个低级但致命的错误
第一个最容易犯的:把“没画线”当成“不连接”。很多芯片引脚在没有网络标号、也没有线的情况下,不代表悬空,可能是“不连接(NC,No Connect)”即工厂内部已经处理。但也可能是你漏看了某个拐角处的网络标号。建议在没有把握时,用原理图工具的“高亮网络”功能点一下引脚,看看它到底连到了哪里。
第二个是引脚方向弄反。接LED、二极管、电解电容这类极性元器件时,丝印或原理图符号看得不够仔细,正负极接反,轻则电路不工作,重则烧器件。特别是稳压芯片的输入输出引脚,不同型号的引脚排列可能不一样,比如AMS1117和RT9013虽然都是SOT-223封装,引脚功能却不相同,接错就是冒烟。
第三个是忽略“未连接”标记。正规原理图里,故意不连接的引脚会画一个叉号或标注NC。如果你在图上看到一个引脚既没有线也没有网络标号,还没有NC标记,那大概率是设计者漏了。这种引脚在检查时必须一个个确认,否则打样回来就傻眼。
6.3 用AD或立创EDA检查原理图的实用操作
如果你用的是Altium Designer,做完原理图后一定要跑一遍ERC(Electrical Rule Check)。在菜单栏选择Project → Compile Document,然后查看Messages面板。重点看有没有Error级别的告警,比如“Single Net”(网络只有一个引脚连接)、“Net has multiple drivers”(多个驱动源冲突)、“Unconnected Pin”(引脚未连接)。
立创EDA也有类似功能,在“设计→检查”下可以设置规则检查,把“输入引脚悬空”“输出短路”等选项打开,跑一遍能发现大部分低级错误。
还有一个非常常见的操作问题:AD20导出原理图PDF只有部分区域,打印出来缺一块。这通常是因为原理图页面里存在偏离图纸边界的器件或注释,Smart PDF导出时只按边框截取。解决方法是全选原理图中的器件,看看是否有对象超出图纸边界,把边框外的内容移回图纸内,或者调整图纸尺寸。OrCAD导出PDF页码重复的问题前面说了,基本也是页面属性没设对,统一改一遍页码即可。
6.4 拿到陌生板卡无法快速定位怎么办
如果你的手上只有一块未知板卡和一张含糊的原理图,甚至只有PCB实物,怎么快速定位某个器件或某个网络?这时候工具就要上场了。
最实用的是万用表的蜂鸣档,用来测通断。比如你想确认板子上某个排针的第3脚是不是连着MCU的PA9,就把万用表一只表笔点排针,另一只表笔去刮MCU旁边的过孔或测试点,蜂鸣器响就说明连通。这个办法虽然土,但在没有原理图高亮工具时非常管用。
再看板卡上的丝印。正经设计的PCB会在每个器件旁边标注位号(R1、C2、U3)和网络名关键测试点(TP1、TP2)。对照原理图找到位号,就能反查位置。有些板卡还会在电源输入口附近标注VIN、5V、3V3等字样,直接就是电源树的入口。
最后强烈建议买一台带电池的示波器,至少可以帮助查看时钟引脚是否有振荡波形、复位引脚上电时是否有一个由低到高的跳变。很多MCU不动,根本不是程序问题,而是晶振没起振、复位没释放,用示波器量过再改代码,思路会清晰很多。
7. 看完原理图之后还要做什么
7.1 从原理图到代码:引脚配置表
原理图阅读的最终目的,往往是为了把硬件信息落到代码里。比如你用STM32CubeMX配置引脚时,需要知道每个外设的引脚是哪个、有没有复用冲突、是推挽输出还是开漏输出、需不需要内部上拉下拉。这些信息其实原理图阶段就已经确定了大半。
我自己写驱动前有一个固定动作:把原理图里的引脚映射表转换成代码注释头。比如:
/* * 引脚映射表 * PA9 - USART1_TX -> 板载USB转串口 CH340 RXD * PA10 - USART1_RX -> 板载USB转串口 CH340 TXD * PB0 - LED1 -> 高电平点亮 * PB1 - LED2 -> 高电平点亮 * PB5 - 按键 -> 内部上拉,按下为低电平 */这段注释看起来简单,但调试时能省大量时间。你不会因为忘了引脚定义而去反复翻原理图,别人接手代码时也能秒懂硬件接线。
GPIO配置时也有几个容易被忽略的点。如果原理图上某个引脚外接上拉电阻,代码里就不需要使能内部上拉;反之,原理图悬空且无外部上拉,代码里就要考虑内部上拉,否则输入浮空会导致电平不定。开漏输出用在I2C这类总线上是必须的,但用在普通LED驱动上就不合适。
7.2 真实调试思路:先电源、再时钟、后通信
硬件调试的经验顺序和读原理图的顺序其实高度一致。遇到一块板子不工作,先测电源,拿万用表确认各电源域电压正常;再测时钟,示波器看时钟引脚有无波形;最后才测通信,看串口数据、I2CACK、SPI波形是否正确。
这个顺序能避免很多白费功夫。比如串口没输出,你去查驱动代码、查波特率配置,搞了半个小时,结果发现是3.3V电源那路电容虚焊,芯片根本没跑起来。如果一开始就量一下电源,几秒钟就能发现问题。
“先电源,再时钟,后通信”这个原则,也对应着读原理图的三个层次:电源树、最小系统、外设接口。你读图时按这个层次建立了心智模型,调试时自然就有章法。
7.3 给初学者的一条学习路线建议
如果你刚入门嵌入式,我推荐的学习路线是这样的:先复习基础的电路知识,比如欧姆定律、戴维南定理、电容充放电、三极管和MOS管开关特性,不用太深,但概念要清楚。然后找一块STM32F103C8T6最小系统板的原理图,对照本文的方法精读一遍,顺便把图中每一个电阻电容的作用都用自己的话写下来。接着可以照着抄画一块最小系统板,在立创EDA或AD里画原理图、布局、布线、打样,亲手让LED闪烁起来。之后再挑战电机驱动、传感器采集这类模块,逐步拓宽。
网上很多人会把“嵌入式学习路线”排成一长串:C语言、数据结构、单片机、操作系统、Linux驱动……但老实说,很多人学了几个月代码,连一块最小系统板都看不懂,遇到硬件问题就卡住。我个人的建议是,把原理图阅读这一点提早纳入学习路线,哪怕不打算做硬件,对软件调试的帮助也很大。
最后分享一点个人体会
掌握了读原理图这项技能之后,最大的变化是看板子不再发怵。无论是拿到了一个陌生的开发板,还是看到一个开源项目的硬件文件,拿起原理图先建电源树、找主角芯片、切功能模块、拉引脚映射表,这套流程走一遍,脑子里自然就有了这块板的轮廓。
一个小技巧送给大家:把常用的核心板原理图打印一份贴在工作台旁边,随手拿笔标注自己关心的问题,比在屏幕上圈圈点点更直观。我当年就是这样把一张STM32F103最小系统板原理图翻得卷了边,上面写满了各种电压值、电流估算和调试笔记。现在回头看,正是那张纸帮我打下了扎实的硬件底子,后面再复杂的DDR4、FPGA、高速信号,也都是一块一块啃下来的。