DAPLink源码生成Keil工程并编译成功——笔记
本文介绍使用DAP源码生产Keil工程的步骤以及遇到的坑。
一、前期准备工作
以下1~4为步骤:
-
安装Python 3 (https://www.python.org/downloads/),并添加至路径 PATH,此处忘截图了,总之看见pip、all user、add to PATH之类的就勾选。(网上也有些帖子说暂时不支持Python 3要用Python 2.7的,本人实测Python 3也可以,可能是以前不行的现在可以了)
-
安装 Git (https://git-scm.com/downloads),添加至路径 PATH(安装第三步 选项里推荐使用Notepad++作为默认编辑器,没有Notepad++需要先安装好,剩下的就一路默认即可)安装后会自动添加好路径D:\Git\bin\ 和D:\Git\cmd
-
安装 Keil MDK (https://developer.arm.com/tools-and-software/embedded/keil-mdk),安装与License的方法网上一大堆,这里就不说明了
-
用命令行安装 virtualenv (最好用管理员权限打开cmd),输入
pip install virtualenv
如果提示pip需要升级什么的就按提示继续输入命令升级pip,一般不会有什么大问题
二、初始化安装
-
方法一:从Github上下载DAP源码 (https://github.com/mbedmicro/DAPLink),下载后的是名为DAPLink-main.zip的压缩包,需要解压。
方法二:也可先新建个文件夹(命名为英文,如NEW),对着它右键选Git Bash Here,就会打开Git Bash的命令窗口,
输入
$ git clone https://github.com/mbedmicro/DAPLink
clone后的文件夹叫DAPLink ,无需解压(速度慢的话推荐第一种,反正都是一样的)
-
clone完后把Git Bash根目录切换到源码的根目录。
上述方法一的根目录为DAPLink-main,方法二的根目录为DAPLink,即对着这个文件夹右键Git Bash Here(关闭原来的Git Bash命令窗口),或者原来的窗口输入$ cd DAPLink
-
输入
$ pip install virtualenv
安装虚拟环境 -
输入
$ virtualenv venv
进入虚拟环境,此时DAPlink文件下会出现venv文件夹
三、启动虚拟环境
-
输入:
$ venv/Scripts/activate
(For Linux)
$ venv/Scripts/activate.bat
(For Windows)
如果venv/Scripts/activate.bat不行就按照图片的提示前面加个source
,或者这个不需要命令行执行,直接在DAPlink目录下venv—Scripts文件夹里找到activate.bat,右键管理员打开即可
- 输入
$ pip install -r requirements.txt
(用于获取很多支持包,这步很关键,时长取决于你的网络,如果网络不好可能会下载不了,只要命令行里有显示Error或Warning之类的一律出问题)
最后的显示是Successfully installed xxxxxxxxx 才是完全安装成功,出现Error或Warning之类需要重新执行$ pip install -r requirements.txt
四、生成Keil工程文件
-
输入
$ progen generate -t uvision
一步生成,
-
如果这一步显示 bash: progen: command not found 之类的 均是上一步没弄好,可以重复执行上一步
$ pip install -r requirements.txt
直至完全获取支持包 -
此使可以关闭Git bash了(其实还不行,还有一个步骤,详见下文 坑三…),进入到文件夹里面,会发现多出个文件夹projectfiles,即刚刚生成的Keil工程文件,里面有116个工程文件,找到对应的芯片型号即可。
如常用的STM系列芯片:
以 _if 结尾的工程是对应工程的应用程序;_bl 结尾的是对应工程的Bootloader应用程序,以STM32F103C8为例,首先烧写bootloader,即stm32f103xb_bl工程编译出来的hex文件,然后再烧写stm32f103xb_if编译出来的hex文件即完成一个DAPLink制作。
五、编译工程的遇到坑
坑一:Arm v5编译器
-
用Keil打开,界面如下:
编译,确保有相应的芯片支持包(也称固件包),如果出现如下则是缺少Arm compiler version 5编译器,
Rebuild started: Project: stm32f103xb_if *** Target 'stm32f103xb_if' uses ARM-Compiler 'Default Compiler Version 5' which is not available. *** Please review the installed ARM Compiler Versions: 'Manage Project Items - Folders/Extensions' to manage ARM Compiler Versions. 'Options for Target - Target' to select an ARM Compiler Version for the target. *** Rebuild aborted. Build Time Elapsed: 00:00:00
目前最新下载的Keil版本都是v6的编译器了,相关的v5编译器安装网上也有很多帖子,好多都指向官网说在官网下载,但是本人花了十几首歌的时间浏览查找注册收验证码登录… 才发现Keil官网上已经没得下载了(这是个大坑!) 放弃官网寻找后才发现个帖子有说明v5编译器的文件夹地方,在以前的版本里安装目录下Keil_v5—ARM—ARMCC文件夹,
最新版本已经没有ARMCC这个文件夹了,所以可以用以前的版本copy过来放到ARM文件夹目录下,此处本人共享一波ARMCC文件夹出来:
链接:https://pan.baidu.com/s/1gYGGfa1w7sSQ_GWs_Bp6KA
提取码:ku9q
如果需要将自己的ARMCC文件夹打包copy给别人,建议用7z格式压缩,压缩前428M,压缩后78.7M(zip)、17.8M(7z) (7z YYDS!) -
此处简略说明安装过程:打开Keil点击魔术棒旁边红绿黄三个小方块的东西(Manage Project Items—Floders/Extensions—Use ARM Compiler处点击右边三个小点点,把ARMCC文件夹添加进去即可(或搜Arm compiler version 5安装,会有很多帖子有很详尽的教程)
-
Arm compiler version 5 安装完后打开Keil—魔术棒—Target—Code Generation会出现Use default compirler version 5,并选择它(没装ARMCC时只有Use default compirler version 6) ,OK即可用v5来编译
坑二:Git的环境变量(或许该怪windows?)
-
然而继续编译会出现新的问题,如下:
'git' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 #> Getting git description #> ERROR: Failed to get git description, do you have git.exe in your PATH environment variable? ".\build\stm32f103xb_if.axf" - 1 Error(s), 0 Warning(s). Target not created.
这是因为 git 的环境变量未配置好,也有一个方法检测git是否正常运行,Win+R 输入cmd打开命令行,输入git,正常的话是可以显示git相关信息的,但本人的显示 “git’ 不是内部或外部命令,也不是可运行的程序或批处理文件“ 所以需要添加git的PATH路径。这一部分本人折腾了很久,网上找了很多添加git路径的帖子,有些是重复的,有些又不一样,在这里我整合了需要添加的路径(不一定都需要添加,但都加上又没什么影响):
注意安装路径不同的话要做修改。
-
至于为什么本人在添加PATH部分卡这么久,全怪Window神奇的bug(或者不是bug,只是我还不了解为什么,有了解情况的可以评论区一波),添加路径有两种方法,一种新建后直接在空白行输入,
还有一种是点击编辑文本
弹出提示点击确认即如下图所示,每一个PATH中间都由英文符号 ; 分号隔开,
-
然而我用了第一种方法,直接新建空白处填写路径,显示效果如下,却怎么都不行,cmd永远还是显示 “git’ 不是内部或外部命令,也不是可运行的程序或批处理文件。“
人都快崩溃时候无意点了下”编辑文档“,终于破案,
多了一对引号和分号,删掉之后再次cmd输入git ,终于大功告成!
但为什么会出现上述这样的问题本人也不知道,打开编译页面显示的跟未修改前的还是一样,根本看不出会对一双引号和分号
还是建议添加修改PATH用方法二吧,比较稳妥。
坑三:未关闭虚拟环境脚本
-
cmd输入git也可以了,又开始Keil编译,一点编译,0.5秒都不到就听到 滴灵~ 一声编译完成,瞬间崩溃。一看问题,还是显示 ” ‘git’ 不是内部或外部命令“ …更加崩溃!接下来就是更加疯狂地google,
-
终于找到一篇帖子分享DAPLink的源码生成步骤有一处不一样,TA的最后一步需要关闭虚拟环境脚本 deactivate,在上述启动虚拟环境第一步就把虚拟环境脚本开启了,但是大部分的帖子以及官方的DEVELOPERS-GUIDE(在DAPLink目录下的docs里,包括了DAPLink的全部资料文档)均没有提及需要关闭(或许是我看漏)
-
已经是最后一根稻草了立马就试了下,Git bash里
$venv/Scripts/deactivate.bat
或直接管理员打开venv—Scripts—deactivate.bat,再重开Keil编译,终于,大功告成,编译正常通过! -
至于为什么有的帖子需要关闭有的帖子又没写关闭就不知道了,知情的热心网友可以评论区一波。
补充–10.13
- 补充说明第三章启动虚拟环境中 如果用
$ venv/Scripts/activate.bat
没有反应的话就改为$ source venv/Scripts/activate
注意后面不带.bat的,成功进入虚拟环境是会显示(venv)
的。 - 网上也有帖子说必须要用DAPLink\tools里的launch_uvision.bat来启动(官方文档的最后一行也有提及),
但本人亲测好像直接工程打开也是可以的,并且后来又发现并不一定要退出虚拟环境deactivate后才能编译,总之有点迷,反正遇到问题了就都试试。
- 关于launch_uvision.bat的启动需要修改Keil路径,如图片选中地方所示
- 获取方式似乎也有不同的地方,本人亲测以上方法如果是Github上直接下下来解压的无论如何都不会编译通过,用git clone的均可以编译并且没有那么多奇奇怪怪的问题,git clone后
$cd DAPLink
跳转到DAPLink的根目录,这时会出现(main)
的字样,而如果使用压缩包解压再cd进DAPLink根目录下是没有这个(main)
的,因此推荐使用git clone来获取DAPLink源码!!!所以以上的截图都是错误的,正常的应该从cd DAPLink 命令后都会带有
(main)
… - 这里我汇总一下全部使用的git bash 命令:
$ git clone https://github.com/mbedmicro/DAPLink //clone整个工程过来
$ cd DAPLink //这个步骤会出现main
$ pip install virtualenv //pip安装虚拟环境
$ virtualenv venv //pip进入虚拟环境
$ source venv/Scripts/activate //使能虚拟环境
$ pip install -r requirements.txt //安装支持包
$ progen generate -t uvision //生成全部Keil工程文件
//--------------------------------------------------------//
//如果不需要生成全部一百多个工程文件,就只挑需要的来生成即可,以STM32F103xb为例:
$ progen generate -p stm32f103xb_bl -t uvision //只生成stm32f103xb_bl工程
$ progen generate -p stm32f103xb_stm32f103rb_if -t uvision //只生成stm32f103xb_if工程
//--------------------------------------------------------//
$ venv/Scripts/deactivate.bat //取消虚拟环境,此步不一定需要
- 如果遇到更多的情况可以参考官方DAPLink的Issues部分,有很多网友也提出了与本文类似的问题:https://github.com/ARMmbed/DAPLink/issues
结语
分享这篇文章出来旨在帮助坑友们排雷,节省十几首歌的时间,并且由于本人认知有限,本文的方法仅供参考,并不一定适用于任何情况。感谢DAPLink官方如此优秀的开源!