当前位置 博文首页 > 不积跬步,无以至千里:STM32F4 HAL库开发 -- STM32CubeMX

    不积跬步,无以至千里:STM32F4 HAL库开发 -- STM32CubeMX

    作者:[db:作者] 时间:2021-08-28 16:29

    一、STM32CubeMX 简介

    STM32CubeMX 是 ST 意法半导体近几年来大力推荐的 STM32 芯片图形化配置工具, 允许用户使用图形化向导生成 C 初始化代码,可以大大减轻开发工作,时间和费用。 STM32CubeMX几乎覆盖了 STM32 全系列芯片。它具有如下特性:
    ① 直观的选择 MCU 型号,可指定系列、封装、外设数量等条件
    ② 微控制器图形化配置
    ③ 自动处理引脚冲突
    ④ 动态设置时钟树,生成系统时钟配置代码
    ⑤ 可以动态设置外围和中间件模式和初始化
    ⑥ 功耗预测
    ⑦ C 代码工程生成器覆盖了 STM32 微控制器初始化编译软件,如 IAR, KEIL, GCC。
    ⑧ 可以独立使用或者作为 Eclipse 插件使用

    对于 STM32CubeMX 和 STM32Cube 的关系这里我们还需要特别说明一下, STM32Cube包含 STM32CubeMX 图形工具和 STM32Cube 库两个部分,使用 STM32CubeMX 配置生成的代码,是基于 STM32Cube 库的。也就是说,我们使用 STM32CubeMX 配置出来的初始化代码,和 STM32Cube 库兼容,例如硬件抽象层代码就是使用的 STM32 的 HAL 库。不同的 STM32 系列芯片,会有不同的 STM32Cube 库支持,而 STM32CubeMX 图形工具只有一种。所以我们配置不同的 STM32 系列芯片,选择不同的 STM32Cube 库即可。

    stm32cubemx用户手册中文版下载:
    https://www.st.com/zh/development-tools/stm32cubemx.html#
    在这里插入图片描述
    在这里插入图片描述

    二、STM32CubeMX 运行环境搭建

    STM32CubeMX 运行环境搭建包含两个部分。首先是 Java 运行环境安装,其次是
    STM32CubeMX 软件安装。 对于 Java 运行环境,大家可以到 Java 官网 www.java.com 下载最新的 Java 软件。这里大家需要注意, STM32CubeMX 的 Java 运行环境版本必须是 V1.7 及以上,如果你的电脑安装过 V1.7 以下版本,请先删掉后重新安装最新版本。
    安装完 Java 运行环境之后, 为了检测是否正常安装,我们可以打开 Windows 的命令输入框,输入: java -version 命令,如果显示 Java 版本信息,则安装成功。
    在这里插入图片描述
    按照提示安装STM32CubeMX,安装完成后打开软件,界面如下图:
    在这里插入图片描述
    在线安装HAL库:
    打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages
    在这里插入图片描述
    会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功。
    在这里插入图片描述

    三、使用 STM32CubeMX 工具配置工程模板

    大多数情况下,我们都只使用STM32CubeMX来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在STM32CubeMX中完成的,需要用户自己根据需求来实现。使用STM32CubeMX配置工程的一般步骤是:
    1)工程初步建立和保存
    2)RCC设置
    3)时钟系统(时钟树)配置
    4)GPIO功能引脚设置
    5)生成工程源码
    6)编写用户代码
    接下来我们将按照上面6个步骤,依次教大家使用STM32CubeMX工具生成一个完整的工程。

    1、工程初步建立和保存

    工程建立的方法有两种,第一种方法是打开STM32CubeMX之后再主界面点击 New Project 按钮,第二种方法是在菜单栏依次点击 File->New Project。
    在这里插入图片描述
    点击新建工程按钮之后,会弹出MCU选择窗口。我们依次在选项卡 Series, Lines 和 Package之下选择与我们使用的芯片 STM32F407ZGT6 对应的参数, 然后选择对应的芯片型号, 最后点击Start Project按钮。
    在这里插入图片描述
    进入Pinout选项卡,这个时候界面会展示芯片完整引脚图。
    在这里插入图片描述
    在引脚图,我们可以对引脚功能进行配置。图中黄色的引脚主要是一些电源和GND引脚。如果某个引脚被使用,那么会显示为绿色。

    外设和中间件树面板中使用的图标和颜色方案:
    在这里插入图片描述

    2、RCC设置

    对于STM32芯片而言,RCC配置的重要性不言而喻。在STM32CubeMX中,RCC相关设置却非常简单,因为它把时钟系统独立出来设置。在操作界面,搜搜RCC,点击进入RCC配置栏。
    在这里插入图片描述
    设置:
    设置选项 High Speed Clock( HSE )的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)
    在这里插入图片描述

    3、时钟系统(时钟树)配置

    在使用STM32CubeMX配置时钟树之前,大家需要充分理解STM32时钟系统。
    Clock Configuration 选项卡即可进入时钟系统配置栏。
    在这里插入图片描述
    进入Clock Configuration配置栏之后可以看到,界面展现一个完整的STM32F407时钟系统框图。从这个时钟配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
    我们把系统时钟配置分为6个步骤,分别用①~⑥标号表示,详细过程为:
    ① 时钟源参数设置: HSE 或者 HSI 配置。这里我们选择 HSE 为时钟源,所以我们之前必须在 RCC 配置中我们开启 HSE。
    ② 时钟源选择: HSE 还是 HSI。这里我们配置选择器选择 HSE 即可。
    ③ PLL 分频系数 M 配置。分频系数 M 我们设置为 25。
    ④ 主 PLL 倍频系数 N 配置。倍频系数 N 我们设置为 336。
    ⑤ 主 PLL 分频系数 P 配置。分频系数 P 我们配置为 2。
    ⑥ 系统时钟时钟源选择: PLL,HSI 还是 HSE。 这里毫无疑问,我们选择 PLL,选择器选择PLLCLK 即可。
    经过上面6个步骤,就会生成标准的180MHz系统时钟。接下来我们只需要配置AHB,APB1,APB2和Systick的分频系数,就可以完全实现函数Stm_Clock_Init配置的时钟系统。
    AHB, APB1 和 APB2 总线时钟以及 Systick 时钟的最终来源都是系统时钟 SYSCLK。其中AHB 总线时钟 HCLK 是由 SYSCLK 经过 AHB 预分频器之后的来,如果我们要设置 HCLK 为180MHz,那么我们只需要配置图中标号⑦的地方为 1 即可。得到 HCLK 之后, 接下来我们将在图标号⑧~⑩处同样的方法依次配置 Systick, APB 以及 APB2 分频系数分别为 1, 4 和 2 即可 。 配 置 完 成 之 后 , 那 么 HCLK=168MHZ , Systick 时 钟 为 168/1MHz=168MHz ,PCLK1=168MHz/4=42MHz, PCLK2=168MHz/2=84MHz。

    4、GPIO功能引脚设置

    可以在搜索栏输入要搜索的引脚,在引脚图上会显示该引脚的位置。
    在这里插入图片描述
    引脚图中点击PC8,会出现该IO口的功能选项。
    在这里插入图片描述
    在这里插入图片描述
    GPIO output level: 引脚电平设置 高/低
    GPIO mode: GPIO模式 推挽输出/开漏输出
    GPIO Pull-up/Pull-down: 上拉下拉电阻 上拉电阻/下拉电阻/无上拉或下拉
    Maxinum output speed: 引脚速度设置 低速/中速/高速
    User Label: 用户标签 给引脚设置名称 如LED0

    5、UART设置

    点击Mode选择Asynchronous(异步)
    在这里插入图片描述
    在这里插入图片描述
    设置波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
    在这里插入图片描述
    DMA Settings,点击Add,选择UART5_RX,UART5_TX; Priority 优先级选择 Very High 非常高。
    在这里插入图片描述
    设置中断 UART5 global interrupt 在Enabled 列打对勾。
    在这里插入图片描述

    6、设置定时器

    Activated 激活
    在这里插入图片描述

    7、看门狗设置

    在这里插入图片描述
    IWDG时钟预分频系数 64分频
    计数器重装载值 4095 RLR
    超出(溢出)时间计算:
    Tout=((64×2^PRER) ×RLR)/LSI时钟频率

    8、生成工程源码

    在这里插入图片描述
    在这里插入图片描述
    然后点击GENERATE CODE 创建工程
    在这里插入图片描述

    cs