mcu烧录报错汇总
[TOC]
以下报错发生在使用 keil 时
1. cannot access memory
2. Flash Download failed
以上两个错误是我同时遇到的,该错误发生的具体情况:
在一开始时,单片机是能够正常烧录的,之后修改代码,重新烧录过程中,可能是 JLink 接线松动或 JLink 供电不稳定,导致烧录失败,继续烧录,会出现重新更新 JLink 固件的情况,在有一次更新固件之后,再进行烧录,就持续报出以上两个错误。
该问题经过搜索,可能与两个因素有关:1.烧录速率,2.烧录时复位。
在我将 SWD 烧写频率降至 200K,并在烧录时手动按复位键后,烧录成功。
3.Can not attach to CPU
JLink info:
1 | * JLink Info: InitTarget() start |
第一种可能:jtag 或 swd 口被复用了,烧录时就需要复位芯片以使引脚回到复位后功能,即重新回到 jtag 或 swd 功能,如果板子烧录口上有RST,则按照提示设置复位后连接即可,如果没有则在点击烧录按钮前按下板子复位键,出现烧录进度条后松开
第二种可能:板子上只有 swd 烧录口,设置 Debug 选项时没选择 swd。此情况是我在删除了 .uvoptx 文件后发生,删除该文件后 Debug 配置被还原成默认 jtag 烧录方式了
第三种可能:原因还未知,但换了一个工具可以成功烧录,怀疑是原工具也有问题(但工具之后又能正常使用)
4.调试退出时卡死
根据网上的说法,在中文路径下,退出调试时,只要工程有断点,必定卡死,如果退出调试时清除所有断点,即使工程路径存在中文,也不会卡死。
英文路径下卡死可能跟之前存在的配置文件有关。
解决方法:
- 工程路径不要有任何中文
- 如果执行完步骤1还是卡死:则将工程目录下的
Project.uvoptx
文件删除,然后重新编译整个工程。Keil会自动生成一份新的.uvoptx
文件的。
删除 .uvoptx
后的其它影响:
- 注意重新编译后需要重新配置 Debug
- 调试时变量不实时变化,需要勾选 View->Periodic Window Update
5.STM32F103C8T6移植FreeRTOS内存不足的问题
错误信息:
1 | linking... |
芯片官网的架构图上是 SRAM 是 10Kb,按照芯片手册来说应该是 20Kb。
在 FreeRTOSConfig.h 配置文件中有设置 RTOS 要使用的内存大小,用 configTOTAL_HEAP_SIZE 宏定义的。
将 configTOTAL_HEAP_SIZE 宏修改为 10K
1 |
6.Contents mismatch
Contents mismatch at: 08000000H (Flash=FFH Required=00H) ! Too many errors to display !
错误信息:
1 | Contents mismatch at: 08000000H (Flash=FFH Required=00H) ! |
出现此种情况,网上有两个说法:
- 检查复位电路,download 复位选项设置为正常
- 芯片全擦除
个人遇到这个问题,烧录时设置为芯片全擦除,成功。
7.J-Link烧录,检测不到芯片
该问题与博客https://blog.csdn.net/Jun626/article/details/80686263的情况一致。
描述:
在我将工程移到另一个电脑后,烧录时出现了检测不到芯片的情况。
详情:
工程移动到另一个电脑后,打开,keil弹出了一个提示框,让选择芯片:
1 | -- J-link Vxxx Device Selection -- |
就是说让重新选择芯片型号,我因为用的MXD2660,是ARMM0的因此就直接选了ARMM0。
然后就烧录不进程序,查看Debug,发现检测不到芯片。
解决方法:
网上查找刚好发现上述博客与我遭遇一致,原因是芯片型号选错了,MXD2660应该选Cortex-M0+。
将JlinkSetting.ini删除后,重新选择型号即可。