把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 是全部禁用
说一下以上两句话的区别之处




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
47条回答
creep
1楼-- · 2019-12-27 22:26
不错的经验,感谢分享!!
gentlerain
2楼-- · 2019-12-28 02:38
谢谢分享。
前些天也遇到过类似的问题。在关闭JTAG后,PB3依然无法控制输出电平。最后发现
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
一定要放在
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
的后面,否则JTAG关闭的操作有可能会失败。
wangrb
3楼-- · 2019-12-28 03:05
用镊子短路复位电容,点下载同时松开电容也行
colgatechen
4楼-- · 2019-12-28 06:06
wangrb 发表于 2016-4-27 22:56
用镊子短路复位电容,点下载同时松开电容也行

这个简单,在用户程序启动前下载
xinbihui
5楼-- · 2019-12-28 09:59
 精彩回答 2  元偷偷看……
vc9181
6楼-- · 2019-12-28 10:51
不错学习了

一周热门 更多>