手贱将STM32F103的SWD、JTAG接口remap禁止后单片机:stm32f103开发环境:keil uvision4烧写器:J-link,SWD接口使用STM32F103的PB3引脚作为GPIO口,但其默认功能为JTDO,需要remap。
Remap 中,使能GPIO_Remap_SWJ_JTAGDisable就可以了,这样是禁止JTAG,但保留SWD,因为板子设计用的是使用SWD接口进行烧写。
结果手贱,尝试了GPIO_Remap_SWJ_Disable,将整个SWD和JTAG都禁止了。
好吧,接下来就是程序运行完毕remap后,keiluvision4就不能再读取stm32的寄存器内容了,变量窗口的变量不能再查看了;想再重新烧写下、擦除下,提示错误,no cortex-m device,断电再上电,也不行,因为flash中的程序上电后自动运行,将SWD口禁止了。
网上查,解决方法是“将BOOT0脚和BOOT1脚接3.3V,这种方法是由RAM启动,所以之前你烧进去的程序是不会运行的,也就不存在JTAG被禁止”。
如果你的板子上做了BOOT 启动选择电路,那你就可以不用往下看了。
但略坑的是我的板子上的BOOT0已经直接接到GND了,总不能割线再飞线吧。
然后想到的就是NRST复位了。
但是,再次略坑的是板子上没有做手动复位电路,NRST 悬空在。
好吧,还好,NRST复位脚悬空在,而不是直接拉高。
比较幸运的是板子上焊接了一个拨码开关模块,开关ON时,接GND,开关OFF时,悬空。
接下来使用NRST来实现重新烧写。
飞线将NRST接到该开关,打到ON档,将NRST接GND。
板子上电,烧写时提示错误:cpudid not halt after reset(类似于这样,记不清)。
这是因为NRST一直为低,CPU一直为复位。
比较幸运的是,keil+J-Link还是比较执着,尝试一次不成功后,还尝试了第2、第3次等(具体几次不记得了,从output消息窗口可看出J-Link尝试了好几次)。