不太喧嚣-STM32自学笔记 - 工具选型与环境搭建

728 阅读10分钟

开发环境的选择

简单的IDE介绍

因为我是初学者,对这些不太了解,我就说明一下我了解到的ide。ide绝不是限制学习的因素,所以选择合适自己的就行。

  • keil5: 老牌ide,收费,社区版免费但是不能商用,主流选择,找工作必备,但是我是纯学着玩,又不找工作,主要界面是比较丑所以pass
  • stm32 cube ide: 意法半导体出的ide,基于eclipse开发,所以是eclipse系的界面,并且比较吃资源(卡),对于习惯了idea和vscode的我来说,不太能接受,所以pass
  • vscode: 懂得都懂,再加上我平时的辅助ide就是vscode所以使用这个没有什么学习成本,而且学无止境,哪那么多主流的说法啊,很多新技术刚出来的时候都小众,我们要保持开放的心态,永远不要畏惧新事物,而且vscode这玩意也不新了,虽然我不是这个领域的不知道用它开发嵌入式的多不多,但是听说keil6也出了vscode插件,但是吧社区版的是不能商用的(虽然我是个人使用,但是不能商用我就是不舒服)所以keil6也pass,最终使用vscode+eide(MIT license)。

工具选型

经过上面的分析,我最终选择了vscode进行开发,众所周知,vscode灵魂是插件,如果没有插件我们也没法开发stm32,经过一番折腾和搜索,我终于跑通了vscode开发stm32的流程,下面介绍需要的组件。

  • vscode:ide本体
  • eide插件 :全称叫Embedded IDE在vscode上开发嵌入式的插件,类似的还有platform.io,不过那个我没有深入研究,因为platform.io需要外网,在gfw内使用体验很差,eide的使用比较丝滑。
  • C/C++ Extension Pack 插件: vscode上c语法支持扩展包,作用自行百度,简单说就是支持c的语法高亮,定义转跳等功能。
  • cortex-debug 插件: coretex是arm对于芯片的命名方式,顾名思义是用于对arm cortex系列芯片的debug,顺便说一句我学习的STM32F103的mcu(micro control unit微控制器单元)是cortex-M3。
  • arm-none-eabi-gcc: 如果使用的是keil的话,编译器就是它自带的armcc等等,但是我们是折腾型选手就不用keil了,那么我们就需要配置一下gcc,而嵌入式开发,尤其是stm32是arm芯片所以需要使用这个gcc。
  • openocd:开源的调试软件,具体干什么用的有待我后续研究。
  • cube-mx(非必须):区别与cube-ide,这个是一个用于创建工程和图形化配置芯片参数的软件,这个有一点需要注意的是,它创建的工程默认是使用HAL库开发的,如果你不想用HAL库开发,这个cube-mx也就不是必须的。
  • stlink-utility(非必须):stlink是一种下载器,意法半导体(简称st)公司出的专为st产品使用的下载器,这个就是stlink下载器对应的软件。
  • 其他:vscode提示你安装的插件,基本可以无脑安装。

EIDE基础设置

首先贴出官网地址:EIDE

想用EIDE开发,就需要对EIDE进行配置,将上述下载的那一堆工具整合到EIDE里,这样我们才能愉快的使用EIDE。

进入EIDE的子窗口:下方可以看到“操作”栏,展开操作栏我们可以看到:新建项目、打开项目、导入项目、设置工具链、安装实用工具、打开插件设置这几个子菜单。

image.png

实用工具安装

image.png EIDE是提供了部分实用工具的,工具选型里的那些工具如果你不想自己一个一个下,可以看看EIDE是否提供了,如果EIDE提供了的话,可以在安装实用工具子菜单安装,单机安装实用工具,弹出选择框,想安装哪个就单击安装就可以了,我这里安装了open ocdcppcheck两个工具

顺便说,如果不想安装点开后esc按键退出即可,每一项右侧有个对钩或者叉号代表是否已安装。

插件设置

展开最下方有个齿轮打开插件设置,我们单击打开,可能会卡一下,等一下就好。我们主要进行如下配置:

  1. EIDE.ARM.GCC: Install Directory这个是上面提到的gcc的安装目录,例如我这个填写的是D:\software\arm-gcc\10 2021.10,是安装目录不是bin目录哈。
  2. EIDE.ARM.GCC: Prefix这个是gcc的前缀,我们填写arm-none-eabi-
  3. EIDE.ARM.Option: Axf To Elf打勾
  4. EIDE: Display Language 这个是edie的显示语言设置,看个人喜好
  5. EIDE.Open OCD: Exe Path open ocd的exe路径,因为我这使用了eide提供的实用工具的open ocd插件,所以这不用改
  6. EIDE.STLink: Exe Path stlink的exe路径 ,我这是D:\software\stlink-4.6.0\ST-LINK Utility\ST-LINK_CLI.exe,如果是其他下载器就去找EIDE.{下载器}的配置即可

工程创建

对于开发stm32来说,如果不用官方的cube ide,那么工程初始化是个比较麻烦的事情,这里提供三种工程创建的方式。

eide的工程结构介绍

参考官方文档:em-ide.com/zh-cn/docs/…

下面摘抄自官网: 有些文件是必须存在的:

.eide: 此文件夹包含 eide 项目信息、构建器选项 等配置

.eide/eide.json: 此文件用于描述你的项目

