《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Windows版 - 1]
Posted Bruceoxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Windows版 - 1]相关的知识,希望对你有一定的参考价值。
Keil MDK、IAR等工具是各类STM32单片机使用的主要IDE,不过都是收费的,在使用中很可能牵扯到一定的版权问题。GCC(GNU Compiler Collection)作为GNU计划的一部分,是完全免费的,使用GCC的代价仅是对造成的不良后果(比如程序跑飞把外围电路烧了,或者死机崩溃丢失了数据之类的问题)负全责,即GPL协议的“你随便用你修改,但出了事儿别找我”。
基于MDK、IAR的开发环境搭建请查看笔者博文:
好了,言归正传,接下来说说STM32的开发都需要那些软件吧,而且都是开源免费的,随便你玩,玩坏了我可不负责哈!
(1) STM32CubeMX:STM32CubeMX是一个配置STM32代码的工具,用于生成带makefile的HAL库工程。注意STM32CubeMX是依赖Java的,所以要确保你电脑上安装了JRE。
关于ST相关产品的介绍前参看笔者文章:
(2) VSCode:超好用的编辑器,支持Windows、Linux、Mac,关键还免费,可谓业界良心了。
(3) GNU Arm Embedded Toolchain:ARM用的GNU工具链,包括编译器(gcc),调试器(gdb),链接器(ld)和其它工具,支持Windows、Linux、Mac。
(4) Git:代码管理工具,但是我们这里要使用的是下载git附带的git bash。这个bash是基于mingw的,非常轻量,甚至于make都没有,但是可以安装相应的插件来支持make,wget等工具。
(5) OpenOCD:一个开源的片上调试器(Open On-Chip Debugger)。
1 STM32CubeMX软件安装与使用
1.1 JDK安装
安装STM32CubeMX之前,电脑中要有java运行时环境(JRE),否则会报错:
因为STM32CubeMX是Java写的,不然怎么能跨平台,这也是为什么在安装前需要检查Java环境。如果你安装过JDK,那么跳过此步骤即可。
STM32CubeMX要求JRE最低版本是1.7.0_45,如果你电脑已安装JRE版本大于1.7.0_45,则可以不用再下载安装。
http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
第一步:下载后双击JavaSetup8u261.exe即可安装JRE。
接受许可,根据自己电脑系统选择下载(我以Windows版本为例),如下图:
第二步:按照提示完成安装
第三步:查看是否安装成功
打开命令提示符,输入java会有如下显示,则安装成功。
注意:打开命令提示符方法
win+R 输入cmd 即可。
还可以查看Jre版本:
Java -version
1.2 STM32CubeMX安装
1. STM32CubeMX下载
首先去ST官网下载STM32CubeMX。
下载后,解压压缩包,会有如下四个文件。
SetupSTM32CubeMX-6.0.1.app文件夹是MAC系统的安装包,SetupSTM32CubeMX-6.0.1.linux是Linux系统的安装脚本,安装时需要将整个压缩文件放在Linux系统中的某个目录下按安装,Linux系统安装时其实调用的SetupSTM32CubeMX-6.0.1.exe文件,因此需要将SetupSTM32CubeMX-6.0.1.exe和一同放在Linux系统才能进行安装,SetupSTM32CubeMX-6.0.1.exe是Windows的安装包,笔者使用的Windows 10系统,在Windows安装只需要SetupSTM32CubeMX-6.0.1.exe文件即可。不管任何系统,除了初始化安装方式不一样,安装过程都是一样的。好了,我们开始安装吧。
2. STM32CubeMX安装
双击SetupSTM32CubeMX-6.0.1.exe,开始安装。
同意许可声明,然后点击“next”。
同意ST privacy and Teams of use,点击“next”。
选择安装路径。
接下来就是开始安装。
等待安装完成。
1.3 HAL库安装
1.3.1 HAL库在线安装
打开安装好的 STM32CubeMX 软件, 进入库管理界面(Help -> Manage embedded…),会有一个列表, 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功。 如下图:
这种方式比较简单,需要联网在线下载,可能需要等待一段时间。如果刷新之后,可以看到最新版本,以及一些老版本HAL库。
等待安装完成即可。
1.3.2 HAL库离线安装
离线安装的前提是需要下载好离线包,方法有两种:1.从库管理界面直接导入离线包。2.直接解压离线包到指定路径下。
1.导入离线包
2.直接解压
先在Help -> Updater Settings设置HAL库路径
直接解压HAL库离线包,放在前面设置的库路径下。
1.4新建工程
接下来从选择自己型号MCU,到生成代码并成功运行的创建过程。
1.打开STM32CubeMX,进入MCU选择器
进入选择器时会联网更新数据库,可能需要等待一下。
2.选择对应型号MCU
【注】第一次使用某单片机,在点击生成代码以后,如果没有相应的固件,STM32CubeMX软件会提示需要下载固件,点击确定即可在线下载。保持联网,在线安装很快,当然也可先安装HAL库,参见上一节内容。
3.时钟源选择
如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC(如下图)。如果使用默认内部时钟(HSI),这一步可以略过。
4.选择GPIO(LED)引脚
我这里使用一个GPIO引脚(PB0)控制LED亮灭。
以点亮LED为例。在我的电路中,LED1连接的引脚是PB0,我把引脚PB0设置为输出。
5.配置时钟Clock
STM32CubeMX配置时钟的界面非常方便,有很多提示(比如最大时钟),很多地方直接点击选择就行了。默认高速时钟是使用内部(HSI),而且CPU时钟配置的比较低。以我选择的STM32F103,外部8M晶振为例(如下图)。
6.工程管理
工程管理器的内容比较多,大部分都默认即可,这里讲述几个要点(如下图)
以上操作就基本配置完成了一个简单的Demo工程,通过 STM32CubeMX 生成 Makefile 工程。Project Manager配置如下。
Toolchain/IDE 选择 Makefile。
7.生成工程
最后只需要点击“生成代码”即可。
最后工程目录如下:
8.添加代码
当然,以上生成的代码还不够完善,需要添加自己的应用代码。添加在主函数添加一下应用代码:
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
【注】
1.延时500ms时间需要你时钟配置正确。
2.LED对应引脚需要与你开发实际一致(本文以PB0为例)。
2 GCC编译工具
编译代码需要编译器,Linux系统的编译器是GCC,而Windows的C/C++编译器是Microsoft Visual C++,那么要想在Windows也能GCC等一系列编译工具,就需要安装MinGW。
MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。
MinGW 是用于进行 Windows 应用开发的 GNU 工具链(开发环境),它的编译产物一般是原生 Windows 应用,虽然它本身不一定非要运行在 Windows 系统下(是的 MinGW 工具链也存在于 Linux、BSD 甚至 Cygwin 下)。说的通俗点,MinGW就是你在Windows下使用GNU工具链的一个编译工具。
MinGW编译的程序只能在X86上运行,不能运行在嵌入式的硬件平台,因为嵌入式平台大都是ARM体系结构,因此这就需要一个在Windows环境下能使用GNU编译ARM体系结构的编译工具,这也就是交叉编译工具。
所谓交叉编译工具就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行。
做过嵌入式开发的朋友都知道,在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。
嵌入式开发流程大致就是在宿主机完成目标的开发工具,使用功能交叉编译工具生成固件,将固件烧写到目标机,在开发初期,还需要在线调试等工作,这就需要诸如J-link等调试工具。
STM32属于ARM体系结构,在Windows环境下开发也需要借助交叉编译工具。
gcc-arm-none-eabi就是一个基于ARM的交叉编译工具链,而且还是开源的,适用于Arm Cortex-M和Coretex-A系列处理器,包括GNU编译器(GCC),以及GDB,不仅适用于Windows,还适用于Linux,MacOS上的交叉编译。
好了,直接看下载地址吧。
【注】这里要选择GUN-RM下的工具,GUN-A是Cortex-A系列的交叉编译工具。
下载后解压,并把安装目录下的bin文件夹添加到环境变量:
然后在命令窗口中输入下面的命令验证安装是否成功:
#arm-none-eabi-gcc -v
如果有信息输出,那就是装好了。
3 Visual Studio Code安装与配置
3.1 Visual Studio Code安装
1.根据使用的操作系统,直接从 Visual Studio Code 官网下载安装最新版。
安装很简单,这里就不在赘述了。
2.打开 VS Code,点击 “Extensions” 图标,搜索 C/C++ 插件(由 Microsoft 提供),点击安装。
3.安装中文插件。
重启应用,Visual Studio Code就是中文界面了。
3.2安装EIDE
在 VS Code 的扩展应用商店搜索 EIDE, 并下载安装。
安装成功后, 在左侧应用栏就能够看到一个类似于 CPU 的图标, 表示安装成功。
接下来就是配置 EIDE。点击 VS Code 左下角【管理】, 并选择【设置】选项, 进入VS Code 设置界面。
在用户设置-扩展-Embedded IDE中, 需要更改的配置如下 (路径相关设置 根据自己实际情况 进行设置)。
ARM.GCC:Install Directory:D:\\gcc\\ gcc-arm-none-eabi-10.3-2021.07
ARM.GCC:Prefix:arm-none-eabi-
3.3 EIDE 创建新的工程项目
点击‘EIED’下的‘新建项目’,选择STM32CubeMX创建的工程路径。
最后创建的工程如下:
接下来就是配置工程。
点击“在settings.json中编辑",修改为自己安装git bash的路径:
"terminal.integrated.shell.windows": "C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"
打开终端,就可以使用Bash了。
VS Code只是一个编辑器,它检查代码的时候并不会去读makefile,因此有些宏定义需要自行配置。
3.3.1 配置c_cpp_properties.json文件
打开c_cpp_properties.json配置文件,输入一下内容:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"D:/gcc/gcc-arm-none-eabi-10.3-2021.07/arm-none-eabi/include",
"${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": [
"USE_HAL_DRIVER",
"STM32F103xE"
],
"compilerPath": "D:/gcc/gcc-arm-none-eabi-10.3-2021.07/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}"
]
}
}
],
"version": 4
}
name:这是用于标记使用的平台的标签。除了win32还可以选Linux或Mac。也就是说,这个json里“configuration“下可以写三组配置,只要每组配置前面写上不同的平台,即可在不同的操作系统上使用就会自动适配不同的配置。
includePath:头文件路径。第一个目录是C语言标准库的目录, 剩下的几个目录直接从Makefile里复制然后稍微修改下即可。"${workspaceFolder}"表示项目文件夹;
defines:全局宏定义,这里的宏定义只写在源码中。在MDK是通过配置Project Options里的全局宏定义的。
compilerPath:编译器的路径。
intelliSenseMode:因为我用的是gcc所以选gcc-x64。
browse:源文件搜索路径。用来做代码补全和查找定义的。这个路径和includePath不同,browse.path是自动递归所有子目录的。而include.path默认只看本目录。
3.3.2 配置tasks.json文件
配置tasks.json文件,如果没有则需要创建tasks.json文件,内容如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make",
"args": [
"-j4"
]
},
{
"label": "clean",
"type": "shell",
"command": "make",
"args": [
"clean"
]
}
]
}
这个文件创建了两个任务,分别叫做build和clean,build任务就是在bash里执行了make -j4,也就是使用多线程编译,clean任务就是在bash里执行了make clean。
欢迎访问我的网站
BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
欢迎订阅我的微信公众号
以上是关于《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Windows版 - 1]的主要内容,如果未能解决你的问题,请参考以下文章
《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Linux版 - 3]
《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Linux版 - 3]
《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Linux版 - 1]
《嵌入式 - STM32开发指南》手把手教你搭建STM32开发环境 [Linux版 - 1]