把STM32的JTAG和SWD接口关闭后,再次打开JTAG和SWD的方法

2019-12-27 18:43发布

本人在调试过程中发现PB3连接在一个按键上了和JTAG接口冲突了,
便立即使用
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);
  2. GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
复制代码

以上两句话,禁用JTAG 和SWD  ,PB3按键立即调试正常,但是再烧录程序时就哭了,烧录不进去了,单片机成砖了

经过查找解决方法,
1.有人建议使用ISP通过串口烧录程序,但是我这不可行,因为ISP串口没引出来



经过摸索,找到了一个方法
就是将BOOT0 拉高后,继续接上JLINK 发现JTAG和SWD 就都可以恢复调试了,

非常简单有效,不用ISP了



解释一下原因:BOOT0接低电平,单片机启动后默认从用户程序区启动,用户程序区是有以上的
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);
  2. GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
复制代码两句话起作用呢,是不能通过JLIKN和SWD调试的
但BOOT0 接到拉高后程序默认从系统存储器启动的,没有执行以上两句话,所以JTAG和SWD接口是可以使用的。
希望给遇到同样问题的人,提供一个解决办法,不要像我一样了。

最后,
GPIO_Remap_SWJ_JTAGDisable 是使能SWJ,禁用JTAG
GPIO_Remap_SWJ_Disable 是全部禁用
说一下以上两句话的区别之处




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。