生态系统

Cube概览 STM32CubeMonitor

STM32CubeMonitor 介绍(一)

基本介绍 & 例程一:基本的数据采集流程




STM32CubeMonitor介绍(二)

STM32CubeMonitor介绍(三)



大家好,ST最近新推出了一款变量检测及可视化的工具STM32CubeMonitor。应该有小伙伴们已经使用过STMStudio来实时监测变量,与STMStudio相比,STM32CubeMonitor除了同样可以提供变量监测的功能,还有非常丰富的组件可以搭建各种风格的图形化界面,以及众多免费的第三方组件可以进行功能扩展。此外,STM32CubeMonito还支持远程监测功能。


那么,接下来我们就一起来认识一下这位新的STM32Cube家族新成员。




基本介绍


STM32Cube系列软件开发工具,提供了从MCU配置,代码生成,编译以及调试,到程序烧录和监测整个软件开发流程需要的全部功能。


其中,STM32CubeMX提供图形化的配置界面,帮助开发者快速创建一个新工程(支持STM32CubeIDE, IAR, KEIL等IDE);

STM32CubeIDE基于Eclipse和GCC工具链,提供代码编辑,编译,调试功能。


STM32CubeProgrammer是STM32程序烧录工具,可以对片上flash及片外的存储器进行擦除和编程,支持ST-LINK调试接口以及UART/USBDFU bootloader接口。


还有图形化功耗测量软件STM32CubeMonitor-Power, STM32WB FR性能测试软件STM32CubeMonitor-RF等。





现在推出的STM32CubeMonitor变量监测及可视化工具,支持通过ST-LINK的SWD或者JTAG接口连接到目标MCU,可以在程序全速运行不被打断的情况下,读取需要检测的变量值。非常适合那些需要在程序全速运行下进行调试的情况,是对传统的通过设置断点进行调试的方式的补充。


STM32CubeMonitor基于NODE-RED开发,有丰富的图形开发组件,可以开发出灵活多变的可视化图形界面。


NODE-RED作为一个开源的可视化界面开发工具,有一个活跃的开发者社区,里面有众多开发者开发的各种功能的新节点,STMCubeMonitor支持导入这些第三方的节点来不断扩展功能。





STM32CubeMonitor可以通过非侵入式的方式(Direct模式)检测程序变量,对采集的数据实时分析,协助程序诊断。除了Direct模式以外,Snapshot模式下通过往应用程序添加特定采样代码,可以提供更精确的采样。变量可以根据可执行文件导入,也可以直接根据变量地址进行手动添加,还可以对采集的变量进行各种后处理运算,设置采样触发条件等。


STM32CubeMonitor采用图形化的编程界面,整个编程过程通过拖拽的方式就可以完成,无需写代码。有大量可选的图形化组件(仪表盘,柱状图,点线图……)可用。


提供Windows, Mac, Linux等多操作系统的安装程序。当STM32CubeMonitor在一台电脑上运行后,还可以通过浏览器在其他的电脑,平板或手机上打开其界面进编辑或者查看Dashboard(需要在同一个局域网)。





STM32CubeMonitor有两种工作模式:设计模式和Dashboard模式。设计模式即是编辑模式,打开STM32CubeMonitor默认就是处在这个模式。设计模式下,最左边一栏列出了所有当前可用的节点,我们可以通过拖拽不同的节点来创建或者编辑不同的逻辑数据流(Flow),来实现想要的功能。比如将要检测的变量通过点线图进行实时显示,或者通过一个按钮来控制某个GPIO口的状态等。设计模式下最右边一栏可以看到当前选中节点的使用说明和程序运行的调试信息等内容。


待所有的节点都编辑完成并部署运行后,可通过右上方的DASHBOARD按钮进入Dashboard模式。在Dashboard模式下,我们可以看到在设计模式下编辑的“流”运行的结果,看到我们之前设计的界面,通过这个界面去检测或者控制变量的值。






STM32CubeMonitor基于Node-RED,Node-RED是一个基于“流(Flow)”的开发工具。那么何为“流”? Node-RED提供了很多功能节点,这些节点可以分为输入节点,输出节点和功能节点。把这些节点连接起来就是一个”流”。多个“流”的组合,我们也把它叫做“流”。比如在设计模式下的标签页面我们也称作“流”,它里面实际会包含多个不同功能的单个“流”。






