起因:
最近在做一个项目时,将一份STM32F103ZET6的外设原理图与一份STM32F103RET6的原理图合并成一份新的原理图,即用RET6的芯片,外设仍然是ZET6那份里面的。
现象:
板子焊接好后,使用SWD4芯下载程序,第一次下载成功了,但是程序没有运行,尝试debug看看程序运行情况,但却一直出错,打开后SETTINGs发现一直检测不到SWD,如下图:
采取的措施:
之前也出现过这个问题,首先考虑是jlink接触不良,重新换了一个,并且在其他板子成功下载,说明不是jlink的原因,看了别人的原因:第一种是A13、A14被当作普通IO口使用导致下载不了,但我根本没用到这两个口,此原因排除;第二种原因是没有配置A13、A14为Serial Wire,因此专门使用STM32CubeMX来设置,设置后仍然下载不了,此原因排除;
第三种原因说是芯片读写保护,但我的程序在另一块RET6的板子上可以运行,不会造成芯片保护,此原因排除。到这里所有的矛头都指向硬件。
原因找到:
因为是两份原理图拼在一起的,因此重新检查了一下原理图,因为两份原理图的地线标识不一样,看岔了没有及时发现,之后检查才发现芯片的地没有和电源以及下载口的地连起来,导致芯片只接了一个3.3V,飞了一根线后 可以正常下载程序。但为什么不接地第一次就可以下载呢?因为芯片内部没有程序?
因此在设计原理图的时候一定要细心!细心!再细心!尤其是拼接不熟的原理图时!
插曲:
在没有找到芯片不接地的原因之前,还进行了其他尝试,有以下现象供参考: