STMCU小助手
发布时间:2022-11-1 16:53
|
STM32Cube生态系统是ST为STM32开发者打造的软件生态,是嵌入式开发的利器。' Q: l9 g$ k9 a' L7 F) X 为提升功能丰富且高能效的STM32系列微控制器的易用性,2019年,意法半导体在STM32Cube软件生态系统中增加了一个免费的多功能STM32开发工具:STM32CubeIDE。 ( x. _+ t1 v+ t3 d5 c STM32CubeIDE是ST官方提供的免费软件开发工具,也是STM32Cube生态系统的一员大将。它基于Eclipse®/CDT框架,GCC编译工具链和GDB调试工具,支持添加第三方功能插件。同时,STM32CubeIDE还集成了部分STM32CubeMX和STM32CubeProgrammer的功能,是一个 “多合一”的STM32开发工具。) ^& Y, m+ Q, S" b; F
6 u. i7 X5 f# {# X" s 用户只需要STM32CubeIDE这一个工具,就可以完成从芯片选型,项目配置,代码生成,到代码编辑,编译,调试和烧录的所有工作。% h+ S6 b6 A3 u* _+ c0 h : a) Q1 @8 J" A3 w" B
" r2 c F. E& Q; S! { STM32CubeIDE 是基于 Eclipse 的框架,它继承了 Eclipse 所特有的一些对用户来说还不太熟悉的特性,比如透视图,工作空间等。 工作空间(Workspace):STM32CubeIDE通过工作空间(workspace)对工程进行管理,打开STM32Cube时,它会新建一个默认的工作空间,用户也可以通过Browse按钮另外选择一个文件夹作为工作空间,之后新建或者导入的工程就都属于前面选择的这个工作空间。同一个工作空间下的工程具有相同的IDE层面的配置(在Window→Preferences中进行设置),比如显示和编辑的风格设置等。从文件系统的角度,工作空间就是一个文件夹,里面包含了多个工程的文件夹和一个名为“.metadata”的文件夹,“.metadata”文件夹下包含了该工作空间内的所有工程的信息。用户可以通过File→Switch Workspace菜单,切换不同的工作空间。 + w" K! i% d! T+ z6 o 透视图(Perspective):透视图是一系列和某类功能相关的窗口的组合。常用的有C/C++编辑透视图,调试透视图和CubeMX配置透视图。 C/C++编辑透视图包括了项目管理器,编辑窗口,Outline窗口等。在项目管理器中可以查看和操作当前工作空间中的所有项目。双击打开项目中的文件,文件内容会显示在编辑窗口,在编辑窗口可以对 在Window Show View菜单中可以打开和关闭需要显示在C/C++编辑透视图中的窗口。 3 o) N- y: ?, v- j 通过右上方的图标可以在不同的透视图之间切换,比如点击爬虫图标,就可以切换到调试透视图。在C/C++编辑透视图下点击工具栏的Debug按钮启动调试后,也会自动切换到调试透视图。2 O8 |: [+ N. Z4 G4 o6 {7 c . W/ j1 ^6 Y! y$ x 1. 新建和导入工程 使用STM32CubeIDE,用户可以通过多种方法来开始新建一个项目。在STM32CubeIDE的欢迎界面上,列出了创建/导入工程的快捷入口,分别对应下面的四种场景。也可以通过File菜单下的New和Import实现对应的功能。 , {# z: ]; l, m* h • 从零开始新建一个STM32工程 + F; g Q8 r* {, B+ E$ a" w • 已有STM32CubeMX的配置文件(*.ioc文件 ),希望根据该ioc文件新建一个STM32工程 • 已有SW4STM32或者TrueSTUDIO工程,希望转换成STM32CubeIDE工程 + l; U% V# L$ J- r3 n) u • 基于STM32Cube库中的例程创建新工程
. _- {, P0 r7 l& F" p4 ? STM32CubeIDE工程结构/ G, ^4 G0 I; R0 g' |# a, J - G% v( |0 Q0 i" k6 ^
6 g( R; D. f) h* w7 ^2 [ ) M8 ^. p1 J' w) X( D8 N 单核的MCU都是扁平结构。$ y2 p; O8 q% E# a. B 8 `0 I4 r3 K/ F( Y+ X# h 对于双核架构的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的工程 打开/关闭/删除/切换/导出STM32CubeIDE工程 I/ R5 X- z% z& f% z 在Project Explorer窗口中可以看到当前工作空间下的所有工程。用户可以对这里面的任一工程进行打开/关闭/删除/导入/导出/更名等操作。* X0 B, z9 s4 F y0 p# p : y* r: K. X+ ` 固件库管理 - W1 x0 \% N* E STM32CubeIDE集成了STM32CubeMX的部分功能,可以直接选择芯片/开发板型号,或者选择例程来生成一个新工程。STM32CubeIDE生成工程所需要的驱动和例程代码都来自各个STM32系列的固件库。' U+ z6 \3 K5 I 7 e# _4 o& H" b/ Q: S9 a% G; x( S( O 在Help→Manage Embedded Software Packages里,可以对所有的STM32固件库以及其他的插件进行管理(安装/删除固件库)。 3 B; I: l0 K# ]! f0 c9 \ 用户可以通过Install Now按钮让STM32CubeIDE自动从网络进行下载安装,也可以通过From Local按钮来安装已经预先下载好的固件库。7 u* V& @+ d( o. o 通过Remove Now按钮可以删除选中的固件库。 " g- _( E8 r9 u
在Window Preferences窗口的STM32Cube Firmware Updater标签页下,可以设置固件库安装的路径和更新的方式。 7 t; ~7 B j$ s7 ^) X; w
默认STM3CubeIDE在打开和新建工程的时候,都会尝试连接网络。用户也可以选择“Off Line Mode”,不让STM32CubeIDE去联网。但是需要通过上一张图中Embedded Software Packages Manager窗口的From Local按钮来安装已经预先下载好的固件库,否则将不能自动为新建的STM32工程生成代码。1 j. O* }2 X: M" T 9 K/ N+ v {7 R2 j3 F( ^ 点击Check Connection按钮可以检测当前的网络连接状态。检测结束如果出现一个红色的×,则说明网络配置有问题,需要我们到Network Connection页面去进行设置。, a1 I' I8 D- i7 E- z) z 除了前面主动检测网络状态,如果出现固件下载失败的情况,也请检查STM32CubeIDE的网络配置是否正确。1 Y: W5 r. P$ t& }5 Y1 [0 r; i: V, ] 配置步骤见下图: 1.进入 Window Preferences菜单,选择General Network Connections标签页 2.选择 Manual方式: e0 n5 O$ T$ j2 ]7 H - K3 t/ o' s6 D- a 3.选择HTTP,双击打开编辑窗口,设置网络连接参数。$ j! I5 M- H2 k" Y) t3 I q1 K
: E5 d. h8 @4 O$ b' u3 @5 a 7 `) B0 }: d6 p 代码编辑+ e) Y- E( t; n 5 A" x- a9 X. h* V) h STM32CubeIDE基于Eclipse,Eclipse的一些常用快捷键和编辑技巧一样适用于STM32CubeIDE。熟练掌握这些小技巧可以提高开发效率,使得程序开发的工作事半功倍。' R( B( w# I+ A2 j+ @ - o6 L3 k$ h) A3 C0 F2 ~ 代码编译 工程属性设置及编译1 h; M; I! _+ f" P, f$ H ( _- j" v/ f2 @# a" B, ^0 x 在Project Explorer中选中一个工程,点击右键后进入properties菜单,在其中就可以对编译项进行配置。常用配置的操作细节,请查看“STM32CubeIDE工程属性配置技巧”。5 B9 _' k8 E0 t, c; }3 M1 L$ g" b 配置完成之后就可以进行编译了。用户可以通过下面三种方式启动编译: • 方法一:选中工程,点击右键,然后选择“Build Project” • 方法二:选中工程,从Project菜单进入,然后选择“Build Project”2 J0 P* |: [$ B. r& W6 b % U2 ?4 S+ D- d% Z • 方法三:选中工程,直接点击工具栏里的Build图标/ [0 s8 g7 n8 D 9 m+ H, p8 W9 M7 {# H3 V1 {5 a" S( I5 y
3 U- X, M- \5 e$ k2 w4 p/ E 提高编译速度; R8 D } \/ W% V* i 通过使能并行编译,可以提高STM32CubeIDE的编译速度。! N, ~) N, e7 ?) \ 选中工程,点击右键后进入properties菜单,选择“C/C++ Build”,在Behavior标签页下,勾选“Enable parallel build”功能。 6 w2 s# {# J, G; e
; D. s8 e! p: ?! W* U) E9 ? 编译相关辅助工具 7 L; T4 z7 b1 E7 q; R) E4 A; ? 工程编译完成以后,在“Build Analyzer”窗口可以看到链接文件中定义的所有内存区域(memory region)和段(section)的使用情况,包括加载地址,运行地址,有多少字节已经被占用,还剩余多少字节等。 在“Static Stack Analyzer”窗口中显示了静态堆栈的使用情况。4 o2 N8 [+ U; I3 l STM32CubeIDE还提供了Headless Build功能,可以不打开CubeIDE的图形界面,通过命令行就可以进行编译。5 f x o/ h2 I; I3 M
) p7 F/ J" c- D q, G6 d 代码调试及烧录 ) b. d# V% F4 N+ y2 } 调试及运行配置 STM32CubeIDE工程编译完成且无任何错误,就可以进行调试和下载了。. z0 O! @! i7 W1 I0 Q6 l & H {) l: p& E2 a 在C/C++透视图的工具栏中有三个和下载调试相关的按钮:调试,运行和外部工具。. ^; N7 B }! [( H+ b / _( t- s X3 L9 C* C7 Q$ i4 m 通过“调试”按钮旁边的小三角,可以打开Debug Configurations菜单,进行调试参数的配置,比如调试器的选择,GDB连接的设置,ST-LINK的设置,外部Flash Loader的设定等,并启动调试。 通过“运行”按钮,可以仅下载程序不启动调试。 & q# K- l- F8 g/ U% m* W 通过“外部工具”按钮,可以调用外部的命令行工具。6 X1 n5 q3 z( A; Q1 H4 r# x 0 y# j& T; p% g, d5 L 有关调试参数配置及调试技巧的内容,请参考“STM32CubeIDE工程调试配置及技巧”(马上推出,敬请期待)。
- _' p) W# F% m5 i/ W; I: x 启动调试 ! ?/ Q T3 B ^' a4 ]/ G' {9 r STM32CubeIDE使用GDB进行调试,支持STLink和SEGGER J-Link调试器,支持通过SWD或JTAG接口连接目标MCU。3 P9 \. K& }# F5 R7 f- W+ b 3 D" e( d5 }2 R4 A# K8 i/ x STM32CubeIDE工程编译完成之后,直接点击工具栏的爬虫图标或者通过选择菜单Run-->Debug,可以启动调试。 , I$ e3 O2 G9 t* {% p1 i 如果是第一次对当前工程进行调试,STM32CubeIDE会先编译工程,然后打开调试配置窗口。调试配置窗口包含:调试接口的选择,STLink的设置,复位设置和外部flash loader的设置等选项,用户可以检查或者修改各项配置。确认所有的配置都正确无误,就可以点击OK,启动调试。 ' L5 a' U R9 i: B 然后STM32CubeIDE会先将程序下载到MCU,然后从链接文件(*.ld)中指定的程序入口开始执行。程序默认从Reset_Handler开始执行,并暂停在main函数的第一行,等待接下来的调试指令。7 w& d- R, b; Y, ` & P' U) G" k# y7 F, U
8 K5 P1 Y$ [) L' w. T8 s 基本调试操作/ L4 @) v' D; I- ^" O# V9 v% q. I 启动调试后,STM32CubeIDE将自动切换到调试透视图,在调试透视图的工具栏中,列出了调试操作按钮。如下图所示。. }" ]. M2 y: A1 Z5 ]3 G4 I & Q+ x3 i" F- O+ X: ~# G8 w0 W3 {
. h" p3 }' W! K( O3 n 插件的使用 STM32CubeIDE同样支持Eclipse插件。+ @' R6 U: i: ~# O. e$ [ 可以通过Help菜单下的“Eclipse Marketplace”,在Eclipse市场中查找并安装插件; - f( O0 e( L" M$ \" o( H' S 或者通过Help菜单下的“Install New Software”,从指定的网址安装插件。
8 {7 S. i5 g- B1 F: o0 M; O STM32CubeIDE使用例程6 E; `3 y5 B1 b5 @! V / K. X) `2 G6 d5 R8 l# R) ~ 下面我们通过一个LED闪灯的例程,来体验一下使用STM32CubeIDE进行软件开发的流程。6 F# p2 V: N4 O; F1 W 例程使用NUCLEO-H743ZI开发板,通过STM32CubeIDE从零开始新建工程。该工程就实现一个简单的功能:板载的LED1以500ms的间隔自动翻转。 p* Q% |1 ` \) r$ o9 Y 通过这个例程,可以了解到以下内容:, U) a# U4 ]3 { `6 C: }- f • 新建一个STM32CubeIDE工程 ( H8 n0 G0 [9 [5 u' H; S) P • 对STM32芯片进行配置 + `, d9 k/ c% M5 f- o • 添加用户代码并编译 * d' R: ]6 V4 h/ ?8 N# Z0 C9 {$ e • 设置调试参数& V0 J; w w" C( l: P# ~1 Q • 调试代码(查看变量及寄存器) 1 _( l Y. Y8 E0 x" r • 设置断点$ Z: n0 X$ z! j& Z ( f* J8 w& S5 a. U4 l, D* m- y 首先,选择File-->New-->STM32 Project,STM32CubeIDE会打开MCU选择窗口。在这个窗口下,可以选择某个型号的芯片,也可以选择某个ST开发板或者例程。这里我们在搜索框里输入STM32H743ZI,就可以直接选择这个芯片了,然后点击Next。
: ^" C- ~3 [1 d8 O, K0 } 在接下来弹出的窗口中,需要设置项目的名称,类型和工程保存的位置。默认情况下,新建的工程会保存在当前的workspace中,用户也可以按下图所示,取消“Use default location”,然后自定义工程保存的位置。需要注意的是,如果你试图将两个工程放在同一个路径下,在后面的创建过程中可能会报错。所以你可以在路径中加上工程名,以区别不同的工程。 设置完成后,点击Finish,STM32CubeIDE将为我们创建一个工程,并打开芯片的配置界面,这个界面和STM32CubeMX是一样的。 $ b' P6 Z v: ^7 ~' \' I 期间可能会弹出将要打开CubeMX配置透视图的提示,点击Yes就可以了。
接下来要做的是,在芯片配置界面,按功能需求对时钟,GPIO,外设,中间件等进行配置。在这个例程中,我们只用到了PB0,作为输出控制LED1,所以只需要配置它就可以了。时钟就使用默认配置。 在Pinout视图下,通过搜索栏,可以在快速在芯片封装图上找到要配置的引脚。 选择该引脚,点击右键,选择GPIO_Output功能。 `4 I) J# N; Q: s }+ u 然后转到System视图,点击GPIO模块,然后就可以看到刚刚配置的PB0引脚。这个窗口中,还可以继续调整PB0的其他参数,比如上/下拉,速度等。还可以为其定义一个用户标签LDE1,方便在代码中进行引用。
; q5 f- I7 u' w 所有的配置结束后,选择Project-->Generate Code重新生成代码。这时STM32Cube会切换到C/C++透视图,然后可以添加用户的文件或对某个C文件进行修改。: Y4 y3 Y3 C1 P4 K# l l$ U: ` 8 [9 k1 }% G* u& \" a( R6 L 在这里,我们添加了一段翻转PB0的代码。这里要注意,所有用户添加的代码必须放在“USER CODE BEGIN xxx”和“USER CODE END xxx”这一对声明之间。这样当再次重新生成代码的时候,才不会丢失这部分代码。 代码添加完成后,点击“Build”开始编译。% c* D1 i/ i' l9 e6 a; [
如果编译结束并且没有任何报错。就可以点击Debug,启动调试。! e3 H( g8 ^0 `. P; }( t6 Q/ Y5 { [/ ~* p$ x, V4 {6 _2 {9 z8 R 第一次启动调试,会先弹出调试参数配置窗口,确认好所有的参数无误,点击OK,STM32CubeIDE就会自动从编辑界面切换到调试界面了。如下图所示。* z8 W$ L/ x6 {$ i) E/ t 在调试界面下,通过工具栏的操作按钮,可以进行单步调试。 双击某一行代码最左边的标记栏处,就可以在这行代码处添加断点。 ! N* j4 y! l! Y 右侧打开了多个调试窗口,包括:局部变量,断点,全局变量和寄存器等等。这些窗口可以在Window-->Show View菜单中打开或者关闭。- }) ]. M5 Y/ M: B : \9 i- l- k1 A- X- t$ X$ z
————————————————" V5 ?: E" n* @3 g9 q% z7 K 版权声明:Steven&Aileen * Q2 y% o0 Y0 A' u+ {6 e" c& e- u ; e8 r) ^( c) Y m5 z |
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
STM32CubeIDE 2.2.0新版本发布
CubeMX生成CubeIDE工程代码乱码
STM32CubeIDE实时时钟(RTC)经验分享
实战经验 | ClassB功能安全认证代码与应用代码分区的实现要点
【STM32U3 评测】人体行为识别
微信公众号
手机版