[分享] 【国民技术N32WB031_STB开发板评测】禁用SWD后的正确解决方案

walker2048   2023-5-11 10:16 楼主

前言

在国民技术群里,经常有朋友不小心禁用了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);

很好,在烧录程序并重启设备后,再次烧录程序失败了,可以开始了,提示如图。

image.png  


常规开发板禁用SWD的解决方案

方案一、例如国民的其他芯片,是带Boot引脚和ISP程序的。这些芯片是可通过配置Boot引脚,在重启时进入ISP下载模式。进入ISP下载模式后,即可使用SWD烧录新的程序,或者用ISP下载工具烧录新的程序进去。

方案二、使用OpenOCD配合脚本清空Flash

  1. 确保你的daplink固件支持JTAG/SWD接口。

  2. 将JTAG/SWD连接器插入到芯片的JTAG/SWD接口上,并将daplink插入到计算机上。

  3. 使用OpenOCD等支持JTAG/SWD的调试工具连接到daplink。

  4. 在连接成功后,使用OpenOCD等调试工具运行以下命令清空flash:

reset halt
flash erase_sector 0 0 last
reset

其中,reset halt用于暂停芯片的执行;flash erase_sector用于擦除芯片的flash存储器,0表示擦除第0个扇区,last表示擦除最后一个扇区;reset用于复位芯片。

  1. 执行完上述命令后,你的芯片的flash存储器将被清空。

N32WB03x禁用SWD、或者进入睡眠状态无法使用SWD的正确解决方案

在国民技术群里,和官方技术人员沟通后得知,可以通过简单调整keil的debug配置,解决这两种情况下的芯片烧录问题。配置步骤如下(详细步骤看图片):

  1. 将开发板上的RESET-RST跳线用跳线帽连上(daplink的rst引脚和mcu的reset引脚,若不连接无法起作用,实在找不到跳线帽,可以临时把旁边的RX跳线帽拔过来用)
  2. 在keil里打开N32WB03x的工程,开始配置
  3. 点击Options for Target..图标
  4. 在弹出的窗口里点击Debug选项卡
  5. 点击Debugger旁边的setting按钮
  6. 在弹出的选项框左下角,点击Connect旁边的下拉菜单,选择Under Reset选项
  7. 点击各个选项卡的OK按钮保存配置
  8. 烧录设备

image.png   image.png   image.png   image.png   image.png  

配置完成后,点击烧录按钮,就可以顺利烧录程序啦。

 

image.png  其实在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 编辑

回复评论 (1)

跟着楼主学N32WB03x禁用SWD、或者进入睡眠状态无法使用SWD的正确解决方案

点赞  2023-5-11 21:51
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复