最近遇到了两个电路调试的经历,一个是师弟的,另一个是隔壁实验室师兄的,他们提出了问题,我们一起交流,觉得收获还是挺大。
首先是师弟的一个入门项目:一块STM32F103ZET6的核心板的绘制。主控芯片+CH340+SWD+电源,就这么些个东西。

在打板之前我是看过原理图和PCB的,我认为没有问题。但是师弟把板子焊好之后,问题就出来了:下载不了程序,无论是CH340串口下载,还是SWD下载。
首先排查电源输出是否正确,5V与3.3V没有问题;后面再排查不出来问题的时候,我用示波器观察了波形,发现电源输出也是正确(这里有个伏笔)。
随后怀疑是芯片没有焊接好或者芯片本身有问题,让师弟重新焊了几遍,后面师兄也帮忙从一块验证过的板子拆下来芯片再焊了一次(确保芯片本身没有问题),无果。
到这里我其实有点纳闷了,照理说这个电路并不复杂,而且大多也是经过验证的很常见的STM32电路,为什么就会有问题呢?师弟说有可能是因为他的PCB有问题或者打板厂家工艺有问题。
我比较否定这种说法,我对他说:“板子出现问题,首先考虑自己的因素,原理图没有问题前提下,PCB只要DRC没有报错,晶振电路布得不离谱,一般就不会出现问题。更何况这只是一个STM32的低速板,可能有些设计会影响性能,但大多数情况下不会影响功能的正常使用;第二个,厂家工艺有问题这种事情还是不要再考虑了,如果嘉立创连个四层板都出问题的话,那也没多少PCB厂家能信任了”。当时已经挺晚了,我第二天还有去公司,所以我让他继续排查原理图的问题,后面再调试。
后面师弟再次找上我的时候,说程序能下进去了,但是“概率很低”,他是这样描述的:在下载的时候不断反复按唤醒按键,程序就能下载,但是得一点一点试,能不能下进程序完全是靠运气。但即便下进程序后,程序也没有正常运行,最简单的按键控制LED灯亮灭也没有办法成功(伏笔)。

首先我让他用示波器看一下,无源晶振是否起振。结果没有起振。在没有下载程序前,无源晶振是不会起振的(有源晶振就压根不用考虑这种问题,这也是有源晶振的优势),所以我在思考程序是否真的下进去了,毕竟现象也不对(伏笔)。我问师弟起振电容是否正确,他说没有印象了,他对起振电容的容值可能不敏感,我让他重新焊接两个22pF的电容,以确保不是元器件的问题。换完之后还是没有现象。
我想起师弟在下载的时候,反复按唤醒键才能下载。我之前并没有用过这个东西,于是去查一下芯片手册:这个引脚是芯片休眠的一个功能,只要给一个上升沿就能接触休眠。难道是芯片一直在休眠?(后面才知道这个休眠功能也是需要程序调用的,这里没有调研清楚,以为直接是物理控制)我想就验证一下是否是这个的问题,于是把按键拆了,直接将两个焊盘连接在一起,相当于一直按下去。结果晶振起振了(伏笔),那就说明不是晶振的问题。
但是程序现象还是不对呀。然后下载了其他程序,比如串口回环,不对,又去验证了下CH340的电路,这也是我写上一篇什么是握手信号文章的原因,其实这里已经有点偏了(因为确实调试不出来)。还是只有看原理图。
最后还是师弟自己检查出来了,结果真是令人恍然大悟啊(苦笑)。问题出在这里:

乍一看,没有什么问题,很简单很常用的稳压电路,但是仔细一看,R2的阻值。
居然是10K......师弟在画原理图的时候,把别人的 10R 看成 10K 了,他可能还不喜欢这种阻值的表达,所以焊接的时候也直接焊的10K的电阻,换上10R的电阻一切就都好了。那下面来解释一下为什么会有这种现象发生。
首先这个VDDA是个什么东西,可以查看一下芯片的数据手册
VDDA的作用是:为STM32内部所有模拟电路提供模拟电源,包括ADC、DAC、复位模块、PLL外部时钟源。
所以这是一个很重要的电源引脚。其电压必须是在2.0~3.6V之间,而且必须与VCC保持很接近,工程上一般都是用同一电压,中间用一个磁珠或者0Ω电阻隔离。
那照上图使用10K的电阻,VDDA的电压实际是多少呢?我们计算一下:
VDDA = 3.3V - *10KΩ
那么只需要知道的值就可以计算得出了,但数据手册并没有给出关于这部分的电流,但其实估算一下也能发现问题。当
只有0.3mA的时候,VDDA也就只有0.3V了,电流再大一点点也就直接为0了。所以这就是板子没成功的原因。
那么现在讨论一下之前的伏笔,也尝试解释其中的一些问题。
伏笔:最开始检查到电路的时候,我确实忽略了电阻的阻值,并且以前也没有想过VDDA的作用以及其供电的规范,所以没有从一开始就排查出来问题;值得思考的是,当我把按键的两端连上时,也就是直接给芯片引脚提供一个3.3V电压,此时晶振是起振的,并且程序也是在这个时候下进去的,那就可以思考一下PA0与VDDA的关系了。但是PA0输入数字域,与VDDA应该并无关系,并且晶振也开始起振,为什么会有这个现象呢?我猜测可能与内部结构有关,这样无意中给芯片供电了。(说实话,我并没有理解,如果阅读的你知道思路或者答案欢迎在评论区讨论)
总结一下:
①VDDA的设计应与VCC保持一致,最好使用同一电源输出,并用磁珠隔离。
②排查问题时,还是重点观察电源部分是否正确,包括每个电源。不要总想着芯片良品率问题与电路板制造工艺。
③抛开成本来谈,可以多试试有源晶振,无源晶振不起振的原因实在有太多了。
④MCU的唤醒功能需要程序驱动,并非只靠硬件驱动。
先写师弟的这一个调试经历吧,后续再写师兄的。
5908

被折叠的 条评论
为什么被折叠?



