在国民技术群里,经常有朋友不小心禁用了SWD调试接口,导致无法连接到芯片的情况。然后也有群友搞不清楚这种情况下如何解决。现在我们来复现一下问题,并尝试解决。
现在我打开了N32WB03x的GPIO案例工程,在工程代码里添加了禁用SWD接口的代码(将SWD接口初始化为输出模式)。
/**
* @brief Main program.
*/
int main(void)
{
/* Initialize Led1~Led2 as output pushpull mode*/
LedInit(LED1_PORT, LED1_PIN);
LedInit(LED2_PORT, LED2_PIN);
/* Disable SWD */
LedInit(GPIOA, GPIO_PIN_4);
LedInit(GPIOA, GPIO_PIN_5);
/*Turn on Led1~Led2*/
LedOn(LED1_PORT, LED1_PIN);
LedOn(LED2_PORT, LED2_PIN);
很好,在烧录程序并重启设备后,再次烧录程序失败了,可以开始了,提示如图。
方案一、例如国民的其他芯片,是带Boot引脚和ISP程序的。这些芯片是可通过配置Boot引脚,在重启时进入ISP下载模式。进入ISP下载模式后,即可使用SWD烧录新的程序,或者用ISP下载工具烧录新的程序进去。
方案二、使用OpenOCD配合脚本清空Flash
确保你的daplink固件支持JTAG/SWD接口。
将JTAG/SWD连接器插入到芯片的JTAG/SWD接口上,并将daplink插入到计算机上。
使用OpenOCD等支持JTAG/SWD的调试工具连接到daplink。
在连接成功后,使用OpenOCD等调试工具运行以下命令清空flash:
reset halt
flash erase_sector 0 0 last
reset
其中,reset halt用于暂停芯片的执行;flash erase_sector用于擦除芯片的flash存储器,0表示擦除第0个扇区,last表示擦除最后一个扇区;reset用于复位芯片。
在国民技术群里,和官方技术人员沟通后得知,可以通过简单调整keil的debug配置,解决这两种情况下的芯片烧录问题。配置步骤如下(详细步骤看图片):
配置完成后,点击烧录按钮,就可以顺利烧录程序啦。
其实在keil的帮助文档里搜索reset,可以在34567各种调试器的帮助文档里看到下面这段内容。已经说明了,under Reset选项是用于错误配置SWD引脚时使用该配置。
The Connect selection controls what happens when the µVision debugger connects to the target device.
Normal — just stops the CPU at the currently executed instruction after connecting.
with Pre–reset — applies a hardware reset(HW RESET) before connecting to the device.
under Reset — holds the hardware reset(HW RESET) signal active while connecting to the device. You may use this option when the user program mistakenly disables the JTAG/SW interface.
除了上面的办法,其实也有一个办法能烧录(不需要配置keil的debug选项),就是先按住开发板的RESET按钮,然后点击keil的烧录按钮,在0.5秒后松开RESET按钮,就可以顺利烧录啦。本人测试过几次,成功几率50%。其实也就是让keil烧录开始时立即复位mcu。
本帖最后由 walker2048 于 2023-5-11 15:55 编辑