macos安装vscode_SAST Weekly | 流畅度Max:用vscode & GCCArm开发stm32

5af024a3501bc20dc015d71445a63062.png

SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享知识的同学投稿至eesast@mail.tsinghua.edu.cn , 期待你的作品!

前言:

笔者大概是电子系里为数不多的、习惯使用Macos操作系统的选手,然而在接触硬件开发时,还是面临着Keil软件没有macos版本的严重问题。迫于需要自力更生,不得不在网上查阅了诸多资料,也踩了许多坑,最终才完成了这套工具链的配置。

然而,尽管已经在宿舍安装了windows的台式机,还是沉醉于vscode的高颜值、强大的代码补全和跳转功能,因此希望将这个方法与大家分享,相信大家在花费一点点时间安装之后,都能够享用到这套工具带来的极大便捷。

本方法适用于windows、macos、linux三大操作系统。

由于使用STM32CubeMx进行初始化,因此将使用Hal库作为底层接口函数。建议在对STM32有初步了解后再去使用,避免掉坑。如果仍有配置上的困难,也欢迎联系笔者,一起讨论解决~

本方法所用到的大多文件都已经上传至清华云盘,可以在文末的链接中进行下载。

STM32CubeMx配置部分

首先,我们可以按照硬件部暑期stm32培训第一讲中的方法,设置LED灯的GPIO和时钟树。

在生成工程文件时,有别于MDK-ARM,我们这里选择makefile工具链。

(如果打不开STM32CubeMx,可能是由于Java版本不对,建议下载JDK8,更高版本因为缺少一部分功能,可能会在生成工程时报错)

9544596ea318524f0613186449eadb27.png

Gererate code之后生成项目

bc75c1889de96796ff5f90240b99eb36.png

VSCode编辑

de2ebc5ddf7382a68a58cab295ca1551.png

用vscode打开所在文件夹,.s文件里面可以查到各种各样的中断函数,但最重要的是Makefile文件:

fce7c2a0f0d00799af3aff926ce72d35.png

如果在工程中添加了其他文件(不是由cubemx生成的),还需要把路径添加到Makefile的c_includes中去,见上图(和Keil操作类似),否则可能会在编译时,发现无法找到相应的头文件,尽管可以跳转找到。

04d17c80bb03973abd99b8240cb8de04.png

此外,如果有新增加的源文件(不是CubeMx生成的),同样也需要将文件的相对路径添加到C_SOURCES中(见上图),否则这个文件将不会被编译,最后会报错(无法找到对应的函数/变量)。

在Makefile文件的C_DEFS中进行了全局宏定义,需要复制到vscode的c_cpp_properties.json中(可以用shift-control-P搜索)(之后需要的全局宏定义也都要在这两个地方添加)

bdeac1192f8450b68012ec0cbbb472dd.png 72bbfbd4a10b5897b25cc84e63dd5b38.png

在difines中添加Makefile的两个全局宏定义,从而解锁了大量代码补全:(忽略大小写、待补全内容不需要连续),从此妈妈再也不担心我们会记错函数的名字了

6b868e90ceae0cede07355d11c0818ef.png 351ef680908e48f2b6b254e288f58ba4.png c8ddae54366c0e098c8736a0e0de87c4.png

此外也解锁了非常方便的跳转功能:按住crtl后(mac中是command)直接点击函数名/文件名/报错位置,就可以跳转到定义/声明/文件

a25f0b0d89f19a7f8f47dc6c16176b91.png

到这里,我们不妨假设大家已经有能力完成源代码的编写,那么下一步就是至关重要的编译了。

gcc-arm交叉编译

我们用GNU Arm Embedded Toolchain(大概是arm公司提供的官方编译工具链)来进行编译

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

c0c096ae5628f8f5127d27b74f42124d.png

大家可以自行选择合适的版本进行下载安装

安装完毕后记得勾选“添加环境变量”,以便在命令行直接使用相关指令;如果没有自动安装的话也可以手动添加:

ec34192b2a5f3f0a91ed876d5e2dc987.png

右击此电脑—高级系统设置—环境变量—找到Path—编辑—新建

452a34e95ed53e4278a2344b2a861f02.png

复制进去如下的文件夹的路径(以防万一,可以把用户变量和系统变量都添加上),点击确定、保存之后重启电脑即可。

24b0d7b599f442073bf335c90e883341.png

由于没有提供make文件,可以将网盘上提供的一个make.exe复制进这个文件夹

