1. 《STM32 中文参考手册》,需要查看芯片数据手册,代码起始地址一般都是0x8000 0000,这是存放整个项目代码的起始地址
2. 编译信息查看代码大小,修改代码后第一次编译后会有这个提示信息
2.1 修改代码后编译,会有提示信息 KEIL,计算出来代码总共 61076 Byte
2.2 如果什么都没有改,直接编译是没有这个提示信息的
3. 定义Flash 保存数据的起始地址
0x08000000 是存放代码的起始地址,我们保存的数据要和代码分开,放在代码区域后面,所以后面加了个80000, 比keil 编译里面算出来的和要大将近2 万个字节,预留量很大,后期增加代码也基本不会覆盖到这里来
#define PAGE_ADDR (0x08000000 + 80000)
4. Flash 读接口, 从地址 PAGE_ADDR 处读取num 个16位的数据,保存到数组data 里面
u8 MemReadByte(u16 *data, u16 num)
{u16 *temp_addr = (u16*)(PAGE_ADDR);while(num--){*data++= *temp_addr++;}return 1;
}
5. Flash 写接口,将16 位的数组 写入到Flash里面, 从地址PAGE_ADDR 开始写,写num 个数字
u8 MemWriteByte(u16 *data, u16 num)
{FLASH_Status temp_stat;u32 temp_addr = PAGE_ADDR;FLASH_Unlock();temp_stat = FLASH_ErasePage(PAGE_ADDR);if(temp_stat != FLASH_COMPLETE){FLASH_Lock();return 0;} while(num--){temp_stat = FLASH_ProgramHalfWord(temp_addr, *data);if(temp_stat != FLASH_COMPLETE){FLASH_Lock();return 0;}temp_addr += 2;data++;}FLASH_Lock();return 1;
}