(KEILv5)使用matlab绘制从KEIL memory导出的内存数据
使用matlab绘制从KEIL memory导出的内存数据
如标题,某些时候我们需要分析keil调试过程中的数据,比如从I2S、SPI、I2C或者UART获取到的波形数据,这些数据时数字流,通过逻辑分析仪是没有办法直观的观察其波形,因此,我们需要把数据导出来,通过合适的工具使数据可视化,比如一些规律的波形图。
下面我将提供一种方法供参考
高潮来了
第一步:导出数据到本地
KEIL通过ULINK调试STM32时,我们可以通过keil的memory窗口定位到某一数组的内容,但是数字化的内容没有办法分析,因此我们可以先把数据导出到本地。
比如如下数组
uint16_t DATA[1024];//内存地址为0x20000ABC
我们可以使用如下命令把他导出到本地并保存,需要打开keil的command窗口,在其中输入如下命令:
:SAVE D:\DATA.HEX 0X20000ABC,0X20000ABC+1024
SAVE:为命令
D:\DATA.HEX: 保存路径
0X20000ABC:需要导出数组开始地址
0X20000ABC+1024:需要导出数组结束地址
这样就可以导出数组数据到本地了,需要注意导出数据的格式是hex386.
第二步:处理数据
因为KEIL导出的数据是hex386格式,并且转换后的数据也是不常见的小端模式,需要处理成常见的数据,这儿推荐使用sublime文本编辑器的列编辑快捷键,它可以很方便的进行数据列处理。
其快捷键为:Ctrl+A 然后 ctrl+shift+l,最后就可以通过shift+'<-'键进行复制、粘贴和移动了。
第三步:把十六进制数据转换成十进制数据
到此为止,处理的数据都是十六进制,因此需要使用xls转换成十进制数据,需要使用xls自带函数HEX2DEC
第四步:使用MATLAB绘制波形图
为什么不用xls显示波形图呢?数据只有几行的话用xls很方便,但是如果数据量很大而且有几百上千行,你有xls处理将花费非常多的时间。因此用matlab更方便。
matlab首先需要导入数据:
data = xlsread('data.xlsx',1,'A1:H254')
原始数据放在data.xlsx中,数据大小为从A到H有254行,8列。参数1表示是第一个sheet.
tmp = data(:);
这一句是为了把多维数组转化为一维数组并保存在tmp中。
L = length(tmp);x = 1:L;
获取数据长度。
I = plot(x,tmp);
显示波形图。