一、简要说明
1.搭建背景
KEIL5使用需要版权费,最便宜的基础版一年也要1845美元/年,专业版就更不要说了,但公司又要开源节流(没实力去购买),直接联网使用时会被发送律师函警告,所以就急切需要去搭建不收费的单片机开发环境(除非断网使用)。当然这也不是唯一的背景,也可以适用对于KEIL的老风格不喜欢和需要进行代码远程管理的伙计。
2.利弊点
优势:作为最优秀的代码编辑器之一的VScode无需过多介绍,具备当前市面所有代码编辑器的优秀基因,支持各种插件,使用起来也是非常方便。
劣势:当然KEIL5版权收费也是不无道理,一键编译、下载,尤其是仿真能力,对于单片机的调试有着一定的魅力,是其他代码编辑和编译器无法比拟的
二、搭建过程
1.VScode下载安装
阿里云盘分享链接:阿里云盘分享https://www.alipan.com/s/3a5y4vhqAHs
点击小箭头,会出现版本选择,,建议选择稳定版本,即使是最新版也没问题。在这里声明一下,我所使用的系统为Windows,所以以下搭建环境只针对Windows系统,其他系统可将本文作为参考进行搭建。
点击下载之后会自动进行下载,等待一段时间即可下载好。
建议软件安装时以管理员身份进行安装,这样可以减少很多不必要的麻烦(所有软件都适用),打开之后选择“我同意此协议”,(不同意也得同意,不同意不让用哈哈哈哈哈)
然后点击下一步,会弹出附加任务界面,没有特殊要求的话默认的配置就可以下一步。
然后会再弹出确认任务和准备安装窗口点击安装即可
之后会自动安装,可能在此之前会有一个安装位置的窗口,由于我电脑已经安装VScode所以有可能就没有弹出,我的安装位置为D:\Program Files (x86)
安装完成之后会显示安装完成,勾选直接运行打开
在打开之后(自动或双击打开),如果英语是不很好的伙计可以首先下载中文插件,点击扩展之后搜索“Chinese”,安装中文插。
安装之后需要重启一下才能正常显示中文,若是不能显示中文就去搜索一下问题,好像需要配置一下一个config文件,我安装时没有遇到过这个问题,这里就不过多解释 。在这些搞好之后再安装C/C++的插件,目前为止所使用到的插件即安装完成。若对界面颜色等修改可去搜索下载相对应的插件安装即可,网上有很多教程这里就不过多介绍了。
2. MingGW
MinGW就是Windows版的GCC,因此在这里也是当做编译器的作用
这里由于我试了几次在线安装,安装体验不是很好(个人网络原因),并且在线安装时只安装c和c++都会报错,所以就放弃了在线安装,转而直接下载压缩包,而解压包在解压后手动配置环境变量之后用起来也是一样的,并且可以节省大量时间。如果想试一下在线安装可以参考一下这篇文章http://t.csdnimg.cn/scJByhttp://t.csdnimg.cn/scJBy。压缩包下载地址:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-win32/seh/x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-win32/seh/x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z
进入下载地址之后,等待倒计时结束后会自动开启下载,可能下载速度有一些慢,不用担心,此时可以使用迅雷下载通过下载链接直接提升下载速度,为您节省不必要的等待时间,或者使用百度云(虽然很慢但是比在线直接下载还是要快一点点点点点的)。
在解压之后呢,为了方便管理和识别度,将wingw的文件夹放置在自己知道和集中管理的文件夹里,比如我的放置在那么我在
D:\Program Files (x86)
配置环境变量path的时候的路径就是
D:\Program Files (x86)\mingw64\bin
将这个路径复制下来就可以开始配置环境变量了。
我所使用的系统为Windows10,其他系统方法相同,位置不同,这里只使用文字简述不同之处,首先右击“此电脑” 点击“属性”,找到“高级系统设置”,接着点击“环境变量”,在两个方框的下面方框左上角显示的“系统变量”找到“Path”变量,点击编辑,进入新窗体之后点击右侧“新建”,将刚才复制的地址填入到新建的方框之中。
在完成之后电机“确认”之后关闭(所有带确认按键的都要点),这时Wingw的环境已经配置了,接下来查看是否配置正确。首先在桌面按住“shift+鼠标右键”,再点击“在此处打开PowerShell窗口”,接着输入
wingw32-make -v
然后回车,如果显示当前配置的版本即为配置成功。
现在小脑瓜觉得很疑惑,为什么Linux系统里面指令是
make
而Windows系统里面确是
mingw32-make
这个时候我们可以找到刚才复制配置环境的路径里面,将“mingw32-make.exe”文件修改为“make.exe”或者复制一份并命名为“make.exe” ,然后再使用
make -v
指令即为显示版本号。
3.GNU
官方地址:https://developer.arm.com/downloads/-/gnu-rmhttps://developer.arm.com/downloads/-/gnu-rm
阿里云地址:https://www.alipan.com/s/caZCFNdPn3ehttps://www.alipan.com/s/caZCFNdPn3e
交叉编译器点进去即可自动下载,同样的迅雷还是会比较快的。
双击打开,默认选择中文, 然后一直下一步,一直到有安装位置选择的页面,自己选择好位置,之后会在配置环境变量的时候使用的得到。
在安装完成之后可以直接勾选“Add path”选项,但为了保险起见,建议还是手动再次配置一遍。
同样的,按照mingw的方法去配置环境变量之后,使用
arm-none-eabi-gcc --version
就会显示出版本号即为安装配置成功
4.STM32CUBEMX
JAVA官网下载地址:https://www.java.com/zh-CN/download/
STM32CUBEMX官网地址:https://www.st.com/zh/development-tools/stm32cubemx.html
之所以使用STM32CUBEMX是它可以直接生成Makefile文件,这样我们就可以省去很多麻烦,stm32cubemx又依赖于JAVA环境,因此需要安装JAVA并配置环境 ,JAVA下载熟读还是比较快速的
下载好之后双击打开可以勾选更改目标文件,不勾选需要记好文件路径。
勾选之后可以自己设置目标文件夹,点击更改即可,同时自己设置的文件夹也需要记好路径,在配置环境变量的时候需要找到来使用,然后点击下一步
在安装完成之后会显示安装成功
接着就是找到自己设置好的路径,进入到bin文件内,如我的路径是
D:\Program Files (x86)\JAVA\bin
然后按照mingw添加环境变量的方法进行环境变量的添加。之后使用“java”指令测试环境是否配置成功,配置成功会有内容显示。
接着就是安装stm32cubemx,在官网下载的话需要邮箱进行验证,下载速度也是很快,就是麻烦了一点,这里就不放置云盘的连接了,下面直接双击打开直接进行安装,尽量选择对全部安装
然后一直“Next”,但是该勾选的勾选上就可以啦,一直到安装路径的这一步,不过这个是纯软件,无需对它进行环境变量的配置,是不是觉得轻松了很多呢,但建议对路径做好规划,这样可以快速找到自己想找的文件。之后会有一个选择界面,直接默认界面下一步就可以啦,直至安装完成。
打开之后,点击新建工程
进入之后选择芯片型号,因为我的板子是野火的霸道,所以我选择ZET6,可以按照自己的进行配置,此工程只使用一个灯作为例程,所以c8t6的最小核心板也是可以的。现在左上角确认芯片型号之后再双击下面的芯片,这里对stm32cube只做最简单的赘述,其他功能请参考其他博主文章。
进入配置之后,在左边功能栏选择“System Core”,再点击“SYS”,在其右边的Mode下的Debug中下拉选择“JTAG(4pins)”,为下载接口。
接着配置系统时钟,也就是晶振
为了显示效果我们使用一个引脚点亮一个LED作为成功的标准,使用PB2,也可换成其他的引脚,例如核心板的为PC13,但要设置为输出。
点击之后即配置项完成,默认选项输出低电平即可。
之后就是配置时钟为72M,刚才我们已经配置晶振为外部晶振了,所以要对整体系统进行配置,如果是新手入门的话,可以去了解一下时钟是如何配置和总线所使用的时钟都是多大的,在此就不过多讲解。
接着就是可以进行配置啦,需要配置项目地址和项目的名字,最重要的一点一定是要使用Makefile文件,前面讲了这么多就是为了这个文件,。
耗费这么大的力气肯定不是只为了点灯这么简单,所以为了后面工程方便移植,我这里将.c和.h文件进行分开管理。 配置好了之后点击生成代码就可以啦
到这里可能会有一些错误说没有固件包,为什么出现这个问题我也不知道是什么原因,还请知道的大佬留言告诉一下,但是可以通过离线的芯片包去进行新建,效果是一样的。离线芯片包下载地址:链接:https://pan.baidu.com/s/1SAOTOH6xMyx0xLRGrYCTxQ?pwd=wjd9 提取码:wjd9,这里只提供f1的,其他的版本可以参考其他博主的或者去官网去下载,并且解压出来的文件夹需要放置在这个可以读到的地方,之后再生成代码就不会再报错了
三、测试例程
接着将整个led的文件夹,选中后拖拽到桌面的VScode打开之后,点击新建终端,然后在下方终端窗口输入
make
指令,就可以实现编译,生产出hex和bin文件,然后使用JLink进行烧录就可以了
在打开主函数可能会发现,有红色波浪线,我看到有一篇博主有解决办法,在此引用一下 http://t.csdnimg.cn/8SbOqhttp://t.csdnimg.cn/8SbOq
方法行之有效,只需要将Makefile里的路径添加到 c_cpp_properties.json,简单来说就是将路径添加到json文件里面即可消除红色波浪线,这是修改前的json文件
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "D:\\Program Files (x86)\\mingw64\\bin\\gcc.exe",
"cStandard": "c17",
"cppStandard": "gnu++14",
"intelliSenseMode": "windows-gcc-x64",
"configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
}
这是修改后的文件,唯一的区别就是将Makefile的头文件加载进json文件里面
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/Core/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
"${workspaceFolder}/Drivers/CMSIS/Include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_HAL_DRIVER",
"STM32F103xE"
],
"compilerPath": "D:\\Program Files (x86)\\mingw64\\bin\\gcc.exe",
"cStandard": "c17",
"cppStandard": "gnu++14",
"intelliSenseMode": "windows-gcc-x64",
"configurationProvider": "ms-vscode.makefile-tools"
}
],
"version": 4
}
另外该博主还讲了将编译简化,也是很简单即可达到目的,看起来整洁很多,只需稍微修改Makefile文件即可成功,找到以下Makefile文件进行修改即可,修改前
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
echo "build $<"
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
修改之后
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
@echo "build $<"
@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
@echo "build $<"
@$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR)
@echo "build $<"
@$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
@echo "build $<"
@$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@
四、总结
具体的实现代码可能会有所差异,但基本思路都是相同一样,还有很多种方法可以实现单片机开发,这只是其中一种,我记得也是可以直接在VScode里面使用JLink进行直接下载和仿真的,但需要调用插件,就目前来说已经满足使用要求,所以其他插件就暂时不再描述,如果有实力的大佬知道的话欢迎在评论区留言探讨,同时邀请所有伙计对本文章不恰当之处提出问题,及时改正。