干了五年嵌入式,从单片机做到ARM平台,经常被新手问:搞嵌入式开发到底要不要懂电路?我的回答很直接——要看你走多远。
写代码也能干活,但卡壳是早晚的事
如果你只是做点STM32的GPIO控制,点个灯、读个按键,用现成开发板和例程,确实不用碰电路。很多公司里也有分工,软件的人写代码,硬件的人画板子,各干各的。这时候你靠调库函数、查数据手册,照样能完成任务。
可一旦项目出了问题,比如串口通信乱码、ADC采样不准,或者设备莫名其妙重启,光看代码就傻眼了。这时候如果完全不懂电路,连万用表都不敢碰,只能等硬件同事来救场,效率低还容易背锅。
调试现场,懂点电路能救命
有次我在客户现场调试工控设备,程序烧进去后主控芯片不启动。第一反应是代码问题,反复检查启动文件和时钟配置都没错。后来拿示波器一测,发现电源电压只有2.8V,低于芯片要求的3.3V。再往前查,原来是板子上的LDO输入电容虚焊,导致压降过大。这种问题,不懂电路根本想不到是从电源入手。
还有一次,I2C总线上挂了三个传感器,总有一个读不出来。软件上反复改延时、换地址都没用。最后发现是上拉电阻太大,信号上升沿太慢,超出时序要求。把4.7k换成2.2k立马正常。这种细节,全在原理图里写着,但没人会专门给你讲。
看得懂原理图,开发才真正自由
当你开始自己选型、画板、打样,或者接手别人的烂摊子,懂电路就是基本功。比如你要接一个温湿度传感器,得知道它是开漏输出还是推挽,要不要加上拉;用SPI接口,得明白MOSI、MISO怎么对应,片选信号怎么控制。这些不是代码能解决的。
再比如,你写的代码里配置了PWM驱动电机,但电机一转就干扰单片机复位。这时候得懂去耦电容怎么放,电源路径怎么走,甚至要加磁珠隔离。这些知识不在编译器里,在PCB上。
不需要你会画电路,但得能看懂
我不是说每个人都得精通模拟电路、会算反馈环路。但最起码,电阻、电容、二极管、三极管的作用得知道;电源、地、信号线的走向能看明白;常见接口如UART、I2C、SPI的电平和连接方式要熟悉。拿到一张原理图,能找出MCU和外设之间是怎么连的,就足够应付大多数场景。
建议新手从看开发板原理图开始,比如正点原子或野火的资料,一边对照代码一边看硬件连接。你会发现,原来代码里的GPIOA_PIN5,对应的是原理图上的LED1,再串了个限流电阻接到地。这种联系建立起来,理解就立体了。
代码和硬件本就不该分开
嵌入式本来就是软硬结合的活。你可以暂时躲开电路,但想走得稳、走得远,迟早得补这一课。别等到半夜调试卡住,才发现问题出在一根没接地的线上。
所以答案很清楚:不一定非得会设计电路,但一定要懂基本电路。这不是加分项,是生存技能。