VScode+MingGW+GNU+STM32CUBEMX搭建单片机开发环境

本文详细介绍了如何利用VScode、MingGW、GNU和STM32CUBEMX等工具搭建免费的单片机开发环境,以替代KEIL5,包括VScode的安装配置、MingGW作为编译器、GNU的交叉编译和STM32CUBEMX的使用,以及如何解决常见问题和优化开发流程。
摘要由CSDN通过智能技术生成

一、简要说明

1.搭建背景

KEIL5使用需要版权费,最便宜的基础版一年也要1845美元/年,专业版就更不要说了,但公司又要开源节流(没实力去购买),直接联网使用时会被发送律师函警告,所以就急切需要去搭建不收费的单片机开发环境(除非断网使用)。当然这也不是唯一的背景,也可以适用对于KEIL的老风格不喜欢和需要进行代码远程管理的伙计。

2.利弊点

优势:作为最优秀的代码编辑器之一的VScode无需过多介绍,具备当前市面所有代码编辑器的优秀基因,支持各种插件,使用起来也是非常方便。

劣势:当然KEIL5版权收费也是不无道理,一键编译、下载,尤其是仿真能力,对于单片机的调试有着一定的魅力,是其他代码编辑和编译器无法比拟的

二、搭建过程

1.VScode下载安装

在官方网站:Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.icon-default.png?t=N7T8https://code.visualstudio.com/

阿里云盘分享链接:阿里云盘分享icon-default.png?t=N7T8https://www.alipan.com/s/3a5y4vhqAHs

点击小箭头,会出现版本选择,,建议选择稳定版本,即使是最新版也没问题。在这里声明一下,我所使用的系统为Windows,所以以下搭建环境只针对Windows系统,其他系统可将本文作为参考进行搭建。

点击下载之后会自动进行下载,等待一段时间即可下载好。

 建议软件安装时以管理员身份进行安装,这样可以减少很多不必要的麻烦(所有软件都适用),打开之后选择“我同意此协议”,(不同意也得同意,不同意不让用哈哈哈哈哈)

 然后点击下一步,会弹出附加任务界面,没有特殊要求的话默认的配置就可以下一步。

 然后会再弹出确认任务和准备安装窗口点击安装即可

 之后会自动安装,可能在此之前会有一个安装位置的窗口,由于我电脑已经安装VScode所以有可能就没有弹出,我的安装位置为D:\Program Files (x86)

安装完成之后会显示安装完成,勾选直接运行打开 

在打开之后(自动或双击打开),如果英语是不很好的伙计可以首先下载中文插件,点击扩展之后搜索“Chinese”,安装中文插。

安装之后需要重启一下才能正常显示中文,若是不能显示中文就去搜索一下问题,好像需要配置一下一个config文件,我安装时没有遇到过这个问题,这里就不过多解释 。在这些搞好之后再安装C/C++的插件,目前为止所使用到的插件即安装完成。若对界面颜色等修改可去搜索下载相对应的插件安装即可,网上有很多教程这里就不过多介绍了。

2. MingGW

MinGW就是Windows版的GCC,因此在这里也是当做编译器的作用

官方链接:MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.netA complete runtime environment for gccicon-default.png?t=N7T8https://sourceforge.net/projects/mingw-w64/files/

百度云盘分享:http://链接:https://pan.baidu.com/s/1cFEn-QusOaAop9GRIl6jLg?pwd=bsom 提取码:bsomicon-default.png?t=N7T8http://xn--https-bl8js66z7n7i//pan.baidu.com/s/1cFEn-QusOaAop9GRIl6jLg?pwd=bsom%20%20%E6%8F%90%E5%8F%96%E7%A0%81%EF%BC%9Absom

这里由于我试了几次在线安装,安装体验不是很好(个人网络原因),并且在线安装时只安装c和c++都会报错,所以就放弃了在线安装,转而直接下载压缩包,而解压包在解压后手动配置环境变量之后用起来也是一样的,并且可以节省大量时间。如果想试一下在线安装可以参考一下这篇文章http://t.csdnimg.cn/scJByicon-default.png?t=N7T8http://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.7zicon-default.png?t=N7T8https://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-rmicon-default.png?t=N7T8https://developer.arm.com/downloads/-/gnu-rm

阿里云地址:https://www.alipan.com/s/caZCFNdPn3eicon-default.png?t=N7T8https://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/8SbOqicon-default.png?t=N7T8http://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进行直接下载和仿真的,但需要调用插件,就目前来说已经满足使用要求,所以其他插件就暂时不再描述,如果有实力的大佬知道的话欢迎在评论区留言探讨,同时邀请所有伙计对本文章不恰当之处提出问题,及时改正。

  • 47
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值