Skip to main content

2.1.20:Keil调试器出现故障?

2.1.20.1:提示 No Debug Unit Device found

原因:没有发现烧录器

1660532432303

处理方法:重新连接烧录器,确保烧录器连接正常,驱动连接正常,详情请看:

驱动异常如何处理

2.1.20.2:提示 SWD/JTAG Communication Failure

2.1.20.3:提示 RDDI-DAP Error

原因:识别不到芯片

1660533563586

1660533962331

解决方法:

确保烧录器和芯片烧录口连接正常,芯片没有开启高级保护或者烧录口被复用了,具体处理方法请查看:

芯片连接不上如何处理

2.1.20.4:提示 Not a genuine ST Device! Abort connection

原因:芯片不匹配

image-20210127141709355

解决方法:

确保工程所选型号与目标芯片匹配,具体方法请参考调试器提示设备不匹配

2.1.20.5:提示 Flash Timeout. Reset the Target and try it again.

原因:烧录失败

1660535442595

1660535456993

1660542935165

解决方法:

  • 确保芯片没有开启读保护和写保护,去除保护方法参考:

    解除读保护

  • 程序跑飞时或者芯片复位不成功时会导致烧录不成功,请重新连接芯片并确保调试器设置选项如下图所示,并且可以尝试将boot0引脚拉高后再进行调试;

    1660543307115

  • 更改调试时钟大小

  • 以上方法还是无法解决时请尝试使用Power Writer上位机软件进行擦除芯片后再使用keil进行仿真调试。

2.1.20.6:提示 Contents mismatch

原因:烧录成功,校验失败

1660546297998

排除问题:

确保flash算法参数正常,或者可以重新选择芯片型号进行更新flash算法设置:

1660546203391

1660546245934

2.1.20.7:调试过程中断线?

image-20221017173123144

如上图所示,MDK 擦除、写入、校验 都是通过的。但是在 Application running ... 之后,突然出现RDDI-DAP Error!

原因:程序中没有将IO 的调试功能打开,比如CubeMX 中默认调试功能是关闭的,如果直接生成代码去调试,就会出现此问题。

解决方法:在CubeMX 中,左侧,SYS->Debug 中打开 Serial Wire,如下图所示,然后更新代码。

image-20221017173423996

​ 如果直接在代码中,调整 调试模式。

image-20221017173459438

提示

其他的品牌和工具,也是类似处理,此类问题,都是因为 调试引脚没有配置为调试模式导致。

2.1.20.8:PowerWriter 能识别芯片,但MDK不行?

此现象原因跟上一个现象一致,由于芯片中有代码运行,禁用了调试口,PowerWriter 响应的效率比调试器要快一些,存在PowerWriter 能识别,但是MDK 失败的情况。

处理方法:

​ 使用PowerWriter 连接上目标芯片后,执行以下操作擦除所有数据:

  • 选项字节,恢复默认,然后写入。
  • 擦除Program Memory 程序空间数据。

执行以上操作后,再去MDK 中调试。

2.1.20.9:Watch 窗口变量不刷新或显示灰色?

数据没刷新的情况,是由于没有勾选 Periodic Window Update , 进入调试状态后,从菜单的 View -> Periodic Window Update 勾选此功能,调试器,Watch 窗口的数据将会实时刷新,如下图所示:

image-20221022112642140

变灰色的原因,在于编译器优化级别过高,导致实际生成的调试信息和源码断点位置不完全一致而出现同步的问题,此时可以通过调整整个项目的优化级别,如改为0级无优化后,源码断点位置和实际变量的访问完全一致,如下图所示:

image-20221022113055050

此外,可以单独调整部分源码的优化级别,在MDK 中通过源码文件(.c 、.cpp) 右键打开文件属性,单独设置文件的优化级别,如下图所示:

image-20221022113232228