昨天调试一块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/SWD12
解决思路:
我们刚才既然把“错误”的程序写入了用户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住。
关键字:STM32 JTAG 失效恢复
引用地址:
STM32 JTAG失效恢复
推荐阅读最新更新时间:2024-03-16 16:13
STM32_ADC+DMA
ADC+DMA 下面来讲一下STM32的ADC应用。 先闲扯一点其他事情,是我自己的理解。 STM32的优点在哪里? 除去宣传环节,细细分析。 STM32时钟不算快,72MHZ, 也不能扩展大容量的RAM FLASH, 同样没有DSP那样强大的指令集。 它的优势在哪里呢? ---就在快速采集数据,快速处理上。 ARM的特点就是方便。 这个快速采集,高性能的ADC就是一个很好的体现, 12位精度,最快1uS的转换速度,通常具备2个以上独立的ADC控制器, 这意味着, STM32可以同时对多个模拟量进行快速采集, 这个特性不是一般的MCU具有的。 以上高性能的ADC,配合相对比较块的指令集和一些特色的算法支持, 就构成了STM32在电
[单片机]
贸泽率先独家备货STMicroelectronics的STM32 LoRaWAN 探索板
2017年2月24日 – 最新半导体和电子元件的全球授权分销商贸泽电子(Mouser Electronics) 即日起率先备货STMicroelectronics (ST)的STM32 LoRaWAN™ 探索板。这款新型探索套件与可从贸泽电子订购的Arduino兼容I-NUCLEO-LRWAN1 STM32 LoRa™扩展板一起作为一个平台,用于了解和评估基于LoRa和FSK/OOK 射频 (RF) 通信的解决方案。 贸泽电子独家备货的 ST STM32 LoRaWAN探索套件基于一体化开放式 Murata Type ABZ模块,支持低功率广域网(LPWAN) 和LoRaWAN 远程无线协议。Type ABZ模块包
[单片机]
linux搭建stm32开发环境
下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件 # mkdir libs src inc 将STM32F10x_StdPeriph_Lib_V3.5.0复制到libs目录下 创建Makefile.common 在主目录下创建 Makefile .common文件,这个是通用Makefile文件 #This file is included in the general Makefile, the libs Makefile and the src Makefile #Different optimize settings for library and sou
[单片机]
基于STM32设计的智能家居控制系统(华为云IOT)
1. 功能介绍 随着 物联网 技术的快速发展, 智能家居 控制系统 成为了人们追求便捷、舒适和安全生活的重要组成部分。为了满足用户对 智能 家居的需求,设计了一款基于华为云物联网平台的智能家居控制系统, 硬件 采用了 STM32 和 ESP8266 的组合,实现了设备的上云连接。 传统的家居控制系统存在一些不足,比如需要人工操作、无法实现远程控制等。而我们的智能家居控制系统,通过与华为云物联网平台的连接,可以实现远程控制各种电器开关,并且可以远程收集家里煤气、天然气、烟雾、光照度、温度湿度等信息,为用户提供更加智能化和便捷的家居体验。 智能家居控制系统具有以下主要特点和功能: 远程控制:通过与华为云物联网平台的连接,用户可以
[单片机]
基于STM32从零写操作系统系列---使用C语言
目的 C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C语言实现点亮LED灯。C语言与硬件是紧密连在一起的,结合芯片中的flash和sram,简单了解C语言。 要求 1.有一定的C语言基础 2.了解编译链接脚本 3.了解stm32F103的硬件结构 实验源代码在这下载,代码中有详细注释! 分析 1.首先了解硬件,如图 FLASH,就是存放.bin文件的地方。SRAM,用于存放程序的堆栈,全局变量。 2.了解链接脚本,如图: MEMORY,用于定义存储器范围。 AT rom,表示将对应的SECTION放置到rom中,即Flash中。 _data_start / _data_end,用
[单片机]
STM32 Usart 上电发送一个无效字符的问题
无论这么设置USart,上电后都会发送一个无效字符,这个是STATUS寄存器的上电初始值有问题造成的,Usart的发送数据寄存器有一个缓冲移位寄存器。并且发送有两个状态,一个是发送数据寄存器为空,一个是移位寄存器发送完成。上电后Usart的状态寄存器的发送完成位为0,造成了上电以后会始终会有一个值被发送,这个值就是发送移位寄存器中的值,而这个值有时候是0X00有时候是0XFE 。 要解决这个问题,在初始化的时候先初始化Usart,然后再配置Usart的GPIO位,就可以避免Usart上电发送一个无效字符的问题。 还有一种可能性,在上电后至端口初始化,STM32的I/O端口处于高阻状态,有些RS232转换芯片在输入端为高阻时
[单片机]
stm32 hal i2c 库读写sd3088时钟
前一版本的修正。 sd3008在每次通信开始0.5s做一次总线复位,不必考虑stm32的i2c Bug问题。 而且HAL库,是不是也应考虑到软件上补充这个Bug? 使用HAL_I2C_Mem_Read/Write,使得代码非常好看。模拟I2C方式,一字长蛇阵模样。 使用Freertos,读取时间、保存数据到用户SRAM,需要考虑Mutex对RTC时钟资源进行保护。 * SD3088时钟芯片 读写 * 文件 sd3088.h * http://git.oschina.net/maizhi/small-pellet-sove-control-system *作者 于 *版本 v1.1 */ #incl
[单片机]
基于STM32的智能电机保护器设计
0 引言 电机是工业生产领域中最主要的驱动源,如何有效地监控电机的运行状态,保护电机回路,提高电机的运行时间,减少电机故障,对工厂整体电网的运行十分关键。 电动机保护装置有很多种,目前使用得比较普遍的还是基于金属片机械式的热继电器,它结构简单,在保护电动机过载方面具有反时限特性。但它的保护功能少,无断相保护,对电机发生通风不畅、扫膛、堵转、长期过载、频繁启动等故障也不能起保护作用。此外,热继电器还存在重复性能差、大电流过载或短路故障后不能再次使用、调整误差大、易受环境温度影响而误动或拒动、功耗大、耗材多、性能指标落后等缺陷。 为响应国家节能减排的要求,采用基于微控制器的电子式电机保护器替代现有热继电器,具有广大的
[单片机]