打印

Keil无法调试STM32H745双核单片机问题解决方法

[复制链接]
2108|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子学长|  楼主 | 2018-7-5 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近听说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能够做好兼容性问题。

使用特权

评论回复

相关帖子

沙发
chenjinyu| | 2022-5-18 10:56 | 只看该作者
大佬,您好!我们现在用STM32H747的使用JLINK和STLINK V2,都只能识别到M7,麻烦提供下帮助。之前调试的官方开发板自带STLINK V3没有问题,M4内核的就一直下载不了程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

424

主题

447

帖子

1

粉丝