https://cloud.tsinghua.edu.cn/f/cdacebb6e7474a5ba83f/

此后,我们只需要在vscode的终端输入make并点击回车,就可以开始编译了,

508573a4977265aa9a07ebf674821f0c.png 6542690fa3424380f44f7a3093629038.png

编译完成后会产生hex和bin文件,将其烧录进入单片机即可

常见错误:除了C语言的语法错误之外,最频繁的就是忘记将新加的文件写在Makefile中,建议返回上一节的内容仔细检查相关步骤。

29dad772caf2ed386a6b62a715804feb.png 53a5f9e23cabe08f06909fcd7774afef.png

另外,如果出现无法显示浮点数的问题,可以修改Makefile中的编译选项,将LDFLAGS中的nano.specs(精简版标准库)改为nosys.specs,可以看到编译产生文件的大小会略微增大。

STM32CubeProgrammer烧写

我们可以在st官网上下载这一软件

https://www.st.com/en/development-tools/stm32cubeprog.html

一个大坑在于,与cubemx类似,这一软件需要安装java环境,但高版本的JDK省去了一个重要组件,会导致无法打开图形界面,因此建议使用jdk8

之后可以打开图形界面,长这个亚子:

8bcc899fc208e2405413b9517059023f.png

在右侧的Firmware upgrade里面可以升级stlink的固件,如果识别不到,可能需要重新插一下stlink:(如果不升到最新版本的话可能不能正常烧录)

a76f8f9474acc362e3222410af0c6453.png

目前常用的功能,一是stm32芯片的烧录:

连接stlink后,在file path中找到之前编译生成的bin文件,勾选Run after programming,点击Start Programming即可。此后就能看到stm32上的绿灯在每隔半秒闪烁一次。

bad6e5c41e325e0d1826a71d867c896b.png

另一作用就是芯片的重置:

如果烧录程序突然无法识别stm32,一个可能的原因是在stm32cubemx生成进行配置的时候,SYS的Debug没有设置成Serial Wire,这时就需要设置mode为Under Reset,再点击连接,进行Full chip erase就可以重置芯片,从而进一步烧录(顺便记得把工程Debug设置好)

bb32234639c065d5095f8ea9ae61f1d9.png 8d1732946370739a78b63180ac4f5287.png

最后,如果大家还觉得这样的操作比较麻烦,那么我们可以利用命令行工具简化操作:首先在环境变量的Path中添加CubeProgrammer所在的文件夹:(把软件安装在了哪里)

06ce608261fb7ecbe47f753d6771c863.png

添加环境变量的操作同前;

在vscode的终端里,我们可以用命令行(CLI)一键烧录:(复制进去之后,直接按键盘的上箭头就可以显示之前已经使用过的指令,非常方便)

指令是STM32_Programmer_CLI -c port=SWD -d build/demo(工程名).bin 0x8000000 -s

fe0df21b9cfc6e8761737055fbcc0787.png

(因为还没修改debug选项,第一次没有烧进去,走一遍reset的流程,就可以顺利烧录了)

注意用命令行烧录的时候,需要断开图形界面软件和stlink的连接,事实上之后调试的时候就完全不需要打开图形界面了。

5c79189a144a6c7f6e92117b4f2e315d.png

笔者也不知道这个鬼畜的“圹”是从哪里来的,但毕竟已经达到了100%,stm32上的灯也开始闪烁,可见这套流程总算是圆满成功了。

总结:

之所以要研究这套工具链,一是在于它能够兼容macos和linux系统(家里电脑是windows但随身笔记本mac air选手留下了辛酸的泪水),二是在于vscode的自动补全、跳转、搜索功能过于舒适。但一大问题还是在于,我们学习stm32所用的很多例程都是基于Keil的,所以需要大量的时间进行移植和debug,不过能在debug的过程中一步一步理解原理,找到问题所在,也算是一件令人头秃但快乐的事情吧。

d31d6df7b6ac0fd530d7161941ea716d.png

附一张用11寸mac air花了好长时间摸(调库)出来的欧拉角检测

参考资料:

https://www.bilibili.com/read/cv5602458/(windows版)

https://blog.csdn.net/qq_39498701/article/details/104523284  (mac版)

文件资源:

https://cloud.tsinghua.edu.cn/d/212bf181bfdf44f49ee2/

撰稿人 | 高义淮

审稿人 | 刘洋

546d2dec69a4cae83b11b8835f2a810b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值