上图是通过STM32CubeMonitor进行远程监测的连接示意图。如我们前面所说,将STM32开发板通过ST-LINK连接到本地电脑,STM32CubeMonitor可以在本地电脑(Host PC)上运行,同时也可以在其他的电脑,平板或手机上通过浏览器访问host PC的IP地址(端口号1880)打开STM32CubeMonitor的界面,进行编辑或者查看Dashboard(需要在同一个局域网)。





从ST官网可以下载最新的STM32CubeMonitor安装程序。


STM32CubeMonitor所有的技术文档都是网页版的,放在了STM32MCU wiki下的对应板块中(https://wiki.st.com/stm32mcu/wiki/Category:STM32CubeMonitor),而且内容还在不断的更新。这样的好处就是每次打开网页看到的都是最新的文档版本,不用频繁去官网查询最新版本,也不用担心自己会遗漏重要更新。


另外还有一个STM32社区,有任何关于STM32CubeMonitor的问题都可以到这个社区提问,你也可以去看看别人的问题,说不定会有新的启发(https://community.st.com/s/topic/0TO0X000000x33lWAA/stm32cubemonitor)。


最后还有一个STM32CubeMonitor的视频,可以帮助初学者快速了解其基本功能。





实践操作


前面我们已经对STM32CubeMonitor有了一些基本了解,接下来就进入实践操作部分。



在这一部分,将会通过“基本的数据采集流程”,“实时波形监测”和“利用公有云平台进行远程数据监控”等三个例子,来介绍STM32CubeMonitor不同功能的使用。本课程提供有三个例程所对应的MCU及CubeMonitor的程序,开发板使用的是Nucleo-L4R5ZI和X-NUCLEO-IKS01A2 传感器扩展板(仅在第三个例程中用到)。你也可以使用其他的STM32开发板,按照每个例程的说明实现对应MCU的功能就可以。





基本数据采集


在第一个例程中,MCU程序中定义了一个全局变量(current_var),该变量在设定好的最大值(var_max)与最小值(var_min)之间以步长1,连续变化。现在我们要用CubeMonitor去实时监测这三个变量,并且还要实时改变最大值和最小值的限值。


通过这个例子,我们将学会:

• 如何搭建一个基本的“流”

• 了解“流”节点之间传递消息的基本数据结构

• 调试节点的使用

• 如何保存及导入“流”

• 如何调整Dashboard布局




这里例程的MCU相关代码实现。拷贝到任何已有的工程,重新编译烧录。

其中的current_var ,var_max 和 var_min这三个变量就是我们要监测的变量。

接下来就来看看CubeMonitor如何配置。





CubeMonitor配置



当第一次打开CubeMonitor时,默认就打开了一个“流”。你可以基于这个“流”进行开发,也可以进入菜单import>Library, 选择“STM32CubeMonitor_BasicFlow.json”,然后点击“import”按钮导入一个新的Basic流。这时,在设计模式下就会多出一个名为“Basic_Flow”的标签页。这个标签页,我们也称为”流”。


在Library下,有两类流可以选择:BasicFlow和AdvancedFlow。你可以把它理解成STM32CubeMonitor已经做好的两个流模板,方便大家上手。BasicFlow只有一个标签页,里面已经预先实现了启动/停止采样,并将结果显示在点线图上的基本功能。只需要将其中节点的参数更新一下即可。AdvancedFlow包括两个标签页:一个标签页里是和STM32节点相关的流(比如设置变量地址,读取变量值并处理,输出到图表等);另一个标签页里放的是用户界面按键。两个标签页的节点通过Link in和Link out节点连接。在AdvancedFlow中还可以同时连接两个ST-LINK,同时检测两个STM32开发板的运行。


我们再回到BasicFlow,从图中可以看到整个BasicFlow流由两个流组成:上面的流由两个button节点(Start, Stop),一个variables节点和一个acq_out节点组成。这个流完成的功能是:设置要检测的变量地址,在Dashboard上添加两个按键(Start,Stop)来启动和停止采样。下面的流由acq_in节点,processing节点,一个button节点和一个chart节点组成。acq_in节点接收ST-LINK发来的数据,processing节点接收acq_in的消息,将所选择的变量数据发送到chart节点进行显示。Clear button用来清除chart图表的显示。


接下来我们就来逐个说明BasicFlow中各个节点如何配置。




节点配置




首先我们先来看看myProbe_Out和myProbe_In这两个节点。这两个节点属于STMicroeletronics节点组,就是其中的acq_out和acq_in。STM32CubeMonitor里的所有节点,都可以另外命名为其他更有意义的名字,方便我们理解每个节点的作用。acq_out节点的作用是定义或者选择一个ST-LINK配置(通信协议,频率等),打开或者关闭连接,向选择的ST-LINK发送命令等。Acq_in节点的作用是定义或者选择一个ST-LINK配置,并接收ST-LINK发来的数据。


在开始配置前,我们会发现在这两个节点的右上方分别有一个红色的三角形和蓝色的圆点。红色的三角形表示:该节点还未配置,蓝色的圆点表示:该节点更新后还未部署。


在配置这两个节点前,先连接ST-link到PC。然后按照图中的步骤进行配置:

1.双击节点,打开编辑窗口,点击“Probe Config”编辑按钮

2.在下拉菜单中选择可用的ST-LINK(如果没有连接任何st-link,就会看到“No results found”)

3.点击Add,添加ST-Link

4.点击Done,完成配置,编辑窗口自动关闭

这时节点右上方的红色三角形消失,蓝色圆点还在,表示当前节点已经配置,但还没有部署。

用同样的方法,完成myProbe_Out和myProbe_In这两个节点的配置。







接下来,配置variables节点,添加要监测的变量。有时我们需要将不同的变量送往不同的显示组件,或者有的变量需要更精确的采样,需要配置成不同的采样模式,这时为了后续处理的方便,就可以在一个flow里,放置多个variables节点将变量分组。在当前这个例子里,我们只用了一个variables变量(myVariables)。


双击myVariables,打开编辑窗口,按图中步骤进行配置:

1.点击编辑按钮

2.添加可执行文件所在目录(直接将路径拷贝过来)

3.在File项的下拉菜单中选择可执行文件,CubeMonitor会自动分析并导入所有全局变量的列表






4. 在变量列表中列出的变量很多,可以用过滤器通过关键字将要监测的变量过滤出来。比如我们输入var,这时列表中就只剩下我们想要要监测的这三个变量了

5.点击变量前面的方框,选中这三个变量

6.为当前的配置取一个名字,这个名字代表的就是当前选择的变量组合。在所有的variables节点中都可以通过这个名字选择配置好的变量组合。

7.点击Add添加变量

8.为当前的variables组命名,之后在processing节点中就可以通过该名称来选择某个变量组了(见后续介绍)

9.添加好变量后,还需要配置变量采样的参数(采样模式和采样速度,以及是否有采样触发)。采样速度一般我们选择“sequential loop”,该配置下CubeMonitor会以最快的速度进行采样。或者你也可以自己设定采样频率。采样模式有Direct和snapshot两种。Direct模式属于非侵入式,通过JTAG或者SWD协议读取存储器的值,不需要添加任何代码到MCU程序。Snapshot模式,需要向MCU程序添加特定的代码,由MCU定时采样,将结果保存在MCU的内存中,再由CubeMonitor定期读出。Snapshot模式可以提供更精确的采样。在当前的例子中,我们使用direct模式就可以了。关于snapshot模式,我们会在第二个例子中做进一步介绍。

10.最后点击Done完成配置






Processing节点的输入连接到acq_in节点,接收从ST-link发来的数据,按不同的变量对数据进行组合,每50ms输出一次。比如要检测的是三个变量,那么processing节点就会每50ms输出三条消息,里面包含了这三个变量在这段时间内的采样数据,可能是一个,也可能是多个,跟设置的采样速度有关。processing节点的输出直接连接到chart节点就可以显示了。


这个节点的配置比较简单,只需要在GroupName的下拉列表中选择要处理的变量组就可以了(也就是在variables节点配置的第8步设置的变量组名)。






最后我们来配置用到的Dashboard的图形组件:chart节点和三个button节点。


双击chart节点(myChart),打开编辑窗口,设置整个图的大小,类型和显示的窗口时间等。


三个button节点在模板中已经配置好,所以不用再配置。但我们可以打开它们的编辑窗口看看里面是如何配置的,从图中可以看到,这三个button节点通过设置不同的topic实现了不同的功能。





如果想调整Dashboard的布局,可以按图中所示步骤进入布局设计界面。在这里,可以把图形组件进行分组,改变各个组件的大小和位置。Dashboard可以有多个标签页(Home,Advanced),在Dashboard界面的左上角进行选择。配置图形组件时,需要选择将其放在哪个标签页下。后面的例子,我们都是放在Home标签页下,就不再做特殊说明了。





现在所有的节点都已经配置完毕,点击右上方的DEPLOY按键,部署并运行编辑好的”流“。部署后所有节点上的蓝色小圆点都消失了。




点击右上方的DASHBOARD按键,打开dashboard就可以看到我们编辑的界面了。点击START ACQUISITION键开始采集数据,就可以看到监测的三个变量的实时变化情况了。




现在已经可以实时监测变量的变化了,要能够实时修改变量的值,还需要添加图中红框中的inject,variables和write panel节点。


Write panel节点会在Dashboard里添加一个输入框,而且Write panel节点与myProbe_Out节点相连,所以每次输入的值都会通过myProbe_Out发送到ST-LINK。


Variables节点里设置需要修改的变量的地址。


Inject节点的作用是可以手动或按照设定的时间间隔自动向“流”注入消息,这里我们利用它在程序启动时触发一次消息发送,把Variables设定的变量地址发送给ST-LINK。






Variables节点的设置跟前面一样。这里我们只需要将要修改的var_max, var_min这两个变量添加进来就可以了。





配置Write panel节点,选择放在“Home”标签页,并设置尺寸大小。







Inject节点里可以配置输出的消息负载类型(时间戳,数字,字符串等),设定消息的topic和消息发送的方式(一次性还是周期性的)。在这个例子中,我们主要是利用inject节点在程序启动时触发一次消息发送,所以Payload选择timestamp即可,repeat选项设置为none,然后勾选图中红框标出的选项(程序启动后触发一次消息发送)。设置完成后,inject节点显示的名字就会变成“timestamp”,并且右上方有一个数字1,表示只触发一次。





重新部署运行,进入Dashboard界面,可以看到下方多出了var_max, var_min这两个变量值的输入框和一个“WRITE”按钮。在输入框中写入新的变量值,点击WRITE按钮,从上面的点线图中就可以看到,对应的变量立刻发生变化了。

到这里,我们已经完成了所有的流编程内容。





通过菜单下的Export可以将整个流保存成json文件,操作步骤见上图。在保存的时候,可以选择只保存选中的几个节点(selected nodes),还是当前选中的标签页的整个流(current flow),也可以保存所有打开的标签页下的流(all flows)。





保存好的json文件,通过import菜单可以再次导入。见上图操作步骤。





在这个例子的最后,我们来了解一下节点之间传递消息的数据结构和debug节点。


将一个节点的输出连接到另一个节点的输入后,这两个节点就可以传递消息了。CubeMonitor节点之间的消息采用json格式,包括payload,topic,msgid等字段。在每一个节点的说明中可以看到它的输入消息和输出消息的字段定义,除了前面提到的这三个字段,各个节点根据所实现的功能不同,消息中包含的字段也有所不同。大部分节点都会用到payload和topic字段中的一个或者两个都用。在调试时我们一般关注的也是payload和topic这两个字段。


debug节点是一个非常好用的调试工具,它可以连接到任何节点的输出,来观察实际运行时消息传递的情况。在debug窗口(点击右边的小爬虫图标)可以看到所有Debug节点的输出,系统的出错信息也会输出在这里。


现在我们用两个debug节点分别连接到START按键和myVariables节点的输出。Debug节点配置成输出完整的消息内容。重新部署运行,然后在debug窗口就可以看到这两个节点的输出信息了。按下START按键,此时START节点输出了一个topic为“start”的消息来通知ST-LINK开始采样。START节点的输出消息先经过myVariables节点,再送到myProbe_out节点。


myVariables节点输出的消息包含:所有需要监测的变量的名称,地址,类型以及设定的采样参数等,并将topic设置为接受到的START节点消息中的topic内容。所有这些信息都可以通过debug节点看得清清楚楚。ST-LINK接收到消息就知道应该对哪些变量启动采样了。