|
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。
TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。
操作外设寄存器或者指定位宽的总线外设注意是8bit,16bit还是32bit操作,这样操作才能正常。
支持8bit,16bit,32bit,64bit,单精度浮点,双精度浮点,连续地址读写和字符串读取
函数:pg_init()
用于初始化TOOL的SWD接口
8bit读函数:pg_read8, pg_read_u8, pg_read_s8
用于读取目标板指定RAM空间或者寄存器地址的8bit数据
pg_read8读取是原始bit值
pg_read_u8表示读取无符号值
pg_read_s8表示读取有符号值
比如读取地址0x2000 0000地址的8bit数据,就是data, re = pg_read8(0x20000000),re = 1 表示OK, 0表示失败, data是返回的8bit数据
8bit写函数:pg_write8,pg_write_u8,pg_write_s8
用于目标板指定RAM空间地址或者寄存器地址的8bit数据写入
pg_write8是写入原始bit值
pg_write_u8表示写入无符号值
pg_write_s8表示写入有符号值
比如写地址0x2000 0000地址的8bit数据,就是re = pg_write(0x20000000, 0x55),re = 1 表示OK, 0表示失败。
16bit读函数:pg_read16, pg_read_u16, pg_read_s16
用于读取目标板指定RAM空间或者寄存器地址的16bit数据
pg_read16读取是原始bit值
pg_read_u16表示读取无符号值
pg_read_s16表示读取有符号值
比如读取地址0x2000 0000地址的16bit数据,就是data, re = pg_read16(0x20000000),re = 1 表示OK, 0表示失败, data是返回的16bit数据
16bit写函数:pg_write16,pg_write_u16,pg_write_s16
用于目标板指定RAM空间地址或者寄存器地址的16bit数据写入
pg_write16是写入原始bit值
pg_write_u16表示写入无符号值
pg_write_s16表示写入有符号值
比如写地址0x2000 0000地址的16bit数据,就是re = pg_write(0x20000000, 0x5566),re = 1 表示OK, 0表示失败。
32bit读函数:pg_read32, pg_read_u32, pg_read_s32
用于读取目标板指定RAM空间或者寄存器地址的32bit数据
pg_read32读取是原始bit值
pg_read_u32表示读取无符号值
pg_read_s32表示读取有符号值
比如读取地址0x2000 0000地址的32bit数据,就是data, re = pg_read32(0x20000000),re = 1 表示OK, 0表示失败, data是返回的32bit数据
32bit写函数:pg_write32,pg_write_u32,pg_write_s32
用于目标板指定RAM空间地址或者寄存器地址的32bit数据写入
pg_write32是写入原始bit值
pg_write_u32表示写入无符号值
pg_write_s32表示写入有符号值
比如写地址0x2000 0000地址的32bit数据,就是re = pg_write(0x20000000, 0x55665566),re = 1 表示OK, 0表示失败。
64bit写函数:pg_write_int64,pg_read_int64
用于目标板指定RAM空间地址或者寄存器地址的64bit数据读写
pg_write_int64是64bit数据写入
pg_read_int64是64bit数据读取
比如读地址0x2000 0000地址的64bit数据,就是data, re = pg_read_int64(0x20000000),re = 1 表示OK, 0表示失败, data是返回的64bit数据
单精度浮点函数:pg_write_float,pg_read_float
用于目标板指定RAM空间地址的单精度浮点数据读写
pg_write_float是单精度浮点数据写入
pg_read_float 是单精度浮点数据读取
比如读地址0x2000 0000地址的单精度数据,就是data, re = pg_read_float (0x20000000),re = 1 表示OK, 0表示失败, data是返回的单精度浮点数
双精度浮点函数:pg_write_double,pg_read_double
用于目标板指定RAM空间地址的双精度浮点数据读写
pg_write_double是双精度浮点数据写入
pg_read_double是双精度浮点数据读取
比如读地址0x2000 0000地址的双精度数据,就是data, re = pg_read_double(0x20000000),re = 1 表示OK, 0表示失败, data是返回的双精度浮点数
连续地址读:pg_read_mem
用于目标板指定RAM空间地址数据的读取,最大读取4096字节
比如读地址0x20000000地址的10个数据,就是
re, data = pg_read_mem(0x20000000, 10)
re = 1 表示OK, 0表示失败。 data 是二进制字符串数组,只是以字符串形式表示,字符的原始值还是本身,读取出来就是类似这样data = "\x00\x00\x11\x22\x33"
连续地址写:pg_write_mem
用于目标板指定RAM空间地址数据的读取,最大写4096字节
比如读地址0x20000000地址的5个数据,就是
data = "\x00\x00\x11\x22\x33"
re = pg_write_mem(0x24000000, data)
re = 1 表示OK, 0表示失败。
读取字符串:pg_read_string
比如:pg_read_string(0x20000000, 1024) --返回0x20000000开始的字符串(0结束), 搜1024字节)
1、8bit,16bit,32bit,64bit,单精度浮点,双精度浮点测试
[C] 纯文本查看 复制代码 -- 根据需要判断re返回值,不想判断,可以不加返回值
local re
local data
local value
local value1
local value2
local value3
function printf(...)
print(string.format(...))
end
pg_init()
-- 8bit 测试
pg_write_u8(0x24000000, 4)
value = pg_read_u8(0x24000000)
printf("pg_read_u8 = %d", value)
-- 16bit 测试
pg_write_s16(0x24000000, -466)
value = pg_read_s16(0x24000000)
printf("pg_read_s16 = %d", value)
-- 32bit 测试
pg_write_s32(0x24000000, -466777)
value = pg_read_s32(0x24000000)
printf("pg_read_s32 = %d", value)
-- 单精度浮点
pg_write_float(0x24000000, 0.12)
value2 = pg_read_float(0x24000000)
printf("pg_read_float = %f", value2)
-- 64bit 测试
re = pg_write_int64(0x24000000, 0x1122334455667788)
if(re == 1) then
print("64bit数写入成功")
else
print("64bit数写入失败")
end
value1, re= pg_read_int64(0x24000000)
if(re == 1) then
printf("pg_read_int64 = %16x", value1)
else
print("64bit数读取失败")
end
-- 双精度浮点
re = pg_write_double(0x24000000, 0.123)
if(re == 1) then
print("双精度浮点数写入成功")
else
print("双精度浮点数写入失败")
end
value3, re= pg_read_double(0x24000000)
if(re == 1) then
printf("pg_read_double = %.15f", value3)
else
print("双精度浮点数读取失败")
end
2、内存批量读写测试
[C] 纯文本查看 复制代码 local dataread
local datawrite
local re
pg_init() -- 初始化SWD接口
---------------------------------------------------
-- 常数方式直接写入
---------------------------------------------------
datawrite = "\x11\x22\x33\x44\x55"
re = pg_write_mem(0x24000000, datawrite)
if(re == 1) then
print("写入成功")
else
print("写入失败")
end
re,dataread = pg_read_mem(0x24000000, 5)
if(re == 1) then
print("读取成功")
print_hex(dataread)
else
print("读取失败")
end
---------------------------------------------------
-- 变量数据写入
---------------------------------------------------
datawrite = string.format("%c%c%c%c", 0xAA, 0xBB , 0xCC, 0xDD)
re = pg_write_mem(0x24000000, datawrite)
if(re == 1) then
print("写入成功")
else
print("写入失败")
end
re,dataread = pg_read_mem(0x24000000, 4)
if(re == 1) then
print("读取成功")
print_hex(dataread)
else
print("读取失败")
end
FAQ:
1、读取失败解决办法
H7-TOOL的SWD接口Lua函数读取失败后处理办法(2023-04-07)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=118696
|
|