使用STM32做机器人相关的应用,很经常遇到的一个情况就是希望能够实时的观察单片机中的变量,从而更直观的判断数据或算法的正确性,例如使用STM32+IMU做小车或无人机的姿态估计。

一个被广泛使用的方法是利用串口:串口数据输出到PC->在PC端接收或存储数据->进一步的数据处理及可视化。你还可以利用JLink的RTT功能把数据输出到PC,从而避免额外配置和占用STM32的一个串口,更进一步你可以直接使用JScope绘制曲线。部分商业IDE也支持类似的功能,这里就不一一列举。

STM32CubeMonitor简介

上面提到的方法都有各自的局限性,使用串口通用性很好但是串口传输数据会占用CPU资源,编写上位机绘制曲线往往也耗时耗力,而商业IDE和JLink严格意义上说并不是免费的,那么有没有免费而且好用的选择呢?ST前不久刚刚发布了一个系列的STM32CubeMonitor程序,针对的正是这一使用场景,这个系列由以下几个软件组成[1]:

  • STM32CMonPwr: Graphical tool displaying on PC power data coming from X-NUCLEO-LPM01A
  • STM32CMonRF: Software tool to test the RF performance of STM32-based hardware devices
  • STM32CMonUCPD: Monitoring and configuration software tool for STM32 USB-C and Power Delivery 3.0 applications
  • STM32CubeMon-Lin/Mac/Win: STM32CubeMonitor runtime variable monitoring and visualization tool on Linux for STM32 products

其中前三个针对X-Nucelo-LPM01A,RF设备和USB-C Power Delivery这三类特殊应用,后面的STM32CubeMon则提供了相对通用的变量观测和计算功能,而且支持Linux, Mac和Windows三个平台。这篇应用笔记简要的介绍STM32CubeMon的使用方法。

STM32CubeMonitor有以下功能和特点:

  • 使用SWD/JTAG接口获取数据,无须配置额外通讯接口
  • 允许在单片机程序运行的同时进行数据检测,对单片机应用程序的实时性影响很小
  • 除了基本的数据绘图,还允许对数据做函数运算、存储、网络传输等等
  • 使用图形化的编程方法完成所有功能,在达到根据具体应用自定义上位机这个目的的同时尽可能简化了上位机开发的繁琐过程

STM32CubeMonitor基本使用

我们通过一个简单的程序介绍STM32CubeMonitor的基本用法。假设我们在单片机的main()函数里运行这么一段程序:

float var;// 其他函数及变量int main(void)
{// 初始化函数// 用户算法uint32_t cnt = 0;for (;;) {var = 100 * sin(cnt++ / 150.0 * M_PI);delay(20);}
}

可以看到这个程序就是简单的进行正弦函数计算,假设这是我们在调试的“复杂”算法,而我们希望观察变量var的变化过程。

使用STM32CubeMonitor自带的模板可以很方便的构建以下示例程序:

很容易看出来,这个程序由上下两部分组成:

  • 上面的四个blocks用于获取数据
  • 下面的四个blocks用于处理数据

上半部分的前两个浅青色模块相当于两个按钮,START Acquisition用于启动数据获取过程,另一个STOP Acquision用于停止数据获取。中间的蓝色模块用于配置我们想要监控的程序变量,双击该模块你可以看到以下配置:

你要做的主要就是指定你在单片机上运行的可执行文件(xxx.elf),STM32CubeMonitor会自动分析该可执行文件中可监控的变量,你只需要选中你想要观察的变量即可。实际上这些变量是通过访问地址指定的,例如你有一个变量uint32_t myvar[3],而自动分析出来的变量列表里可能只列出了my_var[0],那么你只需要手动添加my_var[1]和my_var[2]并且在my_var[0]地址的基础上分别偏移4个byte和8个byte即可。

上半部分的最后一个block则是用于配置调试器,作为ST生态的一部分,STM32CubeMonitor只支持STLink。在这里我用的是ST-Link V3。

至此数据获取的配置就完成了。

下半部的四个blocks则是在获取的数据的基础上进行加工和处理。myProbein模块实质上跟上半部分的myProbe_out是同一个东西,都是利用ST-Link读取单片机的变量值:

在这里更多是从功能逻辑的角度考虑把二者割裂为in和out两部分了,你只需要从下拉列表里选中你使用的stlink即可。接下来我们就可以从myProbe_in里“拿”数据了。在Group Name一栏里选中你在上面的stm32cube_monitor模块里定义的变量组名称,你能看到var会在下面的Outputs里列出来。

最后你可以在myChart模块里选择将数据绘成曲线。这里我用了默认的Line chart。剩下的最后一个Clear Graph模块从名字就可以看出来是用来把曲线图表里的内容清空。

这样经过以上步骤一个简单的监控程序就完成了,你只需要点击右上角的deploy按钮然后通过dashboard就可以看到你刚刚配置的图表。在图标界面里记得点START ACQUISITION,你就可以看到曲线了。

以上例子是结合官方的basic模板所得到的一个最最基础的例子。在STM32CubeMonitor的左侧你还可以找到很多其他的功能模块,只要按照上面的思路就可以很方便的“拖拽”出你需要的上位机监控程序。

