赞
踩
STM32CubeMX是ST意法半导体近几年来大力推荐的STM32芯片图形化配置工具,允许用户使用图形化向导生成C初始化代码,可以大大减轻开发工作,时间和费用。由于HAL库具有低耦合、通用、抽象了硬件层,使得开发者无需太过关注硬件驱动的实现,使得开发更加的简单快速,更容易维护,因此被越来越多的产品所使用。STM32CubeMX 具有如下特性:
①直观的选择 MCU 型号,可指定系列、封装、外设数量等条件;
②微控制器图形化配置;
③自动处理引脚冲突;
④动态设置时钟树,生成系统时钟配置代码;
⑤可以动态设置外围和中间件模式和初始化;
⑥功耗预测;
⑦C 代码工程生成器覆盖了 STM32微控制器初始化编译软件,如 IAR,KEIL,GCC;
⑧可以独立使用或者作为 Eclipse 插件使用;
⑨可作为 ST的固件包、芯片手册等的下载引擎;
注意:使用STM32CubeMX生成的是HAL库
STM32CubeMX运行环境搭建包含两个部分。首先是Java运行环境安装,其次是
STM32CubeMX软件安装,因为STM32CubeMX依赖于Java。
下载链接:https://www.java.com/zh-CN/
双击安装包即可默认安装,安装完成如下:
安装完成后,按快捷键WIN+R打开运行,输入cmd回车打开终端,在里输入java -version,如显示Java版本信息确认安装成功
下载地址:www.st.com/stm32cube
接下来我们直接双击SetupSTM32CubeMX-6.2.0-Win.exe,点击Next
接受本许可协议
勾选第一项即可
修改安装路径
创建快捷方式
Next继续
安装完成Done
打开
STM32CubeMX只是图形工具,想要生成对应工程还需要对应的STM32Cube固件包,所以新建工程前,我们先来下载和关联 STM32Cube 固件包,点击 Help->Manage embedded software packages
然后弹出管理界面,在该窗口找到 STM32F4 列表选项,勾选 1.26.0 版本。
方法一:下载好之后,会自动关联
方法二:点击后,弹出下面的窗口,然后选择光盘中的对应的固件包,注意这里是压缩包的形式
关联本地 STM32Cube 固件包
关联好固件包我们就可以开始新建工程了
方法一:依次点击“File”,“New Project”即可建新工程。如果之前打开过的话,左侧最近打开的过程一列会有打开的工程列表,直接点击这些工程也可以打开。
方法二:直接点击 ACCESS TO MCU SELECTOR。
点击新建工程后,第一次可能会联网下载一些的文件
进入芯片选型界面,选择具体的芯片型号
进入工程主设计界面后,首先设置时钟源 HSE 和 LSE。图中的标号4和5,我们都选择了 Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。选项 Master Clock Output 1 用来选择是否使能 MCO1 引脚时钟输出。
点击 Clock Configuration选项卡即可进入时钟系统配置栏,从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
这里,我们将配置一个以 HSE 为时钟源,配置 PLL 相关参数,然后系统时钟选择 PLLCLK为时钟源,最终配置系统时钟为 168MHz 的过程。同时,还配置了 AHB,APB1,APB 和 Systick的相关分频系数。由于图片比较大,我们把主要的配置部分分两部分来讲解,第一部分是配置系统时钟,第二部分是配置 SYSTICK、AHB、APB1 和 APB2 的分频系数。
我们把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
① 时钟源参数设置:我们选择 HSE 为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是 8MHz)填写。
② 时钟源选择:我们配置选择器选择 HSE 即可。
③ PLL1 分频系数 M 配置。分频系数 M 我们设置为 4。
④ PLL1 倍频系数 N 配置。倍频系数 N 我们设置为 168。
⑤ PLL1 分频系数 P 配置。分频系数 P 我们配置为 2。
⑥ 系统时钟时钟源选择:PLL,HSI 还是 HSE。我们选择 PLL,选择器选择 PLLCLK 即可。
⑦ 经过上面配置以后此时 SYSCLK=168MHz。
经过上面的 7 个步骤,就配置好 STM32F4 的系统时钟为 168MHz。接下来我们还需要配置AHB、APB1、APB2 和 Systick 的分频系数,为 STM32 的片上外设或 M4 内核设置对应的工作时钟,为后续使用这些硬件功能做好准备。
AHB、APB1 和 APB2 总线时钟以及 Systick 时钟的来源于系统时钟 SYSCLK。其中 AHB总线时钟 HCLK 由 SYSCLK 经过 AHB 预分频器之后得到,如果我们要设置 HCLK 为168MHz(最大为 168MHz),那么我们只需要配置图中标号的地方为 1 即可。得到 HCLK 之后,接下来我们将在图标号⑨~⑪处同样的方法依次配置 Systick、APB1 和 APB2 分频系数分别为 1、4和2。注意!systick 固定为 168MHz,配置完成之后,那么 HCLK=168MHz,Systick=168MHz,PCLK1=42MHz,PCLK2=84MHz
回到 STM32CubeMX的Pinout&Configuration选项,在搜索栏输入PE0后回车
接下来,我们在引脚图中点击 PE0,在弹出的下拉菜单中,选择 IO 口的功能为 GPIO_Output。设置好即可看到引脚从灰色变成绿色,标识该管脚已经启用。
配置完 IO 口功能之后,还要配置 IO 口的速度,上下拉等参数,这些参数我们通过 System Core下的GPIO选项进行配置
我们先配置 PE0,点击④号框里面的 PE0。
- GPIO output level:IO 的初始值,由于 LED 一端接 VCC,另一端接 GPIO,故要点亮 LED灯时,使 GPIO 输出低电平即可。为了一开始让 LED 灯熄灭,我们设置初始值输出高电平。
- GPIO mode:我们已经在视图中配置为推挽输出了,这里不需要修改。
- GPIO Pull-up/Pull-down:默认是无上下拉,我们这里用默认配置。
- Maximum output speed:输出速度配置,默认是低速,我们设置为高速。
- User Label:用户符号,我们可以给 PE0 起一个别名 LED0。
由于CubeMX默认把Debug选项关闭了,这样会给我们带来麻烦:用 CubeMX 生成的工程编译下载一次后,后续再次下载就会提示错误,因此我们要把 Debug 选项打开。
如果已经不小心关闭了 Debug 选项,那么下次下载的时候按住复位键,等到工程提示的时候松开复位键即可,因为 STM32 的芯片默认复位上电时的 Debug 引脚功能是开启的。
选择 Project Manager-> Project选项用来配置工程的选项,我们了解一下里面的信息。
- Project Name:工程名称,填入工程名称(半角,不能有中文字符)
- Project Location:工程保存路径,点击 Browse 选择保存的位置(半角,不能有中文字符)
- Toolchain Folder Location:工具链文件夹位置,默认即可。
- Application Structure:应用的结构,选择 Basic(基础),不勾选 Do not generate the main(),因为我们要其生成 main 函数。
- Toolchain/IDE:工具链/集成开发环境,我们使用 Keil,因此选择 MDK-ARM,Min Version 选择 V5.27,这里根据 CubeMX 的版本可能会有差异,我们默认使用 V5 以上的版本即可。
- Linker Settings 链接器设置:
Minimum Heap Size 最小堆大小,默认(大工程需按需调整)。
Minimum Stack Size 最小栈大小,默认(大工程需按需调整)。- MCU and Firmware Package 是 MCU 及固件包设置:
MCU Reference:目标 MCU 系列名称。
Firmware Package Name and Version:固件包名称及版本。
接下来我们配置生成代码的配置选项。打开 Project Manager-> Code Generator 选项,Generated files 生成文件选项,勾选 Generate peripheral initialization as a pir of ‘.c/.h’files per peripheral,勾选这个选项的话将会将每个外设单独分开成一组.c、.h 文件,使得代码结构更加
的清晰
至此工程最基础配置就已经完成,点击蓝色按钮(SENERATE CODE)就可以生成工程
完整的 STM32F4 工程就已经生成完成
- Drivers 文件夹存放的是 HAL 库文件和 CMSIS 相关文件。
- MDK-ARM 下面存放的是 MDK 工程文件。
- Src 文件夹下面存放的是工程必须的部分源文件。
- Template.ioc 是 STM32CubeMX 工程文件,双击该文件就会在 STM32CubeMX 中打开。
在弹出来的窗口中点击 Open Project 就打开 MDK 工程
使用CubeMX 可以帮助我们快速搭建工程,使用户专注于应用开发,但 STM32 的开发与硬件密切相关,对 STM32 开发来说,抛开底层只专注做应用并不实际,毕竟无法使用一套通用设计来满足不同用户的需求。
本篇只讲CubeMX的基础使用,不对CubeMX的使用过多讲解。正常项目基于寄存器版或者标准库,学习CubeMX生成的HAL库主要是为了后续的电机FOC矢量控制与RT-Threa物联网打基础
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。