CubeMonitor监测STM32变量并导出数据为CSV文件&elf文件的生成

CubeMonitor1.6.0无法使用。搞了一天,最后卸载,考虑到可能是JAVA环境的问题,重新安装JAVA环境,然后安装1.5.0版本,一切就正常起来了。后来想想应该是JAVA环境的问题,因为前段时间重装系统了。
最近在做电机观测器,发现白噪声比较严重,想着把数据导出来看一下,方便后续对处理后数据的观测。CubeMonitor的监测效果如下
image.png
总的流程图很简单,只是检测变量的话只需要配置方框中的组件,非常方便,也可通过添加其他组件导出数据。有点像Qt的组件,通过拖拽组件编译生成一个UI界面

  • 红框:debug文件导入(.axf/.elf),变量选择
  • 黄框:选择ST-Link
  • 绿框:数据显示设置
    image.png

一、生成CubeMonitor所需的debug文件

1、生成.axf文件

keil的默认的ARM编译器会生成.axf文件

2、生成.elf文件

*.elf文件由GCC编译器生成,目前有以下三种方式

  1. CubeIDE能编译生成.elf文件

安装CubeIDE即可,注意安装文件所在目录不能有中文

  1. 使用makefile

需要安装GCC编译环境
CubeMX的可选生成工程有EWARM/MDK-ARM/STM32CubeIDE/Makefile
不需要自己写Makefile,在添加文件时只需要在makefile里进行添加即可,可以学习下ST怎么用makefile管理工程
例如添加FOC.c文件
image.png
之后移动到makefile目录下
image.png
输入mingw32-make开始编译

PS E:\github\MyWork\BLDC\FOC_MY\OPAMP> mingw32-make

image.png
编译完成后如下所示,会生成.elf.bin文件
image.png
image.png
3. 配置keil使用GCC编译器

  • 网上教程很多,但有以下几个缺点
  • 不能使用Go to
  • 要替换掉启动文件
  • 要为每一个工程进行配置,并非一劳永逸
  • 配置过程麻烦且问题较多

二、Cubemonitor监测变量

  1. 选中myVeriables导入Debug文件
    image.png
    点中添加节点后在Folder里填入.axf文件所在的文件夹地址,然后选中.axf文件,选中要检测的变量
    image.png
  2. 选中myProbe_Out添加ST-Link
    添加前要连接好ST-Link
    在这里插入图片描述
  3. 选中myProbe_In,选择刚刚添加的ST-Link设备
    在这里插入图片描述
  4. 选中myVeriables,添加1中的myVeriables即可,如果没问题会在下面显示被选中监测的变量
    在这里插入图片描述
  5. myChart 默认即可
    在这里插入图片描述
  6. 运行
    先点击部署,再点击DASHBOARD,就会出现如文首所示的观测界面,点击STARTACQUISITION按钮开始监测
    在这里插入图片描述
    三、导入数据
    官方说明
    需要用到下面两个节点,需要导入,没有导入前没有这两个模块
    image.png
    导入以上两个节点
    参考
    image.png
