STM32 JTAG失效恢复

昨天调试一块STM32L151的板子,用的是JlinkOB,调试时,出现下面的错误:
JLink Error:could not start CPU core.
JLink Warning:CPU could not be halted
这里写图片描述
这个错误出现的原因是,程序中有修改JTAG端口(PA13,PA14)的语句,当把JTAG当做普通IO口时,JLink就不能返回调试信息,JLink就读不回相应寄存器的值了。

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);    //完全失能JTAG/SWD

解决思路:
我们刚才既然把“错误”的程序写入了用户Flash,那么我们就用“正确”的程序去覆盖之间的程序。
解决方法:
1.修改BOOT0=1,BOOT1=0,STM32从system memory启动,这时用串口将程序下载进去,程序就会写入用户Flash,把之前“错误”的程序覆盖掉。
2.若BOOT已被固定,可使用芯片的RST(不是JTAG的RST),在Keil中,注意左下角的Scan,当扫描JLink SW接口的时候,我们使芯片一直处于复位状态,然后JLink就能被识别出来,这时我们把程序下进去,就可以覆盖之前的程序。这里要注意一点,JLink在芯片复位时被识别出来后,过一段时间就会又识别不出来,我们应该尽快将程序烧录进去。
3.用带有rst引脚的JLink,使用SEGGER自带的J-Link STM32 Unlock工具解锁STM32
这里写图片描述

这里写图片描述

还有关于JTAG引脚需不需要上下拉电阻的问题,由于JTAG口是和GPIO口复用的,GPIO模块是集成了上下拉电阻的,那么JTAG也是同样有着内部上下拉,复位时的上下拉情况如下:
● JNTRST: Internalpull-up
● JTDI: Internal pull-up
● JTMS/SWDIO: Internalpull-up
● TCK/SWCLK: Internalpull-down

对于有些调试器省去了RST引脚,21ic论坛的香水城版主是这样说的:
调试器拉一个信号控制目标MCU的复位引脚是个推荐的做法。抛开调试器不说,通常上位机和下位机之间除了数据通信之外,最好能够直接控制下位机复位,在出错或异常时进行直接控制。回到调试器来说,比如目标MCU上电就进入了低功耗或关闭了JTAG引脚,那么我的调试器在连接的时候,先把目标MCU复位,使得能够立刻在目标MCU运行起来到进入低功耗模式或关闭JTAG引脚之前,控制目标MCU的JTAG模块,并将目标MCU halt住。

【Reference】
http://bbs.21ic.com/icview-706970-1-1.html

转载于:https://www.cnblogs.com/season-peng/p/6713507.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 JTAG是一种调试接口,用于与STM32单片机进行调试和编程。在调试仿真中,可以使用JTAG的Cortex-M3方式,也可以使用SWD方式。JTAG方式需要20个管脚,而SWD方式只需要2个管脚,因此在对板子空间要求严格、I/O口资源紧张的项目中,SWD方式更加有利。\[1\] SWD模式相比JTAG模式在高速模式下更加可靠,特别是在大数据量的情况下,JTAG下载程序可能会失败,而SWD的失败几率较小。因此,推荐在使用JTAG仿真模式的情况下直接使用SWD模式,前提是你的仿真器支持。\[2\] 在STM32单片机中,JTDO和JNTRST是JTAG引脚复用,一般最好使用SW-DP调试端口,只需要JTMS/SWDIO和JTCK/SWCLK这两个引脚,这样可以节省有限的IO资源。但是在复位后,JTAG和SW默认同时开启,即所有的JTAG端口都被系统保留,软件设置GPIO是不起作用的。要释放多余的JTAG端口,需要设置复用重映射和调试I/O配置寄存器(AFIO_MAPR),具体的设置可以参考ST的文档。\[3\] #### 引用[.reference_title] - *1* *2* [STM32 的 SWD调试模式](https://blog.csdn.net/wabil/article/details/50476986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32JTAG模式和SW模式](https://blog.csdn.net/Qinlong_Stm32/article/details/127097250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值