都遇到过这样的问题吧,自信满满的把程序下载到板子上,结果发现MCU居然没启动。
出现这个问题有很多原因,总结为以下五点:
第一,boot引脚电平不对,例如在GD32的MCU上,boot引脚决定了MCU的启动方式。通常boot0引脚下拉时是flash启动,如果boot电平不对就不会执行我们下载的程序了。
第二,NRST拉高了吗?NRST是MCU的复位引脚,如果复位引脚没有拉高,程序也不会启动。复位引脚一般和电源以及连接电路有关,电源上升到POR-2ms后NRST一般会拉高,如果没有拉高那还要进一步检查电源和电路。
第三,VDD和VDDA电压满足工作范围了吗?平时大家一般都关注VDD电压,但VDDA电压也很关键。我们需要确定VDD和VDDA都达到芯片的工作电压范围,才能让芯片正常运行。
第四,晶振和程序里的配置匹配吗?如果MCU超频了,那么也会上电后跑飞导致不启动的现象,当我们的晶振大小大于程序配置不一致时,就会出现我们以为主频正常,但芯片实际已经超频的离谱了。
第五,固件和实际芯片型号或类型不匹配。以我们的老朋友GD32F303为例,我们打开固件库会看到GD32F30x固件库实际对应了GD32F303、F305、F307不同芯片类型。通过宏定义选择,它们在时钟上就存在一定区别,固件配置错的话程序可能就是在时钟配置里。
如果还没有找到问题,那么就大胆的进入debug模式,千万不要对自己的程序太自信,真想甚至可能就是打错一个字母 。