最近我心血来潮,想用Proteus+keil5进行联调,但仔细在网上一找,全是某SDN扒下来的陈年老黑X,都快转出数字包浆了还在用,完完全全跟不上时代,也全是51单片机的版本,STM32(ARM)根本不能用。
于是博主心一横,就用了一天研究了一下,STM32(ARM)到底该怎么进行proteus联调。
想法有了,该从哪里开始查呢?博主看了一下某SDN漫天乱飘的VDM51.dll,于是决定从这个源头找起。(不得不佩服一下某SDN的污染力,博主用的国际版必应搜索,结果依旧是某SDN的骨灰到处乱飘)
中间找到了两个用了VDM名称的github项目,博主总算在某个外网的咨询帖子里找到了点苗头,就是它------"VDMARM.dll"
原帖地址:使用 Proteus VSM 进行 Keil ARM MDK 5 远程调试 - Keil 论坛 - 支持论坛 - Arm 社区
顺藤摸瓜,顺着这个名字,博主又找到了一个名称,可惜这次是在某SDN上找到的(虽然一直在骂某SDN,但有时候确实不得不承认它好用。。。)(好用就完了,至于为什么只有它好用,别管)
STM32+Keil 5+proteus 8 编程、仿真方法汇总_stm32、keil5和proteus8编程、仿真汇总-CSDN博客
该贴指出了一个从没在那一堆坟堆一样的"VDM51.dll"里出现过的东西------"vdmagdi.exe",同时还给出了这个东西的具体来历,罕见的某SDN精品贴啊,就是不知道是原帖?还是秽土转生。
vdmagdi.exe原帖:vdmagdi的安装
然后,等博主把这个vdmagdi.exe下载下来之后,发现了一个有趣的事:

看看这产品名称!是Uv2(keil2)时期的!博主从没用过这个时期的keil,难怪找不到。
安装完之后,这东西会在你的keil目录下的 ./C51/BIN 里和 ./ARM/BIN 里各自放一个 VDMC51.dll 和 VDMARM.dll 以及在 ./ARM/Hlp 里加一个 VDMAGDI.HLP。
最后重点来了,博主在安装完之后遇到了keil5不断报错,意思差不多是说"keil根目录下的TOOLS.INI有个 [未知小节] ,其中提供了无效的PATH参数"。
于是博主就又来康康是怎么个回事了
仔细一看,原来是安装完之后vdmagdi.exe给TOOLS.INI的末尾加了个旧版本的[KARM]小节

查看代码
[KARM]
TDRV0=BIN\VDMARM.DLL ("Proteus VSM Simulator")
BOOK0=HLP\VDMAGDI.HLP ("Proteus VSM AGDI Driver")
这玩意跟现在μkeil v5.40后的版本完全不符,因此才会报错,把这个小节删掉就不会再报错了。

顺便把我研究了以下的keil5的INI结构,注释一下发上来,有需要的可以参考一下:
查看代码
[ARM]
# Path: 该节配置的路径,其余所有路径都是以该路径为相对路径(必须)
PATH= "C:\Keil_v5\ARM\ "
# VERSION: 版本号,疑似不必须
VERSION=5.40
#TOOLPREFIX: 未知,疑似不必须
TOOLPREFIX=arm-none-eabi-
#LIC: 该小节指代版本的LIC认证,不必须
LIC0=GE7DL-07RZ8-06JQU-SSDA3-6BJKI-KEE5L
#CPUDLLx: 下载器配置,以以下配置确定该工程可用哪些下载器,如CM3/4系列的工程的debugger只能是 SARMCM3.DLL 后面括号中的符号所指代的下载器
CPUDLL0=SARM.DLL(TDRV0,TDRV4,TDRV5,TDRV8,TDRV21) # 可下载到 ARM7/9 设备的下载器
CPUDLL1=SARMCM3.DLL(TDRV1,TDRV2,TDRV3,TDRV4,TDRV6,TDRV7,TDRV9,TDRV10,TDRV11,TDRV12,TDRV13,TDRV14,TDRV15,TDRV16,TDRV21) # 可下载到 Cortex-M 设备的下载器
CPUDLL2=SARMCR4.DLL(TDRV6,TDRV21) # 可下载到 Cortex-R4 设备的下载器
CPUDLL3=SARMV8M.DLL(TDRV15,TDRV6,TDRV11,TDRV9,TDRV14,TDRV17,TDRV18,TDRV19,TDRV20,TDRV21) # 可下载到 ARMv8-M 设备的下载器
#DELDRVPKGx: 未知,不必须
DELDRVPKG0=ULINK\UninstallULINK.exe("ULINK Pro Driver V1.0")
#BOOKx: 说明文件,不必须,括号内为在程序内显示的名字
BOOK0=HLP\RELEASE_NOTES.HTM("Release Notes for MDK 5.40",GEN)
BOOK1=HLP\ARMTOOLS.chm("Complete User's Guide Selection",C)
BOOK2=HLP\VDMAGDI.HLP ("Proteus VSM AGDI Debugger")
#TDRVx: 下载器驱动DLL,括号内为在程序内显示的名字
TDRV0=BIN\UL2ARM.DLL("ULINK2/ME ARM Debugger")
TDRV1=BIN\UL2CM3.DLL("ULINK2/ME Cortex Debugger")
TDRV2=BIN\ABLSTCM.dll("Altera Blaster Cortex Debugger")
TDRV3=BIN\lmidk-agdi.dll("Stellaris ICDI")
TDRV4=Signum\SigUV3Arm.dll("Signum Systems JTAGjet")
TDRV5=Segger\JLTAgdi.dll("J-LINK / J-TRACE ARM")
TDRV6=Segger\JL2CM3.dll("J-LINK / J-TRACE Cortex")
TDRV7=BIN\ULP2CM3.DLL("ULINK Pro Cortex Debugger")
TDRV8=BIN\ULP2ARM.DLL("ULINK Pro ARM Debugger")
TDRV9=NULink\Nu_Link.dll("NULink Debugger")
TDRV10=SiLabs\SLAB_CM_Keil.dll("SiLabs UDA Debugger")
TDRV11=STLink\ST-LINKIII-KEIL_SWO.dll ("ST-Link Debugger")
TDRV12=BIN\CMSIS_AGDI.dll("CMSIS-DAP Debugger")
TDRV13=BIN\DbgFM.DLL("Models Cortex-M Debugger")
TDRV14=PEMicro\Pemicro_ArmCortexInterface.dll("Pemicro Debugger")
TDRV15=BIN\ULPL2CM3.dll("ULINKplus Debugger")
TDRV16=TI_XDS\XDS2CM3.dll("TI XDS Debugger")
TDRV17=BIN\ULP2V8M.DLL("ULINK Pro ARMv8-M Debugger")
TDRV18=BIN\UL2V8M.DLL("ULINK2/ME ARMv8-M Debugger")
TDRV19=BIN\CMSIS_AGDI_V8M.DLL("CMSIS-DAP ARMv8-M Debugger")
TDRV20=BIN\DbgFMv8M.DLL("Models ARMv8-M Debugger")
TDRV21=BIN\VDMARM.DLL("Proteus VSM Monitor Debugger")
以及记得在ARM节的最后,额外加上VDMARM.dll这个下载器,括号内可以自主命名,前面的序号需要符合TDRVx的格式,我个人是用的TDRV21。
以及最后,贴一下vdmagdi.exe文件,免得源网址失效,大家再找来找去了:
下载:https://wwuh.lanzout.com/iHewq2uqkskh 密码:28bi