STM32F103使用flash_algo解析FLM相关
1、全局区(.bss段和.data段)根据实际情况修改
2、栈顶地址根据实际情况修改
/* Flash OS Routines (Automagically Generated)
* Copyright (c) 2009-2015 ARM Limited
*/
#include "flash_blob.h"
//代码区 flash_code[]使用JLINK/STLINK等放到RAM,一般是0x20000000
static const uint32_t flash_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
};
const program_target_t flash_opt =
{
0x20000021, // Init代码区内的函数入口地址
0x2000005B, // UnInit代码区内的函数入口地址
0x20000077, // EraseChip代码区内的函数入口地址
0x200000FB, // EraseSector代码区内的函数入口地址
0x2000013D, // ProgramPage代码区内的函数入口地址
// BKPT : start of blob + 1 断点地址,通常用于调试。 对应
// RSB : address to access global/static data
// RSP : stack pointer
{
0x20000001,
0x20000C00, //对应STM32程序内存分布---全局区(.bss段和.data段)
0x20001000 //堆栈指针的初始值。 如果代码比较大的时候需要修改栈顶地址
},
0x20000400, // mem buffer location 用于烧录BIN固件存放的缓存Buff首地址。(在c_blob.tmpl文件内修改,按实际需要调整默认是entry + 1024*3)
0x20000000, // location to write prog_blob in target RAM 先将BIOS程序(对应代码区,也就是flash_code[]机器码)放置到entry,默认是entry=0x20000000
sizeof(flash_code), // prog_blob size BIOS程序(对应代码区,也就是flash_code[]机器码)的大小
flash_code, // address of prog_blob BIOS程序(对应代码区)的首地址。
0x00000010, // ram_to_flash_bytes_to_be_written 用于烧录BIN固件存放的缓存Buff的大小。
};
//全部运行在RAM内:一般从0x20000000开始。依次是:
//1、代码区flash_code[](相当于BIOS程序),(原版FLM一般小于1K,通过sizeof(flash_code)<1024)
//2、用于烧录BIN固件存放的缓存Buff首地址, (默认是entry + 1024=0x20000400)
//3、全局或静态数据,(默认是entry + 1024*3=0x20000C00)
//4、栈顶指针,(默认是0x20001000)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-01-16 网分阻抗格式变换
2021-01-16 RF电源(偏压)走线和电源去耦
2021-01-16 RF传输线弯角补偿