这是我在做单片机最小系统板时候碰到的问题之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题下面是我在遇到问题后的一些检查,排除问题的过程本人小菜鸟一个,文章中如有错误和不足还望各位大佬指正和补充。
事情是这样的本人做了一款32单片机最小系统板(先叫它老大),茬老大出来之前的前五个月我用相同的PCB板焊了一款用在毕设上面,那个是能正常工作的板上有个小负载,LED灯想让这个灯闪烁。代码昰没有问题的因为下载到从网上买的单片机是正常工作的。用JLink下载到自己做的板子上也是能下载进去的但是不工作。怀疑晶振没起振用示波器测量晶振引脚对地为一个高电平,而控制那个灯亮的管脚一直是高电平买回来的板子晶振引脚对地为一个正弦波,控制灯的引脚波形为方波
找到问题出现在板子时钟没起振,到底是时钟电路哪个地方出问题了还未得知首先想到的是换个晶振,8M的晶振换了(第┅次换)换过后,程序烧写进去复位按键按下,灯不亮接着考虑晶振旁边的匹配电容的问题,将匹配电容由22pf换成了20pf,仍然是不工作没想通是为什么。于是将剩余的器件和板子拿出来想焊另外一块对着排查结果焊接的时候,没控制好力道把引脚弄弯了,芯片引脚勾肩搭背了开始谈恋爱了,狂撒一波狗粮这样肯定不行啊,月老不能乱点鸳鸯谱啊于是,用热风枪把整个芯片吹下来了棒打鸳鸯,结果焊盘不愿意了藕断丝连,板子铜线扯出来了整个板子废了,老二胎死腹中
从老二上面拆下来的芯片牺牲的老二
老二挂了,造老三之前剩余的芯片已经用完了,从师兄那里顺回来一片芯片老三很快造出来了。制造中的老三旁边的那个是老大,哈哈~
老三生下来很健康晶振起振,不过老大和老三除了晶振的匹配电容20pf一样外,晶振和芯片虽说名字一样但是不是从一个盒子里面拿出来的。于是将老大嘚晶振换成和老三一样的晶振(第二次换)在要拆老大的晶振的时候,发现上一次拆的时候造成晶振引脚的一个焊盘断了一半就是晶振引腳和单片机引脚的连接断掉了。怀疑是这个问题于是将老大的晶振输入引线上的绿油刮掉一点,用锡焊接在晶振腿上但是结果却是和の前一样。
老大板子背面的晶振管脚
第二次换晶振和老三的一样。然而结果是并没有什么用还是不起振。说明原因不是在这里最后師兄劝我不要太执念的时候,我走了一步我不太想走的路换芯片。当时买的芯片是20多元一片老二已经挂了,如果是老大芯片的问题叒要挂一个芯片。这够我吃上两三顿黄焖鸡了所以,在拆老大的大脑的时候内心是不情愿的。但是我想让这个板子能工作于是又去師兄那里顺手牵羊(自己买的用完了)牵过来一片。
初次焊接上去下载器找不到芯片,这个问题我知道出在哪PA13和PA14引脚焊接问题,于是用烙鐵再打磨一下再次下载的时候,程序下载进去了复位,翠绿色的LED灯闪起来了利用控制变量法逐一排查,最后查到芯片本身上至于芯片内部出现了什么问题就不得而知了,也有可能我焊接的时候电烙铁对芯片做了些什么不可告人的秘密最终导致芯片挂了。
个人对无源晶振不起振的原因总结如下:
2、 晶振的匹配电容的容值不合适
3、 控制芯片质量有问题。
4、 板子电路有问题
5、 晶振离芯片距离太远。
总体来说用Python来写程序使用的资源通常会更多,因为要有Python的执行环境才可以这是因为Python是解释型语言,需要在解释执行器上运行就是每一行代码先解释成机器语言,然後再执行同时Python的数据类型要高级得多,处理数据类型也远比C更复杂不过吧,这样允许不详细了解硬件会让编程变得非常方便,就是執行效率有点影响
但C就不一样了,它是编译型的语言编译完就全部是机器语言,可以直接扔给单片机运行不过因为直接操作寄存器硬件,需要有一点硬件基础才可以在不同的内核中比兼容性比Python差一点。
另外举个例子虽然可能是个别现象。用OpenMV3(单片机是STM32F767系列也是MicroPython編程),当连续使用sensor.snapshot()读图像的时候uart.read()读数据会卡死5-6秒才会返回,估计就是MicroPython运行环境占用大量资源造成的