常见问题

当前位置:主页 > 服务支持 > 常见问题 >

无法识别J-Link、无法烧录、烧录后无法运行的应对措施总结

作者: admin 时间:2023-04-04 来源:未知
摘要:在使用MCU的过程中,在开发环境正常已正常搭建(在Keil、J-Link驱动、packet包都已正确按照的情况下)、且可以正常烧录代码、正常运行程序的情况下,由于调整硬件电路、或者调整代码...

在使用MCU的过程中,在开发环境正常已正常搭建(在Keil、J-Link驱动、packet包都已正确按照的情况下)、且可以正常烧录代码、正常运行程序的情况下,由于调整硬件电路、或者调整代码,在使用过程中遇到了无法识别J-Link、能识别但是无法烧录,或者烧录其它的简单代码可以运行,烧录自己编写的代码无法正常运行,以下总结了可能的异常情况及处理方法。
 
都是些基础的情况,然而实际应用中,会遇到各种各样的奇葩问题,光以下几点还远远不够。
 
1、自己的板子无法识别J-Link,用其它的板子可以识别J-Link

1.1检查MCU最小系统是否正常

具体排查问题点 具体方案
VDDA电压、VDD电压是否正常 如果电压是3.3V,可以使用万用表测量到3.32V
常见的电容是否连接上
对照最小系统电路,常见的稳压电容、滤除高频噪声信号的电容是否按推荐电路设计
复位电路 复位引脚电压是否为高电平、复位电路是否是按照手册常规电路
Boot电路 Boot0引脚连接GND(虽然不会影响识别J-Link,也一起附加检查)
时钟电路 HSE时钟电路是否按照参考电路设计(如果有使用的话,也附加一起检查)
JTAG电路 JATG电路是否按照推荐的设计

1.2检查J-Link的复位引脚和MCU的NRST引脚是否正常连接
 
在keil中点击识别MCU、或者烧录的时候,JTAG会产生一个复位信号,如果一上电就立刻运行低功耗代码,或者一上电就立刻运行把调试引脚都配置为GPIO模式的代码,该复位信号复位MCU,在程序运行前识别J-Link。
 
如果该JTAG的复位信号未连接MCU的复位信号,又是一上电就运行上述提到的代码,可手工按键复位,然后立刻擦除Flash中的代码。擦除MCU Flash后,可识别J-Link。

2、能识别J-Link但是无法烧录

具体排查问题点 具体方案
因为pack冲突,会显示无法下载 选择MCU对应的型号、对应的Flash烧录文件烧录
Flash读写保护,无法下载
a、可通过J-Flash的解除写保护
 
b、调整Boot引脚,从系统存储区启动,连接ISP软件,擦除选项字节中的写保护
 
c、编写“擦除修改选项中的写保护”代码,将代码烧录至SRAM运行(比较麻烦,建议使用上述2中)

3、能烧录,但是烧录后无法正常运行

具体排查问题点 具体方案
Flash等待周期异常
(1)超频情况下
 
例如,超频到120MHz时,需要配置4-5个Flash的等待周期
 
(2)降频情况下
 
例如频率降低到48MHz时,先进行时钟复位,Flash等待周期需要重新配置为1,而实际代码忘记配置。
数组越界访问
例如,明明定义了10个成员变量的数组,在读写时超过10个,此时会进入HardFault_Handler。
栈设置的太小
例如:调用的函数中定义了大的数组,但这个数组的范围大于栈的大小,程序在运行过程中可能会栈异常,进入HardFault_Handler。
 
可在startup_apm32f10x_hd.s文件中,结合MCU的SRAM大小、全局变量和静态变量的占用空间、程序中定义的局部变量代销调大Stack_Size。

[向上]