最近做课程设计要用到STM32,到手了新的STM32F103C8T6最小系统板,但是不知道为什么,明明不管怎么用STM32都没有出现过连接不上或者无法烧录的现象,今天却频频发生,我甚至拿出来DAPlink以及旧的板子都无法连接,会出现
几种弹窗
1.设备不匹配(mismatch)
对于第一种,需要检测是否芯片型号不匹配等情况,如果型号匹配则需要考量PACK校验的问题——这有可能是由于同名的DFP包导致的设备定义冲突(此处不做探明原因的分析)。
2. 没有检测到STlink
对于第二种,是STlink没有连接或者没有安装相关的驱动
3.没有检测到DAPlink
对于第三种,是选择了DAPlink但是却插着STlink。当然每次在Options for target的device选项卡中换设备型号(芯片型号)的时候,都需要注意后续需要重新配置debug的link选项和setting选项——否则切换完默认使用的是Ulink,同时会默认不勾选自动复位启动。
4.无连接
对于第四种,如果接入的是STlink则需要考虑是否STlink用杜邦线连接的引脚是否错误,比如练到了另一排或者CLK和SWD两者连反了。这里说的是通常用杜邦线连STM32F103最小系统板的10P的STlink。
主要说一下mismatch的情况(第1种情况)
主要说一下第一种情况,也就是mismatch的情况。
Keil 默认开启Pack 校验,如果因为某些差异如容量等,就会报mismatch。
同时在连接的过程中,我发现,即使你通过能够连接上芯片(如果连接不上可能需要选择更低的频率,默认4000khz,或者修改模式和复位模式),但是仍旧可能被keil因为不匹配拒绝连接。
如何解决呢
最简单的解决方式是,在Debug选项卡STlink等调试器选择的右侧Setting(也可以从Utilities选项卡中的setting进入)中,顶部切到Pack页,取消勾选 Enable,这是解决 mismatch 的核心,让 Keil 不卡身份。
注意,每次切换设备型号或者是修改Link之后需要重新关一遍校验。
其他可能需要的检查和可尝试的操作
以下操作并非解决mismatch问题的核心,但是是在依旧无法解决情况下可以参考尝试的操作
- Target 页:Flash 算法确认为128K
- RAM Size 从默认
0x1000改为0x5000(Start 保持0x20000000),防止内存溢出。 - 对默认 SWD 时钟降频
其他可以完成烧录的方法
使用如STM32CubeProgrammer这样的三方烧录软件。
在Options for target页面中的Output选项卡勾选“Create HEX File”
然后重新编译,生成的文件应该会在Objects目录下,使用第三方软件辅助烧录即可。
其他了解
当关闭PACK校验后,即使你的芯片型号真的不匹配也可以烧录,为了避免不必要的麻烦请确保芯片型号匹配。