stm32调试– 获取内存数据

  • Post author:
  • Post category:其他


之前做stm32开发的时候为了获取stm32芯片内部数据想进了各种方法。一开始是用串口发送数据,后来系统更新到win10后串口驱动不兼容,于是就找到了另外一种调试方式。








我是在keil中进行stm32开发,stm32程序通过keil编译器编译,然后通过JLink下载到芯片上。在Debug模式中可以直接查看stm32的运行内存,如图1-1所示



图1-1 stm32中变量值及其内存值



只要知道数组在内存中的地址,即可以找到对应地址所存储的采样值。同时,Keil还提供了一个内置的命令用于将芯片内存对应地址段的内容存储到电脑上,其命令格式如表1-1所示:

表1-1 save命令参数详解


命令名

第一个参数

第二个参数

save

文件位置

内存段起始位置,

内存段结束位置

对于图1-1中的DemoduBuffer1[5000]数组,其起始地址是0x20000058,因为每个元素占2个字节,所以其最后一个数据地址0x20002767(该数组总共占据10000字节,转换成16进制就是0x2710,即最后一个数据地址是0x20000058+0x2710 – 0x1 = 0x20002767)。调用该命令“save ../sample.txt 0x20000058,0x20002767 ”后即将数据保存到sample.txt文件中,该文件中的数据如图1-2所示:



图1-2 保存到电脑上的HEX386格式文件



所有的内存数据都是以HEX386格式存储,其格式含义如表1-2所示:

表2-2 HEX386的文件格式


格式

:LLAAAARRDDDD………DDDDCC



用于表示该符号之后的数据是符合HEX386格式

LL

Length field,表示数据段(D)的字节数

AAAA

Address field,表示数据段第一个字节的地址

RR

Record type,表示数据段数值的含义

00    代表数据

01    代表纪录结束

02    代表扩展段地址记录

04    代表扩展线性地址记录


DD

Data,表示内存的数据

CC

校验值,用来判断获取的数据是否正确

stm32采用的是小端存储方式,内存是以8bit一个字节为一单位。



版权声明:本文为flydreamforever原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。