在mdk使用swd最后一步无反应_STM32应用笔记: 使用STM32CubeMonitor实时监测变量相关推荐

  1. mysql安装到最后一步无响应的问题超简单最有效解决

    mysql安装到最后一步无响应的问题超简单最有效解决 无论你是安装过还是没安装过,通过此方法都可以解决.之前我的机器和服务器就是都到最后一步卡住,上网搜索方法都无果.后自己尝试了很多次,亲测64位机和 ...

  2. 不以跬步无以致千里——Day1

    反转链表 题目面试描述:输入一个链表,反转链表后,输出新链表的表头. 示例1 输入: {1,2,3} 返回值: {3,2,1} 解题分析: 1.定义一个前驱节点pre,初始值为null,在定义一个cu ...

  3. win7装mysql一直未响应6_win7重装mysql最后一步无响应解决方法

    重新安装MySQL出示未响应,一般显示在安装MySQL程序最后一步的2,3项就不动了. 这种情况一般是你以前安装过MySQL数据库服务项被占用了. 解决方法: 一种方法:你可以安装MySQL的时候在这 ...

  4. Windows系统带你一步一步无脑使用babel

    不废话直接写看步骤: 1.在F盘新建一个文件夹叫babel 2.npm init 初始化项目 3.全局安装npm install babel babel-cli -g 4.项目安装npm instal ...

  5. IENet:分支交互一步无锚的定向遥感目标检测

    目录

  6. “张量网络压缩感知(TNCS)与无监督机器学习”学习笔记

    TNCS学习笔记 一.前情小故事 二.张量网络压缩感知(TNCS) 如何构造和优化∣ψ⟩\left| \psi \right\rangle∣ψ⟩ 如何通过在∣ψ⟩\left| \psi \right\ ...

  7. 无刷直流电机的无位置传感器控制学习笔记

    BLDC与PMSM关系 关于这个问题,很多人不太注意,我见过很多人把无刷直流电机和永磁同步电机不区分,以至于出现了正弦波无刷直流电机这样的叫法.实际上,在学校里面学习的时候,这个还是区分开的.一般把梯 ...

  8. 海康、大华网络摄像机RTSP流接入流媒体实现WEB无插件直播通过视频广场观看实时直播

    LiveNVR Onvif/RTSP流媒体服务,支持RTSP稳定拉流接入,支持Onvif协议接入,支持RTMP/HLS/HTTP-FLV分发,将传统安防监控设备互联化,无插件直播等. 什么是视频广场 ...

  9. 推荐系统三十六式(刑无刀)学习笔记(四)

    04 | 画鬼容易画人难:用户画像的"能"和"不能" 做好一个推荐系统,总共分为三步:1.认识每一个用户:2.给他推荐他感兴趣的东西:3.坐等各项指标上升. 什 ...

  10. Ice自学第一步——Windows下安装Ice和设置Ice的环境变量

    第一步,基于Windows下的安装,所以下载windows版的Ice,官网最新版本是Ice3.4.2: http://www.zeroc.com/download/Ice/3.4/Ice-3.4.2. ...

最新文章

  1. 哈工大 c语言测试与系统控制 ad,哈工大——c语言在测量与控制中应用实验报告.pdf...
  2. CTF -杂项密码学,常见密码介绍(一)
  3. 《深入浅出iPhone/iPad开发(第2版)》——组件可以触发特定事件
  4. 传统的Web应用程序和RESTful API
  5. java 变量锁_并发编程高频面试题:可重入锁+线程池+内存模型等(含答案)
  6. 转贴:Google Reader:信息背后的信息,无可替代的伟大
  7. Ehcache整合spring配置
  8. wxPython控件学习之TextCtrl(二)多行及样式文本框
  9. 微软模拟飞行10厦门航空涂装_微软飞行模拟IGN 评测 10 分:一个任你翱翔的自由世界...
  10. 搭档之家|立秋·暑去凉来 叶落知秋
  11. learn git branching学习整理
  12. Sails基础之Controller层
  13. 复制粘贴,替换规律性内容的小技巧
  14. Windows BAT批处理脚本教程
  15. ubuntu无法使用man
  16. c语言的积木编程,c语言入门3,自己造积木,掌握它就能随心所欲的完成各种工作了...
  17. 算法试题——每日一练
  18. 存储新图谱:DNA存储的边界与天地
  19. 【工具】XP超级终端的设置与使用
  20. 多媒体信息发布系统的独家优势

热门文章

  1. java我的世界显示合成表_我的世界:若从你的背包移除“合成表”,回到5年前,最原始状态...
  2. [置顶] 话说你最拼命的时候怎样拼命的?
  3. 谈谈tmpdir与innodb_tmpdir的区别和用处
  4. day 3 - 1 数据类型
  5. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Saratov
  6. SpaceNet 数据集
  7. 把lighttpd配置为系统服务
  8. php中url传递中文字符,特殊危险字符的解决方法
  9. 将CString转换成string ...
  10. java面向接口编程详解