[{
    
    "id":"7e9c50ed.2ab67","type":"subflow","name":"Group variables in a .csv file","info":"","category":"STMicroelectronics","in":[{
    
    "x":60,"y":80,"wires":[{
    
    "id":"c7f149ae.894818"}]}],"out":[{
    
    "x":840,"y":360,"wires":[{
    
    "id":"802c75f2.9f7898","port":0}]}],"env":[{
    
    "name":"nbVar","type":"num","value":"","ui":{
    
    "icon":"font-awesome/fa-cogs","label":{
    
    "en-US":"Number of Variables"},"type":"input","opts":{
    
    "types":["num"]}}},{
    
    "name":"delete_time","type":"bool","value":"false","ui":{
    
    "icon":"font-awesome/fa-clock-o","label":{
    
    "en-US":"Single Time"},"type":"input","opts":{
    
    "types":["bool"]}}}],"color":"#3CB4E6","icon":"node-red/join.svg"},{
    
    "id":"7b54efc3.0009e","type":"function","z":"7e9c50ed.2ab67","name":"Associate values with same timestamp","func":"let i = 0;\nlet j = 0;\nlet n = 0;\nlet msg1; \nlet msgArray = new Array();\nlet nbVar = msg.payload.length;\n\nfor(i = 0; i < nbVar; i++){\n    \n    let underArrayLength = msg.payload[i].length;\n    \n    for(j = 0; j < underArrayLength; j++){\n            \n            for(n = 0; n < nbVar; n++){\n                msg1 = msg.payload[n][j];\n                msgArray.push(msg1);\n            }\n    }\n    msg.payload = msgArray;\n    return msg;\n}","outputs":1,"noerr":0,"x":650,"y":80,"wires":[["b3b24fdd.b01b9"]]},{
    
    "id":"b3b24fdd.b01b9","type":"split","z":"7e9c50ed.2ab67","name":"","splt":"\\n","spltType":"str","arraySplt":"${nbVar}","arraySpltType":"len","stream":false,"addname":"","x":870,"y":80,"wires":[["cf754130.7de2a"]]},{
    
    "id":"ca91d405.238ea8","type":"function","z":"7e9c50ed.2ab67","name":"Format data","func":"let output=\"\";\n\nif(typeof msg.payload == 'number') {\n    output = msg.payload;\n    \n}else if(typeof msg.payload == 'string'){\n    output = msg.payload;\n}else{\n    output = msg.payload.x + \";\"+ msg.payload.y;\n}\n\nmsg.payload = output ;\n\nreturn msg;","outputs":1,"noerr":0,"x":790,"y":200,"wires":[["802c75f2.9f7898"]]},{
    
    "id":"802c75f2.9f7898","type":"join","z":"7e9c50ed.2ab67","name":"Join consecutive messages from the number of monitored variables","mode":"custom","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":";","joinerType":"str","accumulate":false,"timeout":"","count":"${nbVar}","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":380,"y":360,"wires":[[]]},{
    
    "id":"c7f149ae.894818","type":"join","z":"7e9c50ed.2ab67","name":"Join [nbVar] consecutives messages","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":";","joinerType":"str","accumulate":false,"timeout":"","count":"${nbVar}","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":290,"y":80,"wires":[["7b54efc3.0009e"]]},{
    
    "id":"cf754130.7de2a","type":"function","z":"7e9c50ed.2ab67","name":"Delete duplicate timestamps if user wants","func":"let i;\nlet delDup = env.get(\"delete_time\");\nlet nbVar = env.get(\"nbVar\");\nlet msgArray = new Array();\n\nif(delDup === false){\n    return msg;\n}else{\n    \n    msgArray.push(msg.payload[0]);\n    \n    for(i=1; i < nbVar; i++){\n        \n        msgArray.push(msg.payload[i].y);\n        \n    }\n    \n    msg.payload = msgArray;\n    return msg;\n    \n}\n\n\n","outputs":1,"noerr":0,"x":260,"y":200,"wires":[["91613227.a8eb8"]]},{
    
    "id":"91613227.a8eb8","type":"split","z":"7e9c50ed.2ab67","name":"","splt":"\\n","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"","x":570,"y":200,"wires":[["ca91d405.238ea8"]]},{
    
    "id":"91d68244.047e7","type":"subflow","name":"Select .csv variable","info":"","category":"STMicroelectronics","in":[{
    
    "x":220,"y":120,"wires":[{
    
    "id":"e9aa15c3.2c15f8"}]}],"out":[{
    
    "x":1180,"y":120,"wires":[{
    
    "id":"d287b70e.45b4c8","port":0}]}],"env":[{
    
    "name":"varfilter","type":"str","value":"","ui":{
    
    "icon":"font-awesome/fa-cog","label":{
    
    "en-US":"Variable name"},"type":"input","opts":{
    
    "types":["str"]}}}],"color":"#3CB4E6","icon":"node-red/arrow-in.svg"},{
    
    "id":"d287b70e.45b4c8","type":"change","z":"91d68244.047e7","name":"keep only table of duplets","rules":[{
    
    "t":"set","p":"payload","pt":"msg","to":"payload.variabledata","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":950,"y":120,"wires":[[]]},{
    
    "id":"e9aa15c3.2c15f8","type":"switch","z":"91d68244.047e7","name":"filter variable","property":"payload.variablename","propertyType":"msg","rules":[{
    
    "t":"eq","v":"varfilter","vt":"env"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":120,"wires":[["c88ffe31.b60d9"]]},{
    
    "id":"c88ffe31.b60d9","type":"function","z":"91d68244.047e7","name":"define the .csv header ","func":"if(msg.payload.variabledata[0].y === undefined){\n    msg.payload.variabledata[0].x = 'timestamp' + \"_\" +  msg.payload.variablename;\n    msg.payload.variabledata[0].y = msg.payload.variablename;\n    return msg;\n}else{\n    return msg;\n}\n","outputs":1,"noerr":0,"x":660,"y":120,"wires":[["d287b70e.45b4c8"]]},{
    
    "id":"b724a6a7.177628","type":"tab","label":"Create .csv log file","disabled":false,"info":""},{
    
    "id":"f474eca8.7b351","type":"ui_chartst","z":"b724a6a7.177628","group":"1b8f9f84.b59fb","name":"myChart","order":4,"width":15,"height":9,"chartType":"line","curveType":"linear","duration":"10","ymin":"","ymax":"","x":620,"y":300,"wires":[]},{
    
    "id":"af306ec4.f0fad","type":"acquisition out","z":"b724a6a7.177628","name":"myProbe_Out","probeconfig":"3ab5d867.e37ba8","x":680,"y":140,"wires":[]},{
    
    "id":"be311bcb.2d3738","type":"acquisition in","z":"b724a6a7.177628","name":"myProbe_In","probeconfig":"3ab5d867.e37ba8","x":230,"y":380,"wires":[["d42b7c5c.e9b9"],[]]},{
    
    "id":"672c629e.55c89c","type":"ui_button","z":"b724a6a7.177628","name":"","group":"1b8f9f84.b59fb","order":3,"width":5,"height":1,"passthru":false,"label":"Clear Graphs","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"clear","x":410,"y":300,"wires":[["f474eca8.7b351"]]},{
    
    "id":"fddfae1a.63681","type":"ui_button","z":"b724a6a7.177628","name":"","group":"1b8f9f84.b59fb","order":1,"width":5,"height":1,"passthru":false,"label":"START Acquisition","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"start","x":250,"y":100,"wires":[["9767ad34.f46fd"]]},{
    
    "id":"7aa5d3b.ac0f92c","type":"ui_button","z":"b724a6a7.177628","name":"","group":"1b8f9f84.b59fb","order":2,"width":5,"height":1,"passthru":true,"label":"STOP Acquisition","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"stop","x":250,"y":180,"wires":[["9767ad34.f46fd"]]},{
    
    "id":"d42b7c5c.e9b9","type":"processing","z":"b724a6a7.177628","groupname":"MyVariables","groupid":"9767ad34.f46fd","expressions":[],"statistics":[],"logmode":"no","x":490,"y":400,"wires":[["f474eca8.7b351","fdcd4a27.d79ec8","c6e46d72.82fc5"],[]]},{
    
    "id":"b8f3a432.74d7e8","type":"file","z":"b724a6a7.177628","name":"","filename":"c:\\Temp\\Log_File.csv","appendNewline":true,"createDir":false,"overwriteFile":"false","encoding":"none","x":1300,"y":420,"wires":[[]]},{
    
    "id":"3c143b95.1aabb4","type":"comment","z":"b724a6a7.177628","name":"link the subflows in the .exe variables order","info":"","x":720,"y":480,"wires":[]},{
    
    "id":"c83e71e8.a4d32","type":"comment","z":"b724a6a7.177628","name":"Enter the number of variables connected","info":"","x":1020,"y":380,"wires":[]},{
    
    "id":"fdcd4a27.d79ec8","type":"subflow:91d68244.047e7","z":"b724a6a7.177628","name":"Data1","env":[{
    
    "name":"varfilter","value":"data1","type":"str"}],"x":690,"y":380,"wires":[["3f392198.19ae2e"]]},{
    
    "id":"c6e46d72.82fc5","type":"subflow:91d68244.047e7","z":"b724a6a7.177628","name":"Data2","env":[{
    
    "name":"varfilter","value":"data2","type":"str"}],"x":690,"y":440,"wires":[["3f392198.19ae2e"]]},{
    
    "id":"3f392198.19ae2e","type":"subflow:7e9c50ed.2ab67","z":"b724a6a7.177628","name":"Group variables in a .csv file","env":[{
    
    "name":"nbVar","value":"2","type":"num"},{
    
    "name":"nbVar","value":"4","type":"num"}],"x":1000,"y":420,"wires":[["b8f3a432.74d7e8"]]},{
    
    "id":"93517461.eeea38","type":"comment","z":"b724a6a7.177628","name":"Enter absolute path of the file","info":"","x":1320,"y":460,"wires":[]},{
    
    "id":"9767ad34.f46fd","type":"variables","z":"b724a6a7.177628","groupname":"MyVariables","accesspoint":0,"execonfig":"","variablelist":[],"triggerstartmode":"manual","triggername":"","triggerthreshold":"","frequency":"","frequencyType":"0","snapshotheader":"","mode":"direct","lastImportedTime":-1,"openStatus":false,"x":490,"y":140,"wires":[["af306ec4.f0fad"]]},{
    
    "id":"1b8f9f84.b59fb","type":"ui_group","z":"","name":"Chart","tab":"e4a22138.efd5b","order":1,"disp":true,"width":15,"collapse":false},{
    
    "id":"3ab5d867.e37ba8","type":"probe","z":"","probeid":"066FFF485457725187092531","probename":"ST-Link v2-1B (...92531)","protocol":"SWD","frequency":"1.8 MHz - Default","probeproperty":"{\"SWD\":[\"4.6 MHz\",\"1.8 MHz - Default\",\"950 kHz\",\"400 kHz\",\"150 kHz\"],\"JTAG\":[\"18 MHz\",\"9 MHz\",\"4.5 MHz\",\"2.25 MHz\",\"1.12 MHz - Default\",\"560 kHz\",\"280 kHz\",\"140 kHz\"]}","probeversion":"ST Link firmware version V2.J36","connectionType":"p2p"},{
    
    "id":"e4a22138.efd5b","type":"ui_tab","z":"","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]

image.png

三、导出数据

添加以下模块以导出数据
在这里插入图片描述

  1. select.CSV模块配置,变量名是被观测的变量
    在这里插入图片描述
  2. Group variables模块配置
    在这里插入图片描述
  3. 输出CSV文件
    文件名是包含绝对路径和文件名,如E:\github\MyWork\BLDC\FOC_MY\OPAMP\Debug\foc.csv,名称是模块显示的名字。
    行为选择追加至文件,如果是复写,同一个变量只会写如一个数据到文件并随着运行不断更新
    在这里插入图片描述
  4. 运行
    数据会随着Monitor运行不断地写入文件
    在这里插入图片描述
    之后可以将数据导入Matlab或其他工具进行处理
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Kongbobo39/article/details/131056606