最近听说ST推出了双核单片机STM32H7x5、x7系列的双核单片机,
出于对双核单片机的好奇,果断入手一块STM32H745ZIT6,然后自己做板子,自己玩儿。
板子做好之后,用ST-link给两个核下载代码或者Debug都没问题,但是如果在keil工程下,用J-link下载代码,就只能下载一个核,这还真的是讨厌!
需要怎么克服这个问题呢?
首先产生这个问题的原因在于,SEGGER公司的JLinkARM.dll文件中,对原件的命名和Keil对原件的命名方式不同。
使每次新建keil工程后,设置仿真器时,都会提示图1的信息。
点击确定后,会进入选择芯片型号,当我选了STM32H745ZI_CM7后,M7核的代码可以正常下载,但是M4核就不能用;选了M4核后,M7核的代码就不能用。
(这里必须吐槽一下keil公司和SEGGER公司,为啥不整成统一的或者兼容的~)
既然不能用,那就修改两个里边某一个对原件的命名方式呗
第一种方法:修改keil中的原件命名。
这种方法稍微简单些,只需要修改C:\Keil_v5\ARM\Packs\Keil\STM32H7xx_DFP\2.x.x\Keil.STM32H7xx_DFP.pdsc文件就行。
但是存在问题,原本关于STM32H745ZI的内容如果被修改,那么每次打开MDK,都会提示更新原件库文件,很闹心~
既然不能改,那就自己新建一个,增加一个原件类型,然后复制原有的STM32H745ZIT6的内容,修改成和SEGGER兼容的名字(具体方法需要自己搞,这里只提思路)。
这样就能用了,只不过每次使用STM32CubeMX生成的工程,默认还是会用原有的原件型号,新工程需要手动修改原件名。
第二种方法:修改JLinkARM.dll文件中的原件命名。
.dll文件不是正常ASCII内容的文件,它是个二进制文件(自行查找修改二进制文件的方法)。
以ASCII方式打开JLinkARM.dll文件,会有很多乱码,当然也会有一些我们能识别出来的字符数据。
在这里搜索“STM32H745ZI_M7”和“STM32H745ZI_M4”,居然都能搜到。
那就直接把这两个字符串修改成跟keil对应的原件名(STM32H745ZITx:CM7/STM32H745ZITx:CM4),结果修改后的dll文件不能用(大概是有某种保护措施,当文件大小发生变化时,会出错)。
另外,经探索发现,“STM32H745ZI_M7”和“STM32H745ZI_M4”两个字符串都是以“NUL”即hex码0x00为结尾的。
那就牺牲一下“STM32H745ZI_M7”和“STM32H745ZI_M4”两个字符串后边的字符串(因为被牺牲的原件型号,我用不到),就是把“STM32H745ZI_M7<NUL>”修改为“STM32H745ZITx:CM7<NUL>”,多出几个字符,就删后边的字符,保证字符数量不变。
M4核的修改方式类似。
再强调一下,字符以<NUL>结束,所以dll文件能够正常识别到STM32H745ZITx:CM7。
修改好之后,再用STM32CubeMX生成新的工程,修改仿真器配置时,SEGGER不会再弹窗了,而且两个核也都能正常下载了。
本文仅用于自己记录,以防忘记修改过程。写的内容不是很清晰,如果有其他小伙伴也有相同的需求,请自行探索~
等到H745在中国流行起来的时候,希望SEGGER和keil能够做好兼容性问题。 |