STM32CubeIDE的MCU开发

        以前做stm32嵌入式开发均使用的是破解版的keil软件,现在工作需要无法按照此步骤进行,最近针对ST官方免费软件STM32CubeIDE进行了相关调研工作。

1 STM32CubeIDE简介

        目前主流的STM32开发环境是ARM公司的KEIL软件, 由于KEIL对于STM32大部分型号是收费的, 使用需要破解, 存在版权问题。 并且使用KEIL编译大型工程, 编译太慢了, 编译耗时长。

        STM32CubeIDE是ST公司推出的免费多功能STM32开发工具,采用了行业标准的开放式许可条款,为简化和加快基于STM32的嵌入式设计,新增了STM32专用功能,包括功能强大的STM32CubeMX微控制器配置和项目管理工具。用户能够最大限度地提高产品的功能和性能,缩短研发周期,降低开发成本。

        STM32CubeIDE是一个多操作系统集成开发工具,它是STM32Cube软件生态系统的一部分。STM32CubeIDE具有STM32 MCU和MPU的外设配置、代码生成、代码编译和调试功能,它基于Eclipse®/CDT框架和GCC工具链进行开发,GDB进行调试。STM32CubeIDE集成了STM32的配置和项目创建功能,提供了一体化的工具体验,节省安装和开发时间。在开发过程中任何时间,用户都能返回到外设/中间件的初始化和配置,并且在不影响用户代码的情况下生成初始化代码。

2 STM32CubeIDE下载与安装

2.1 STM32CubeIDE下载

        进入意法半导体的官网 STM32CubeIDE - STM32的集成开发环境 - STMicroelectronics,选择最新版本,按照提示下载STM32CubeIDE软件安装包,如下图所示。

图1 官网获取最新安装包

       例如,作者的电脑是windows操作系统,选择了当前最新版本1.6.1 STM32CubeIDE-Win的安装包进行下载。

2.2 STM32CubeIDE安装

        软件下载成功后,解压缩软件安装包,右键.exe文件 —> 以管理员身份运行,注意:安装目录中不允许有中文路径

 图2 管理员身份运行

        弹出的界面,点击Next。

 图3 安装界面

        弹出的界面,点击I Agree。

图4 同意安装

        选择安装路径,点击Next。

图5 选择安装路径

        勾选“SEGGER J-Link drivers”和“ST-LINK drivers”,点击“Install”,等待安装完成。

图6 勾选调试工具

        安装完成,点击Next。

图7 安装完成

        弹出的界面,点击Finish。

图8 Finish

2.3 STM32CubeIDE器件包安装

        双击软件STM32CubeIDE 1.6.1.exe  ,点击help —> Manage Embedded Software Packages 。

图9 安装器件包

        根据项目需要选择安装STM32器件库,例如要使用STM32F1系列和STM32F4系列,勾选最新的器件库,点击Install Now直接安装即可。

图10 STM32F1系列器件包

图11 STM32F4系列器件包

        安装成功后勾选框显示为绿色,查看器件包的安装路径,点击Window —> Preferences 。

图12 查看已器件包路径

        在STM32Cube —> Firmware Updater中可以看到器件库的默认安装路径,此路径也可以自行修改。

图13 器件包默认路径

        查看此路径,可以看到已经安装成功的器件库,项目开发就可以正常使用该系列的STM32芯片。

图14 已安装器件包文件夹

3 STM32CubeIDE的使用

        下面以STM32F407ZGT6型号为例,开发和调试LED闪烁、串口中断回环的功能,介绍STM32CubeIDE软件的基本使用方法。

3.1 资料准备

        STM32F407ZG - 带DSP和FPU的高性能基础系列ARM Cortex-M4 MCU,具有1 MB Flash、168 MHz CPU、ART加速器、以太网和FSMC - STMicroelectronics

《STM32参考手册》,用于查询STM32各类寄存器的使用方法;

《STM32数据手册》(产品规格书),用于查询STM32的物理结构(总线架构、时钟树、管脚功能等);

《板卡原理图》

3.2 搭建工程

        点击File —> New —> STM32 Project 。

图15 新建工程

        弹出的界面,在1中搜索项目使用的STM32芯片型号,点击2处,然后再点击Next。

图16 搜索STM32芯片型号

        设置project名,点击Finish 。

图17 工程命名

        此时弹出与STM32CubeMX相同的图形化外设配置界面,根据本次例程的功能,我们需要配置时钟、IO、串口、中断等功能。

        首先配置时钟管脚, 选择晶振(板卡上配置频率为8MHz的)作为外部高速时钟(HSE),外部低速时钟(LSE)暂时不需要。

图18 配置外部高速时钟HSE

        配置系统管脚,debug用,选择4pin的jtag功能。

图19 配置调试接口

        配置LED IO引脚为输出功能引脚,查看板卡原理图,LED0连接在PF9引脚、LED1连接在PF10引脚,那么分别将PF9和PF10配置为OUTPUT引脚。

图20 配置LED0管脚

图21配置LED1管脚

        修改引脚命名。

图22 修改LED0名

图23 修改LED1名

        配置串口,本次测试使用USART3,配置USART的IO引脚、波特率、中断等参数。

图24 配置串口3管脚

图25 配置串口3中断

        开启USART3的中断功能,由于本次测试仅使用一个串口中断的功能,所以在界面中的中断优先级分组、抢占优先级和子优先级按默认设置即可。

