|
|
|
@ -136,6 +136,22 @@ VBUS是TYPE-C的5V,VSWD是调试接口SWD的5V,通过防倒灌电路使得
|
|
|
|
|
|
|
|
|
|
# 3. 开发环境
|
|
|
|
|
|
|
|
|
|
## 3.1. 开发软件
|
|
|
|
|
|
|
|
|
|
### 3.1.1. 开软件开发工具(p45)
|
|
|
|
|
|
|
|
|
|
1. STM32CubeMX:图形化的芯片配置工具,可以完成目标选择、引脚分配、外设配置和始终配置等工作,并自动生成初始化代码和应用程序的工程框架;
|
|
|
|
|
2. STM32CubeIDE:基于eclipse 的 c/c++ 工具链的集成开发环境,提供代码编辑、编译、下载和调试等多种功能,同时将STM32CubeMX以插件的方式继承到IDE中。
|
|
|
|
|
|
|
|
|
|
### 3.1.2. 嵌入式软件
|
|
|
|
|
|
|
|
|
|
1. STM32CubeMCU Packages (MCU固件包)
|
|
|
|
|
1. STM32Cube HAL APIs
|
|
|
|
|
2. STM32Cube LL APIs
|
|
|
|
|
3. 中间件
|
|
|
|
|
|
|
|
|
|
## 3.2. 开发环境安装
|
|
|
|
|
|
|
|
|
|
[视频:安装stm32CubeIDE](https://www.bilibili.com/video/BV1HM411b78E/?spm_id_from=333.788&vd_source=3c8e333d6657680a469ddf0238f01d6a)
|
|
|
|
|
|
|
|
|
|
书上介绍的开发环境是Keil开发环境,这个在51中也使用过,但是该软件是属于商业软件,需要购买。因此我们使用意法半导体提供的免费开发环境stm32cubeide,其开发过程与书上讲的几乎完全一致,且集成度更好,更便于使用。
|
|
|
|
@ -163,7 +179,7 @@ STM32CubeIDE集成了:STM32CubeMX:芯片选型、配置、代码生产等,
|
|
|
|
|
5. 工程配置
|
|
|
|
|
6. 程序编写
|
|
|
|
|
|
|
|
|
|
## 3.1. 升级STLink固件
|
|
|
|
|
## 3.3. 升级STLink固件
|
|
|
|
|
|
|
|
|
|
STLink 调试器版本需更新,否则可能无法下载程序和进行调试。
|
|
|
|
|
|
|
|
|
@ -176,9 +192,9 @@ STLink 调试器版本需更新,否则可能无法下载程序和进行调试
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 3.2. 示例:LED闪烁
|
|
|
|
|
## 3.4. 示例:LED闪烁
|
|
|
|
|
|
|
|
|
|
### 3.2.1. 新建项目
|
|
|
|
|
### 3.4.1. 新建项目
|
|
|
|
|
|
|
|
|
|
File->New->STM32 Project 出现以下界面:
|
|
|
|
|
|
|
|
|
@ -194,7 +210,7 @@ File->New->STM32 Project 出现以下界面:
|
|
|
|
|
|
|
|
|
|
选择开发固件(其实就是函数编程的接口版本,类似C开发中使用的三方库),一般不用更改,直接点击2位置的Finish完成。如果遇到下图对话框,选择Yes。
|
|
|
|
|
|
|
|
|
|
### 3.2.2. 硬件配置
|
|
|
|
|
### 3.4.2. 硬件配置
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
@ -214,7 +230,7 @@ File->New->STM32 Project 出现以下界面:
|
|
|
|
|
|
|
|
|
|
PA6变绿,并且有个图钉,表示这个端口已经被配置和占用。使用ctl+s 保存更改,IDE会询问是否生成代码框架,当然选择Yes。
|
|
|
|
|
|
|
|
|
|
### 3.2.3. 加入代码
|
|
|
|
|
### 3.4.3. 加入代码
|
|
|
|
|
|
|
|
|
|
打开 main.c 大约在101 行左右,输入以下代码。注意,注释代码是IDE自动生成的,不要删除!
|
|
|
|
|
|
|
|
|
@ -244,7 +260,7 @@ PA6变绿,并且有个图钉,表示这个端口已经被配置和占用。
|
|
|
|
|
|
|
|
|
|
注意接口应该是SWD,一般不用修改,直接OK后观察开发板的效果。
|
|
|
|
|
|
|
|
|
|
### 3.2.4. 调试
|
|
|
|
|
### 3.4.4. 调试
|
|
|
|
|
|
|
|
|
|
如下图,选择编译模式为Debug
|
|
|
|
|
|
|
|
|
@ -283,20 +299,20 @@ PA6变绿,并且有个图钉,表示这个端口已经被配置和占用。
|
|
|
|
|
|
|
|
|
|
Stm32CubeIDE 其实是由多个工具所构成:
|
|
|
|
|
|
|
|
|
|
- Stm32Cube:该工具是一个独立的工具,可以嵌入到 Stm32CubeIDE 中进行工作。就是在本章 3.2.1 中新建项目用到的这个工具。这个工具包含了芯片选择、芯片配置、芯片相关开发资源下在与更新、代码框架生成和更新等功能。可以这么说,这是STM32开发工具的核心,IDE只是更容易编程和调试而已。
|
|
|
|
|
- hEclipse CDT IDE:这是基于Eclipse的C/C++开发环境,用于便捷的代码开发和调试。
|
|
|
|
|
- Stm32CubeMX:该工具是一个独立的工具,可以嵌入到 Stm32CubeIDE 中进行工作。就是在本章 3.2.1 中新建项目用到的这个工具。这个工具包含了芯片选择、芯片配置、芯片相关开发资源下在与更新、代码框架生成和更新等功能。可以这么说,这是STM32开发工具的核心,IDE只是更容易编程和调试而已。
|
|
|
|
|
- Eclipse CDT IDE:这是基于Eclipse的C/C++开发环境,用于便捷的代码开发和调试。
|
|
|
|
|
- GCC for ARM:C/C++交叉编译环境,用于生成目标代码。
|
|
|
|
|
- ST-Link 工具:下载和调试工具,用于把目标代码下载到开发板,或者与Eclipse协同对代码进行调试。
|
|
|
|
|
|
|
|
|
|
## 4.1. Stm32Cube
|
|
|
|
|
## 4.1. Stm32CubeMX
|
|
|
|
|
|
|
|
|
|
该工具是整个STM32开发的核心,在IDE中,有个后缀为ioc的文件:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
这就是Stm32Cube所维护的文件,该文件中有当前MCU的所有配置信息、项目所依赖的软件功能配置、代码生成控制等信息。通过该工具,最终目的是生成一个代码框架,我们只需要在代码框架下加入我们的业务逻辑就好了。这样就避免了繁琐的芯片初始化、配置等过程,这些工具都给你做好了。
|
|
|
|
|
这就是Stm32CubeMX所维护的文件,该文件中有当前MCU的所有配置信息、项目所依赖的软件功能配置、代码生成控制等信息。通过该工具,最终目的是生成一个代码框架,我们只需要在代码框架下加入我们的业务逻辑就好了。这样就避免了繁琐的芯片初始化、配置等过程,这些工具都给你做好了。
|
|
|
|
|
|
|
|
|
|
在IDE中,双击后缀为ioc的文件就会打开 Stm32Cube 的界面,如果进行了修改,保存的时候会询问是否重新生成代码框架。
|
|
|
|
|
在IDE中,双击后缀为ioc的文件就会打开 Stm32CubeMX 的界面,如果进行了修改,保存的时候会询问是否重新生成代码框架。
|
|
|
|
|
|
|
|
|
|
这个工具还有一个功能是维护 MCU Packages 就是不同系列MCU的底层框架代码和一些附加功能代码(网络、USB、操作系统等)。通过 Help 菜单中的 Manage Embedded Software Packages 功能可以打开。可以看到,支持的MCU系列的相关软件包。
|
|
|
|
|
|
|
|
|
@ -306,9 +322,9 @@ Stm32CubeIDE 其实是由多个工具所构成:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
上面就是整个的开发的流程,STM32Cube在配置方面减少了开发者大量复杂且容易出错的芯片配置和初始化工作,使得开发者可以专注自己的业务逻辑实现。
|
|
|
|
|
上面就是整个的开发的流程,STM32CubeMX在配置方面减少了开发者大量复杂且容易出错的芯片配置和初始化工作,使得开发者可以专注自己的业务逻辑实现。
|
|
|
|
|
|
|
|
|
|
接下来我们来看看STM32Cube帮助我们做了些什么,我们的代码结构如下:
|
|
|
|
|
接下来我们来看看STM32CubeMX帮助我们做了些什么,我们的代码结构如下:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
@ -317,7 +333,7 @@ Stm32CubeIDE 其实是由多个工具所构成:
|
|
|
|
|
- Core 用户的核心代码在这里;
|
|
|
|
|
- Drivers 硬件抽象层的代码在这里,包括各种外围硬件驱动,操作系统配置等;
|
|
|
|
|
- Debug/Release 和传统C/C++一样,编译的中间代码;
|
|
|
|
|
- Blink.ioc 工程文件,被 Stm32Cube 所维护;
|
|
|
|
|
- Blink.ioc 工程文件,被 Stm32CubeMX 所维护;
|
|
|
|
|
- 其他文件。。。
|
|
|
|
|
|
|
|
|
|
其实,大部分时间,开发者只需要维护 Core 中的部分代码即可。
|
|
|
|
@ -378,9 +394,9 @@ HAL_Delay(1000); 表示使用延时1000毫秒;
|
|
|
|
|
|
|
|
|
|
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); 两个参数,第一个代表端口,就是上面的常量定义的LED端口;第二个代表具体的引脚,就是LED的端口。
|
|
|
|
|
|
|
|
|
|
> 其实框架还生成了很多工作,包括MCU的时钟初始化、总线初始化、内存初始化等工作。这些工作都使用 Stm32Cube 的配置进行,代码是自动生成的,一般不用关心。在后续的工作当中,我们还会用到很多Stm32Cube的配置功能。
|
|
|
|
|
> 其实框架还生成了很多工作,包括MCU的时钟初始化、总线初始化、内存初始化等工作。这些工作都使用 Stm32CubeMX 的配置进行,代码是自动生成的,一般不用关心。在后续的工作当中,我们还会用到很多Stm32CubeMX的配置功能。
|
|
|
|
|
|
|
|
|
|
## 4.4. Stm32Cube 基本功能
|
|
|
|
|
## 4.4. Stm32CubeMX 基本功能
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|