STM32 FLASH 读写数据

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;    
}

6. keil 选择芯片型号

7. 在keil 里面查看对应芯片的Flash 大小

相关推荐
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg20058 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT10 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen11 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠13 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_13 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技16 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计16 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦17 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报17 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机