工欲善其事,必先利其器。
STM32Cube生态系统是ST为STM32开发者打造的软件生态,是嵌入式开发的利器。
为提升功能丰富且高能效的STM32系列微控制器的易用性,2019年,意法半导体在STM32Cube软件生态系统中增加了一个免费的多功能STM32开发工具:STM32CubeIDE。
为了和商用集成开发环境(IDE)工具一样好用,STM32CubeIDE充分发挥了意法半导体2017年收购的嵌入式开发工具厂商Atollic®的技术优势。这套IDE软件采用行业标准的开放式许可条款,为简化和加快基于STM32的嵌入式设计,新增了STM32专用功能,包括功能强大的STM32CubeMX微控制器配置和项目管理工具。
通过整合STM32CubeMX与STM32CubeIDE,意法半导体创建了一个更强大的开发环境。STM32Cube的完整生态系统还包含STM32CubeProgrammer的代码烧写器和STM32CubeMonitor系列的代码运行监控器,以及众多独立的MCU固件包。
STM32CubeIDE是ST官方提供的免费软件开发工具,也是STM32Cube生态系统的一员大将。它基于Eclipse®/CDT框架,GCC编译工具链和GDB调试工具,支持添加第三方功能插件。同时,STM32CubeIDE还集成了部分STM32CubeMX和STM32CubeProgrammer的功能,是一个 “多合一”的STM32开发工具。
用户只需要STM32CubeIDE这一个工具,就可以完成从芯片选型,项目配置,代码生成,到代码编辑,编译,调试和烧录的所有工作。
在开发的过程中,用户也可以非常方便地切换到内嵌的CubeMX初始化窗口,添加或者修改之前的外设和中间件配置。不需要在多个工具之间进行切换。
STM32CubeIDE提供的编译和堆栈分析工具为用户提供了关于项目状态和内存使用的有用信息。还提供了很多高级的调试功能帮助用户进行高效地调试。
跟 STM32CubeMX,STM32CubeProgrammer 一样,它也是一个多平台的STM32开发工具,用户可以在windows,linux和macOS操作系统上通过STM32CubeIDE进行软件开发。
STM32CubeIDE界面
STM32CubeIDE 是基于 Eclipse 的框架,它继承了 Eclipse 所特有的一些对用户来说还不太熟悉的特性,比如透视图,工作空间等。
工作空间(Workspace):STM32CubeIDE通过工作空间(workspace)对工程进行管理,打开STM32Cube时,它会新建一个默认的工作空间,用户也可以通过Browse按钮另外选择一个文件夹作为工作空间,之后新建或者导入的工程就都属于前面选择的这个工作空间。同一个工作空间下的工程具有相同的IDE层面的配置(在Window→Preferences中进行设置),比如显示和编辑的风格设置等。从文件系统的角度,工作空间就是一个文件夹,里面包含了多个工程的文件夹和一个名为“.metadata”的文件夹,“.metadata”文件夹下包含了该工作空间内的所有工程的信息。用户可以通过File→Switch Workspace菜单,切换不同的工作空间。
透视图(Perspective):透视图是一系列和某类功能相关的窗口的组合。常用的有C/C++编辑透视图,调试透视图和CubeMX配置透视图。
C/C++编辑透视图包括了项目管理器,编辑窗口,Outline窗口等。在项目管理器中可以查看和操作当前工作空间中的所有项目。双击打开项目中的文件,文件内容会显示在编辑窗口,在编辑窗口可以对其进行编辑。最右边的Outline窗口列出了当前打开的文件中定义的所有函数,变量和宏。
在Window Show View菜单中可以打开和关闭需要显示在C/C++编辑透视图中的窗口。
通过右上方的图标可以在不同的透视图之间切换,比如点击爬虫图标,就可以切换到调试透视图。在C/C++编辑透视图下点击工具栏的Debug按钮启动调试后,也会自动切换到调试透视图。
工程管理
1. 新建和导入工程
使用STM32CubeIDE,用户可以通过多种方法来开始新建一个项目。在STM32CubeIDE的欢迎界面上,列出了创建/导入工程的快捷入口,分别对应下面的四种场景。也可以通过File菜单下的New和Import实现对应的功能。
• 从零开始新建一个STM32工程
• 已有STM32CubeMX的配置文件(*.ioc文件 ),希望根据该ioc文件新建一个STM32工程
• 已有SW4STM32或者TrueSTUDIO工程,希望转换成STM32CubeIDE工程
• 基于STM32Cube库中的例程创建新工程
2.STM32CubeIDE工程结构
STM32CubeIDE有两种工程结构,如下图所示。
单核的MCU都是扁平结构。
对于双核架构的MCU或者安全MCU,比如STM32H7,STM32L5和STM32MP1系列,STM32CubeIDE工程是分层结构。以STM32H7为例,创建或者导入STM32H7工程后,在Project Explorer栏看到的是一个三层的工程结构:最上面一层是“根”工程,然后是两个分别对应CM7和CM4内核的“子”工程,“子”工程下面才是工程文件。这两个CM7和CM4“子”工程才是真正的可编译和调试的工程,而“根”工程只是作为一个“容器”,包含了CM7和CM4这两个“子”工程。AN5361,AN5394,AN5360和AN5564分别描述了在STM32CubeIDE中如何创建,导入,编译和调试STM32H7双核,STM32L5,STM32MP1以及STM32WL的工程。
3.打开/关闭/删除/切换/导出STM32CubeIDE工程
在Project Explorer窗口中可以看到当前工作空间下的所有工程。用户可以对这里面的任一工程进行打开/关闭/删除/导入/导出/更名等操作。
具体请参考“工程的基本操作”(马上推出,敬请期待)。
4.固件库管理
STM32CubeIDE集成了STM32CubeMX的部分功能,可以直接选择芯片/开发板型号,或者选择例程来生成一个新工程。STM32CubeIDE生成工程所需要的驱动和例程代码都来自各个STM32系列的固件库。
在Help→Manage Embedded Software Packages里,可以对所有的STM32固件库以及其他的插件进行管理(安装/删除固件库)。
用户可以通过Install Now按钮让STM32CubeIDE自动从网络进行下载安装,也可以通过From Local按钮来安装已经预先下载好的固件库。
通过Remove Now按钮可以删除选中的固件库。
在Window Preferences窗口的STM32Cube Firmware Updater标签页下,可以设置固件库安装的路径和更新的方式。
默认STM3CubeIDE在打开和新建工程的时候,都会尝试连接网络。用户也可以选择“Off Line Mode”,不让STM32CubeIDE去联网。但是需要通过上一张图中Embedded Software Packages Manager窗口的From Local按钮来安装已经预先下载好的固件库,否则将不能自动为新建的STM32工程生成代码。
点击Check Connection按钮可以检测当前的网络连接状态。检测结束如果出现一个红色的×,则说明网络配置有问题,需要我们到Network Connection页面去进行设置。
除了前面主动检测网络状态,如果出现固件下载失败的情况,也请检查STM32CubeIDE的网络配置是否正确。
配置步骤见下图:
1.进入 Window Preferences菜单,选择General Network Connections标签页
2.选择 Manual方式
3.选择HTTP,双击打开编辑窗口,设置网络连接参数。
代码编辑
STM32CubeIDE基于Eclipse,Eclipse的一些常用快捷键和编辑技巧一样适用于STM32CubeIDE。熟练掌握这些小技巧可以提高开发效率,使得程序开发的工作事半功倍。
代码编译
1.工程属性设置及编译
在Project Explorer中选中一个工程,点击右键后进入properties菜单,在其中就可以对编译项进行配置。常用配置的操作细节,请查看“STM32CubeIDE工程属性配置技巧”。
配置完成之后就可以进行编译了。用户可以通过下面三种方式启动编译:
• 方法一:选中工程,点击右键,然后选择“Build Project”
• 方法二:选中工程,从Project菜单进入,然后选择“Build Project”
• 方法三:选中工程,直接点击工具栏里的Build图标
2.提高编译速度
通过使能并行编译,可以提高STM32CubeIDE的编译速度。
选中工程,点击右键后进入properties菜单,选择“C/C++ Build”,在Behavior标签页下,勾选“Enable parallel build”功能。
3.编译相关辅助工具
工程编译完成以后,在“Build Analyzer”窗口可以看到链接文件中定义的所有内存区域(memory region)和段(section)的使用情况,包括加载地址,运行地址,有多少字节已经被占用,还剩余多少字节等。
在“Static Stack Analyzer”窗口中显示了静态堆栈的使用情况。
STM32CubeIDE还提供了Headless Build功能,可以不打开CubeIDE的图形界面,通过命令行就可以进行编译。
代码调试及烧录
1.调试及运行配置
STM32CubeIDE工程编译完成且无任何错误,就可以进行调试和下载了。
在C/C++透视图的工具栏中有三个和下载调试相关的按钮:调试,运行和外部工具。
通过“调试”按钮旁边的小三角,可以打开Debug Configurations菜单,进行调试参数的配置,比如调试器的选择,GDB连接的设置,ST-LINK的设置,外部Flash Loader的设定等,并启动调试。
通过“运行”按钮,可以仅下载程序不启动调试。
通过“外部工具”按钮,可以调用外部的命令行工具。
有关调试参数配置及调试技巧的内容,请参考“STM32CubeIDE工程调试配置及技巧”(马上推出,敬请期待)。
2.启动调试
STM32CubeIDE使用GDB进行调试,支持STLink和SEGGER J-Link调试器,支持通过SWD或JTAG接口连接目标MCU。
STM32CubeIDE工程编译完成之后,直接点击工具栏的爬虫图标或者通过选择菜单Run-->Debug,可以启动调试。
如果是第一次对当前工程进行调试,STM32CubeIDE会先编译工程,然后打开调试配置窗口。调试配置窗口包含:调试接口的选择,STLink的设置,复位设置和外部flash loader的设置等选项,用户可以检查或者修改各项配置。确认所有的配置都正确无误,就可以点击OK,启动调试。
然后STM32CubeIDE会先将程序下载到MCU,然后从链接文件(*.ld)中指定的程序入口开始执行。程序默认从Reset_Handler开始执行,并暂停在main函数的第一行,等待接下来的调试指令。
3.基本调试操作
启动调试后,STM32CubeIDE将自动切换到调试透视图,在调试透视图的工具栏中,列出了调试操作按钮。如下图所示。
插件的使用
STM32CubeIDE同样支持Eclipse插件。
可以通过Help菜单下的“Eclipse Marketplace”,在Eclipse市场中查找并安装插件;
或者通过Help菜单下的“Install New Software”,从指定的网址安装插件。
STM32CubeIDE使用例程
下面我们通过一个LED闪灯的例程,来体验一下使用STM32CubeIDE进行软件开发的流程。
例程使用NUCLEO-H743ZI开发板,通过STM32CubeIDE从零开始新建工程。该工程就实现一个简单的功能:板载的LED1以500ms的间隔自动翻转。
通过这个例程,可以了解到以下内容:
• 新建一个STM32CubeIDE工程
• 对STM32芯片进行配置
• 添加用户代码并编译
• 设置调试参数
• 调试代码(查看变量及寄存器)
• 设置断点
首先,选择File-->New-->STM32 Project,STM32CubeIDE会打开MCU选择窗口。在这个窗口下,可以选择某个型号的芯片,也可以选择某个ST开发板或者例程。这里我们在搜索框里输入STM32H743ZI,就可以直接选择这个芯片了,然后点击Next。
在接下来弹出的窗口中,需要设置项目的名称,类型和工程保存的位置。默认情况下,新建的工程会保存在当前的workspace中,用户也可以按下图所示,取消“Use default location”,然后自定义工程保存的位置。需要注意的是,如果你试图将两个工程放在同一个路径下,在后面的创建过程中可能会报错。所以你可以在路径中加上工程名,以区别不同的工程。
设置完成后,点击Finish,STM32CubeIDE将为我们创建一个工程,并打开芯片的配置界面,这个界面和STM32CubeMX是一样的。
期间可能会弹出将要打开CubeMX配置透视图的提示,点击Yes就可以了。
接下来要做的是,在芯片配置界面,按功能需求对时钟,GPIO,外设,中间件等进行配置。在这个例程中,我们只用到了PB0,作为输出控制LED1,所以只需要配置它就可以了。时钟就使用默认配置。
在Pinout视图下,通过搜索栏,可以在快速在芯片封装图上找到要配置的引脚。
选择该引脚,点击右键,选择GPIO_Output功能。
然后转到System视图,点击GPIO模块,然后就可以看到刚刚配置的PB0引脚。这个窗口中,还可以继续调整PB0的其他参数,比如上/下拉,速度等。还可以为其定义一个用户标签LDE1,方便在代码中进行引用。
所有的配置结束后,选择Project-->Generate Code重新生成代码。这时STM32Cube会切换到C/C++透视图,然后可以添加用户的文件或对某个C文件进行修改。
在这里,我们添加了一段翻转PB0的代码。这里要注意,所有用户添加的代码必须放在“USER CODE BEGIN xxx”和“USER CODE END xxx”这一对声明之间。这样当再次重新生成代码的时候,才不会丢失这部分代码。
代码添加完成后,点击“Build”开始编译。
如果编译结束并且没有任何报错。就可以点击Debug,启动调试。
第一次启动调试,会先弹出调试参数配置窗口,确认好所有的参数无误,点击OK,STM32CubeIDE就会自动从编辑界面切换到调试界面了。如下图所示。
在调试界面下,通过工具栏的操作按钮,可以进行单步调试。
双击某一行代码最左边的标记栏处,就可以在这行代码处添加断点。
右侧打开了多个调试窗口,包括:局部变量,断点,全局变量和寄存器等等。这些窗口可以在Window-->Show View菜单中打开或者关闭。
相关资源
1.如何查看STM32CubeIDE文档集
第一次打开STM32CubeIDE时,首先显示的是“Information Center”页面。这个页面提供了创建工程的快速通道和使用STM32CubeIDE的文档入口。用户不需要在使用STM32CubeIDE之前阅读所有这些文档,但可以把这里作为一个入口,在需要的时候从这里进入去搜索相关文档。
2.用户手册/应用笔记