VSCode环境下STM32开发环境搭建指南

先导

此文章是跟着b站ControlCoreX博主写的,写本文章的目的是用来自己学习使用

vscode部分

workspace

新打开一个文件夹vscode就默认这个文件夹默认为一个workspace,这样可以实现工程隔离

setting

1.可以通过UI界面设置

2.通过setting.json文件进行设置,分两种:

        user settings 这个是对所有文件生效

        workspace settings 针对workspace设置,这个设置覆盖 user settings 

在一个workspace中有一个(或新建).vscode文件夹,其中有setting.json文件,就是对这个workspace进行设置的

task

自动化工具帮助我们linting(代码校验)、building(编译)、packaging(打包)、testing(测试)或者部署(部署),省去打开命令行完成这些操作

安装必要的工具链

1.下载 cmake(官网Windows x64 ZIP ,网址 Download CMake)√

2.下载 ninja (在github上下载,ninja-win.zip ,网址GitHub – ninja-build/ninja: a small build system with a focus on speed) √

3.下载 arm gnu toolchain (网址 wArm GNU Toolchain Downloads – Arm Developer)√

4.openocd (网址 Download OpenOCD for Windows)  √

5.clangd (网址 GitHub – llvm/llvm-project: The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.)

将所有文件解压后放在同一个文件夹里面

1.为其添加环境变量path

C:\software\Toolchain\cmake-4.0.2-windows-x86_64\bin

C:\software\Toolchain\ninja

C:\software\Toolchain\arm-gnu-toolchain\bin

C:\software\Toolchain\OpenOCD-20240916-0.12.0\bin

2.系统变量

变量名 : OPENOCD_SCRIPTS

变量值 :C:\software\Toolchain\OpenOCD-20240916-0.12.0\share\openocd\scripts

安装vscode必要的插件

1.clangd

2.CMAKE Language Support

3.Cortex-Debug

4.Task Buttons

5.LinkerScript

构建系统介绍

构建系统的层次

分为三层

cmake(第三层) → make工具(第二层) → 编译器(第一层)

        刚开始使用VC++ 6.0 时进行编译,但同时也省略了很多操作。

        在原始情况下,应该是写好后,在命令行中进行编译操作,编译完成得到可执行文件后,再执行可执行文件。

        但如果是很多文件呢?好几百个文件在命令行中进行编译很麻烦,所以使用make工具进行执行。

        所以诞生了make工具进行编译。当我写好了makefile之后(makefile就是给make工具说要编译哪些文件,使用什么东西编译等等),我们在makefile的workspace中调用make工具,就可以对这个makefile进行执行,然后编译工程。

        但是makefile写起来也很难写,所以有人开发了CMake。就只需要写cmakelists就好,会帮助生成makefile。

什么是MinGW?

        Windows上的gnu工具链,编译、链接等等,gnu工具本来只能在linux上运行,用MinGW就可以在Windows上运行,但是用MinGW编译完成后只能在PC上运行,不能在单片机上运行。要能在单片机上运行需要特殊的编译器,下载MinGW的目的是用里面很多工具中的mingw32-make这个工具来进行makefile编译

我们搭建的开发环境和Keil集成的IDE环境有什么不一样

        自己开发的环境高度定制化。Keil的构建系统的层次一样,都需要完成那些操作来进行编译,所以我们可以自己定制一个高度定制化的IDE来完成这些操作

什么是Ninja

        make工具不需要第三层工具就可以完成,但是ninja需要第三层工具生成才可以,比如CMake生成才可以使用,在这里ninja就是make工具

什么是交叉编译器

        交叉编译器(如arm-gnu-toolchain)是运行在电脑上的,但是它所编译出的程序是运行在单片机上的。更深层就是运行编译器的CPU架构与得到可执行文件的CPU架构不同,则称这种编译器为交叉编译器

clangd llvm

        完成语法提示、代码高亮等辅助工具。我们下载的clangd.exe是用来提供功能(后端),在vscode中下载的clangd插件是用来提供代码补全、高亮等辅助的(前端)

STM32工程结构与CMSIS

一个工程都需要什么文件?哪些是必须的,哪些是非必须的?

每个文件有什么用?

stm32f4xx_hal_conf.h

        为什么我们在hal库开启了一个外设,keil中就有了那个外设对应的文件接口函数等等。其中是使用了条件编译,比如下图,如果宏定义了 HAL_CAN_MODULE_ENABLED则包含 "stm32f4xx_hal_can.h" 头文件,就有了CAN外设了

stm32f4xx.h头文件

        在总的头文件定义宏来选择是哪个芯片,如果定义STM32F405xx就包含STM32F405所对应的具体的配置头文件

        如果是用hal库则宏定义 USE_HAL_DRIVER 即可调用

       

        其中还包含了各个文件都需要用到的一些内容,比如对于寄存器的操作

stm32f405xx.h

        选择完成哪个芯片之后在哪个具体芯片的头文件,这个具体的头文件包含了

所有外设的数据结构和地址映射

外设寄存器声明和位定义

访问外设寄存器硬件的宏

        比如ADC外设里面有什么寄存器

system_stm32f4xx.c

        主要有两个函数和一个全局变量,全家变量控制始终频率,SystemInit()完成始终配置,SystemCoreClockUpdate()更新时钟频率

st文件夹下
        STM32F4xx_HAL_Driver 

                外设驱动

        其中有一个 stm32f4xx_hal.h 文件

                里面包含对整个hal库的配置文件

arm文件夹下

        

        core_cm4.h

                寄存器抽象,和外设寄存器不同,这个寄存器是内核中的寄存器

                主要是对内核寄存器的抽象,提供接口,访问内核,并且可以控制内核

        内核和片上外设区别

                只要内核是一样的,那么我们的驱动文件就是一样的比如都是 Cortex-M4 芯片,那么内核的驱动都是一样的,比如stm32f407和stm32f405都是Cortex-M4内核,那么他们的内核驱动都是一样的,然后stm32f407和stm32f405因为片上外设不同,分了很多不同的驱动文件

当搭建一个工程时,需要找哪些文件?

        所以如果需要自己构建工程,需要找的文件是third_party目录下的arm和st文件

        在 st 的 github 仓库里面可以找到对应的驱动

STMicroelectronicshttps://github.com/STMicroelectronics        1.cmsis-device-f4-master

        2.stm32f4xx-hal-driver-master

        在arm官网找 arm 内容
Arm Softwarehttps://github.com/ARM-software

        1.CMSIS-Compiler-main

        2.cmsis-6 ,只要其中CMSIS文件夹里Core文件夹内容(就是 cmsis-core )

什么是CMSIS,里面各个组件是用来干什么的?

作者:FFF8E7s

物联沃分享整理
物联沃-IOTWORD物联网 » VSCode环境下STM32开发环境搭建指南

发表回复