不要手动修改此文件!除非你知道你在做什么!

<workspase name>.code-workspace: 该文件是一个 vscode 工作空间文件,VSCode 将把该工作区的设置保存至该文件,您可以在文件资源管理器中双击该文件以直接打开 eide 项目。

剩下的文件或文件夹可以按照自己的喜好来创建。也可以参考其他项目的结构来创建,如果你没有特别的需求或者概念,可以直接用下面提到的从eide模版创建章节来直接创建一个项目。

一个stm32项目的基础配置

image.png

如上图,一个eide项目包含项目资源、芯片支持包、构建配置、烧录配置、项目属性、项目设置。我们挨个过一遍。

  • 项目资源:项目的代码管理,不是在.eide文件夹同级的所有文件都会进入eide,而是在项目资源菜单中管理。如下图鼠标移动到项目资源菜单后出现加号,点击项目可以添加文件夹,我们通常使用普通文件夹即可。

image.png

  • 芯片支持包:这个我没有深入研究(大概)类似于keil的芯片支持包,感兴趣的看官网介绍:em-ide.com/zh-cn/docs/…

  • 构建配置,鼠标移动到该菜单上会出现切换按钮,可以切换构建的工具链,这里我们使用GCC的即可,下方的CPU类型根据实际选择,我的是F103C8T6所以选择Cortex-M3,链接脚本路径按实际填写即可。这个链接脚本如果不知道从哪获取可以使用cube-mx随便创建一个你使用的芯片的项目然后从里面粘贴即可。

  • 烧录配置,鼠标移动到菜单上会出现切换按钮,根据实际选择对应的烧录工具即可,我这里是stlink,所以我选择stlink

  • 项目属性:如下图所示这里是设置c语言的头文件搜索目录以及库搜索目录的地方,最重要的还有预处理宏定义的设置。官方提供的代码(库、头文件、各种源码)需要指定芯片型号才能正确的运行,而指定芯片型号的方式就是通过宏。可以看到下图中包含芯片型号STM32F10X_MDUSE_STDPERIPH_DRIVER两个宏,一个代表芯片是F10x系的芯片一个代表使用标准外设驱动。顺便说一句MD代表的意思表示芯片的容量大小为中等,具体可以看江协科技的视频。

image.png

  • 项目设置:设置项目名称和编译输出目录等配置,可以不用关心。

不管使用哪种工程的创建方式,都需要在上述项目基础配置配置妥当后项目才能正常的构建和下载(烧录)。

从cube-mx创建项目

st官方的工具创建的项目是基于Hal库的,对于芯片的支持比较全面,创建的项目包含所有所需的基础文件,并且图形化配置方便操作,当然缺点也是图形化让用户对于底层的开关一知半解。

  1. 打开cube-mx 选择第一个通过mcu选择芯片image.png
  2. 输入型号进行搜索,选择与手头芯片一致的型号然后创建工程image.png
  3. 可能有些卡,不过没事,我直接略过cube-mx的项目配置,都是图形化的操作,这个感兴趣的可以去搜索cube-mx的项目配置。输入项目的名称和项目的保存路径,这里需要注意的是我们创建一个makefile管理的工程。makefile里会有包含的库和头文件的路径集合,到时候直接按照makefile中的内容设置eide工程的头文件和库搜索路径即可。mx-name.png
  4. 代码生成的配置选择只生成必要的文件和每个外设生成对应的.c和.h文件对image.png
  5. 点击右上方的生成代码按钮完成项目的创建
  6. 完成了代码的创建我们就要将其引入eide进行管理。使用vscode打开刚才新建的工程目录image.png
  7. 切换到eide下并且点击新建工程image.png
  8. 这里注意选择空项目、Cortex-M系列image.png
  9. 保存的时候注意,保存到当前工程的上一级,并且名称要和刚才创建的工程名一致,比如刚才用cube-mx创建的项目叫ok,那么就要保存到ok上一级目录,并且名称也要叫ok。image.png
  10. 这里会提示工程已存在,我们直接点确认。就完成了工程创建,然后我们根据上面一个stm32项目的基础配置章节配置一下工程即可image.png

从eide模版创建

从eide模版创建的工程也是默认使用Hal库(难道Hal真的是主流?)我们直接点击新建工程

  1. 我们直接点击新建工程image.png
  2. 我们选择内置项目模版,然后选择stm32f1带gcc的模版image.png
  3. 然后就没有然后了,是不是很顺滑,根据上面一个stm32项目的基础配置章节配置一下工程即可。

从eide空项目手动创建

  1. 手动的话需要先创建一个空的eide工程,直接新建工程然后选择空工程即可
  2. 去官网下载stm32054软件包,这个软件包包含了f10x系列的官方库代码。
  3. 看江协科技的视频一步一步的将文件放到对应的位置即可。参考b站江协科技的STM32入门教程-2023版
  4. 最后的工程结构如下:src对应江协科技的User,start对应Start,lib对应Library,别忘了eide的宏定义里定义芯片型号和使用外设库的宏image.png

说两句

感谢B站江协科技threekb 两位up主发的视频以及csdn 怠呆写的文章,感谢 eide的维护者github0null让我这个小白能一窥嵌入式的开发大门。如果我这篇文章里有说的不太清楚的地方,读者也可以去上述作者的产出里研究研究。