自己画了一块stm32f407板子,外部晶振用了25MHz,烧写了8MHz的程序,第一次烧写成功,第二次开始识别不到芯片,第一次烧写成功由于外部晶振为25Hz,芯片内频率计算器却是按照8MHz写的,所以得出最后的总线频率远高于168MHz,导致芯片锁死。无法使用SWD接口,问题是这块板子设计上只有一个SWD接口,并没有JATG接口。锁死后无法使用SWD接口识别芯片,也就无法烧写程序进行频率更改。本来可以通过boot0=1,boot1 = 0来使芯片从系统存储器来启动,再往系统存储器来烧写程序进行频率更改,但是原本设计的时候是想从主FLASH启动,所以把boot1悬空了,没有引出线,无法把boot1飞线接到GND,所以采用以下的方法:
解决方法:
原理是使用STM32 ST-LINK Utility识别芯片并擦除整个主flash,从而擦除掉原先的频率设定。
SWD接口是无法识别芯片的,但是如果先按住复位键,在点击connect之后松开复位键后可以识别到芯片,这里应该涉及到芯片锁死的电路设计,具体原因不知道,只是知道通过一个上升沿信号可以让SWD接口识别出芯片,识别出芯片后SWD接口可以正常使用,接下来就可以擦除整个主FLASH了,
地址为0x08000000~0x081fffff(stm32f407)。擦除后下载外部晶振为25MHz的程序就不会导致芯片锁死了。