#技术资源#
在使用MCU的过程中,在开发环境正常已正常搭建(在Keil、J-Link驱动、packet包都已正确按照的情况下)、且可以正常烧录代码、正常运行程序的情况下,由于调整硬件电路、或者调整代码,在使用过程中遇到了无法识别J-Link、能识别但是无法烧录,或者烧录其它的简单代码可以运行,烧录自己编写的代码无法正常运行,以下总结了可能的异常情况及处理方法。 都是些基础的情况,然而实际应用中,会遇到各种各样的奇葩问题,光以下几点还远远不够。
1 自己的板子无法识别J-Link,用其它的板子可以识别J-Link1.1 检查MCU最小系统是否正常 具体排查问题点 | | | 如果电压是3.3V,可以使用万用表测量到3.32V | | 对照最小系统电路,常见的稳压电容、滤除高频噪声信号的电容是否按推荐电路设计 | | 复位引脚电压是否为高电平、复位电路是否是按照手册常规电路 | | Boot0引脚连接GND(虽然不会影响识别J-Link,也一起附加检查) | | HSE时钟电路是否按照参考电路设计(如果有使用的话,也附加一起检查) | | |
1.2 检查J-Link的复位引脚和MCU的NRST引脚是否正常连接在keil中点击识别MCU、或者烧录的时候,JTAG会产生一个复位信号,如果一上电就立刻运行低功耗代码,或者一上电就立刻运行把调试引脚都配置为GPIO模式的代码,该复位信号复位MCU,在程序运行前识别J-Link。 如果该JTAG的复位信号未连接MCU的复位信号,又是一上电就运行上述提到的代码,可手工按键复位,然后立刻擦除Flash中的代码。擦除MCU Flash后,可识别J-Link。
2 能识别J-Link但是无法烧录 具体排查问题点 | | | 选择MCU对应的型号、对应的Flash烧录文件烧录 | | a 可通过J-Flash的解除写保护 b 调整Boot引脚,从系统存储区启动,连接ISP软件,擦除选项字节中的写保护 c 编写“擦除修改选项中的写保护”代码,将代码烧录至SRAM运行(比较麻烦,建议使用上述2中) |
3 能烧录,但是烧录后无法正常运行 具体排查问题点 | | | (1)超频情况下 例如,超频到120MHz时,需要配置4-5个Flash的等待周期 (2)降频情况下 例如频率降低到48MHz时,先进行时钟复位,Flash等待周期需要重新配置为1,而实际代码忘记配置。 | | 例如,明明定义了10个成员变量的数组,在读写时超过10个,此时会进入HardFault_Handler。 | | 例如:调用的函数中定义了大的数组,但这个数组的范围大于栈的大小,程序在运行过程中可能会栈异常,进入HardFault_Handler。 可在startup_apm32f10x_hd.s文件中,结合MCU的SRAM大小、全局变量和静态变量的占用空间、程序中定义的局部变量代销调大Stack_Size。 |
|