图26 配置串口3中断

        配置时钟树,此处将APB1配置为最高的42MHz,APB2配置为最高的84MHz。

图27 配置时钟树

        STM32F407时钟树,HSE(高速外部时钟信号)、LSE(低速外部时钟信号)、HSI(高速内部时钟信号)、LSI(低速内部时钟信号)。

图28 STM32F4时钟树结构

        工程设置,先查看工程名和路径,再选择生成的Code格式。

图29 确认工程名和路径

图30 勾选生成的code特征

        保存.ioc文件,生成project code模板。

图31 生成code

        可以看到生成的工程文件夹结构。

图32 生成的project结构

3.3 用户程序编写

        用户程序的编写只能在注释有“USER CODE BEGIN”与“USER CODE END”之间进行,防止修改.ioc文件后重新生成project code时将已经编写的用户程序覆盖掉。

图33 用户程序编写区域

3.4 编译、调试

        工程编译。

图34 工程编译

        设置调试工具。

图35 调试工具设置

        选中当前工程,设置调试器,本次测试使用JLINK进行调试,因此调试探头选中SEGGER J-LINK,接口选中JTAG接口,调试初始速度默认为4000kHz。

图36 选择jlink

        1表示下载程序(.elf文件),2表示Debug程序。

图37 下载与调试

        下载程序成功。

图38 程序下载

        Debug程序成功,程序运行暂停在main函数内的第一条语句。

图39 程序debug

        全速运行程序后,从板卡上可以看到led0(红色)开始闪烁/led1(绿色)常亮,这是因为我们在STM32CubeIDE的.ioc中配置了这两个IO(默认低电平,低电平常亮),但是应用程序中只针对led0做了翻转功能,所以现象就是红灯闪烁、绿灯常亮。

图40 LED0灭、LED1亮

图41 LED0亮、LED1亮

图42 STM32CubeMX中GPIO的默认状态

        测试串口中断回环功能。

图43 串口中断回环测试

5 STM32CubeIDE软件使用遇到的问题记录

5.1 设置tab键与空格键的关系(tab == 4 spaces)

  1. Window ——> Preferences
  2. General ——> Editors ——> Text Editors
    1. 选中"Insert spaces for tabs"
    2. 选中"Show whitespace characters(configure visibility)"
      1. 在(configure visibility)中可以根据使用习惯显示or不显示space/enter等
  3. C/C++ ——> Code Style ——> Formatter
    1. 点击"Formatter"页面中的"New..."新建格式
    2. 在"Profile name"中输入"spaces_4_tab"
    3. 点击"OK"
    4. 在弹出的Profile 'spaces_4_tab'页面中,在"Tab policy”中将"Tabs only"改为"Spaces only"
    5. 点击"Apply" ——> "OK"
  4.  点击"Apply” ——> "Apply and Close"
  5. 可以在.c和.h文件中使用Tab键进行4个spaces的快捷操作

5.2 STM32CubeIDE在无联网的情况下加载设置MCU Packages

  1. Help ——> Manage Embedded Software Packages
  2. 点击"From Local..."
  3. 此时需要提前准备好在官网下载的STM32系列的配置包
    1. 网页上搜索"STM32Cube MCU & MPU Packages - Products"
    2. 进入ST官网配置包页面后,选择"Product selector",下载需要的MCU配置包
    3. 这里以STM32CubeF1为例
    4. 下载Patch_CubeF1和STM32CubeF1,实际加载使用的为STM32CubeF1,从官网上看到当前下载的STM32CubeF1版本为1.8.0
  4. 选中刚刚准备好的STM32CubeF1包,注意该包的版本为1.8.0,等待软件加载配置包
  5. 加载完成后可在Embedded Software Packages Manager页面的STM32F1下看到安装的配置包及其版本

5.3 报错“The Firmware Package (STM32Cube FW_F1 V1.8.5) or one of its dependencies required by the Project is not available in your STM32CubeMX Repository”

  1. 方法1
    1. 在.ioc中,找到ProjectManager下的Project,可以看到Frimware Package Name and Version默认按照最新的版本(当前最新的版本为"STM32Cube_FW_F1 V1.8.5")进行使用,此处将"Use latest available"取消,同时将"STM32Cube_FW_F1 V1.8.5调整为STM32Cube_FW_F1 V1.8.0"即可正常
  2. 方法2
    1. 新建STM32工程时,输入完Project Name之后,注意不要点击"Finish",点击"Next"
    2. 这里会进入Firmware Library Package Setup页面,这里可以进行配置包的选择,默认为最新的"V1.8.5",手动切换为"V1.8.0"后,点击"Finish"即可

5.4 需要使用.hex文件或.bin文件进行单独烧写

        STM32CubeIDE软件默认编译后不会生成.hex或者.bin文件,需要对软件进行设置

  1. Project ——> Properties
  2. C/C++ Build ——> Settings
  3. MCU Post build output ——> 选中"Convert to binary file (-O binary)"和"Convert to Intel Hex filr (-O ihex)" ——> Apply ——> Apply and Close
  4. 重新编译,可以在工程路径的Debug文件夹中找到对应的bin文件和hex文件

6 STM32CubeIDE使用小结

  1. 使用STM32CubeMX的图形化界面生成和修改底层驱动,可操作性更强、入门难度更小、开发效率更高,我们只需要将重心放在应用程序的开发上即可;
  2. STM32CubeIDE软件是免费软件,无需破解,程序运行大小不受影响,对于我们进行STM32嵌入式开发的成本更低。