(技巧一)OPT擦除
提示
本教程以STM32F1xx单片机的离线烧录为例,其他的32单片机也可参考本教程实现。
一、关于OPT擦除
STM32单片机如果开启了读保护,为了保证烧录正常,需要提前擦除STM32的OPT区域,并执行全片擦除后才能正常进行STM32的烧录工作。
二、OPT Lua数据结构
以下OPT Lua数据结构由STM32F1xx系列单片机的opt.flm文件生成(借助工具flm2lua.exe,生成方法和其他flm一致,这里不在赘述),该opt.flm文件可在flm
文件夹中找到。其他系列的STM32单片机的OPT Lua数据结构生成方法也一样。
注意!
一定要将三个结构体的名字改成program_opt_syscall、flash_opt_algo、flash_opt_code,同时把前面自动生成的 FLASH_START_ADDR 和 FLASH_PAGE_SIZE 删掉。
--以下是名字修改后的STM32F1xx系列单片机的OPT Lua数据结构
program_opt_syscall = {
breakpoint = 0x20000001,
static_base = 0x200001B4,
stack_pointer = 0x200005C8
}
flash_opt_algo = {
init = 0x20000021,
uninit = 0x2000005B,
erase_chip = 0x20000077,
erase_sector = 0x200000FB,
program_page = 0x2000013D,
program_buffer = 0x200001B8,
algo_start = 0x20000000,
program_buffer_size = 0x00000010
}
flash_opt_code = {
0xE00ABE00, 0x062D780D, 0x24084068, 0xD3000040, 0x1E644058, 0x1C49D1FA, 0x2A001E52, 0x4770D1F2,
0x4603B510, 0x4C5E2000, 0x485E6020, 0x485E6060, 0x485C6060, 0x485C60A0, 0x462060A0, 0xF01069C0,
0xD1080F04, 0x5055F245, 0x60204C58, 0x60602006, 0x70FFF640, 0x200060A0, 0x4601BD10, 0x69004850,
0x7080F420, 0x61104A4E, 0x69004610, 0x0080F040, 0x20006110, 0x484A4770, 0xF0406900, 0x49480020,
0x46086108, 0xF0406900, 0x61080040, 0xF64AE003, 0x494620AA, 0x48426008, 0xF01068C0, 0xD1F60F01,
0x6900483F, 0x0020F020, 0x6108493D, 0x69004608, 0x0010F040, 0xF6456108, 0x493D20A5, 0xE0038008,
0x20AAF64A, 0x60084939, 0x68C04835, 0x0F01F010, 0x4833D1F6, 0xF0206900, 0x49310010, 0x46086108,
0xF01068C0, 0xD0060F14, 0x68C04608, 0x0014F040, 0x200160C8, 0x20004770, 0x4601E7FC, 0x69004828,
0x0020F040, 0x61104A26, 0x69004610, 0x0040F040, 0xE0036110, 0x20AAF64A, 0x60104A24, 0x68C04820,
0x0F01F010, 0x481ED1F6, 0xF0206900, 0x4A1C0020, 0x20006110, 0x46034770, 0x47702001, 0x4603B510,
0xF0201C48, 0xE0260101, 0x69004815, 0x0010F040, 0x61204C13, 0x80188810, 0xF64AE003, 0x4C1320AA,
0x480F6020, 0xF01068C0, 0xD1F60F01, 0x6900480C, 0x0010F020, 0x61204C0A, 0x68C04620, 0x0F14F010,
0x4620D006, 0xF04068C0, 0x60E00014, 0xBD102001, 0x1C921C9B, 0x29001E89, 0x2000D1D6, 0x0000E7F7,
0x40022000, 0x45670123, 0xCDEF89AB, 0x40003000, 0x1FFFF800, 0x00000000
}