问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F103 Flash数据备份与擦除实战指南

创作时间:
2025-01-22 00:52:45
作者:
@小白创作中心

STM32F103 Flash数据备份与擦除实战指南

在嵌入式系统开发中,STM32F103微控制器因其高性能和丰富的外设资源而备受青睐。然而,如何安全地进行Flash存储器的数据备份与擦除,是开发者必须掌握的关键技能。本文将深入探讨STM32F103的Flash存储器管理技术,包括高效的数据备份和擦除方法,帮助开发者掌握这些关键技能,确保数据安全。

01

STM32F103 Flash存储器概述

STM32F103系列微控制器的Flash存储器具有以下特点:

  • 容量:通常为64KB到128KB,具体取决于芯片型号。
  • 结构:Flash存储器分为多个扇区,每个扇区大小不同。例如,STM32F103C8T6的Flash存储器分为64页,每页1KB大小。
  • 操作原理:Flash存储器支持字节级读取和块级擦除。数据写入前必须先擦除目标扇区。

02

数据备份方法

在擦除Flash存储器之前,备份需要保留的数据是至关重要的一步。以下是具体方法和注意事项:

选择备份区域

确定将数据备份到其他非易失性存储器(如RAM或其他Flash扇区)或外部存储设备。

读取目标扇区数据

在擦除前,使用代码将目标扇区中的数据读出并保存到选定的备份区域。以下是一个数据备份的代码示例:

#include "stm32f10x.h"

void save_data(uint32_t src_addr, uint32_t dst_addr, uint32_t length) {
    for (int i = 0; i < length / 4; i++) {
        *(__IO uint32_t*)(dst_addr + i * 4) = *(__IO uint32_t*)(src_addr + i * 4);
    }
}

03

Flash擦除技巧

解锁Flash控制寄存器

允许进行写入和擦除操作。

等待Flash空闲

确保当前没有其他操作正在进行。

启动扇区擦除

设置目标扇区并执行擦除命令。

锁定Flash控制寄存器

完成操作后锁定以防止误操作。

以下是一个扇区擦除的代码示例:

int flash_erase_sector(uint8_t sector) {
    FLASH_Unlock();
    while (FLASH_GetStatus() == FLASH_BUSY);
    FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);

    FLASH_Status status = FLASH_EraseSector(sector, VoltageRange_3);
    if (status != FLASH_COMPLETE) {
        FLASH_Lock();
        return -1;
    }

    FLASH_Lock();
    return 0;
}

04

数据恢复与写回

将备份的数据恢复到Flash中。以下是一个数据写回的代码示例:

void restore_data(uint32_t src_addr, uint32_t dst_addr, uint32_t length) {
    for (int i = 0; i < length / 4; i++) {
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, dst_addr + i * 4, *(__IO uint32_t*)(src_addr + i * 4));
    }
}

05

实际应用案例

为了更好地理解整个流程,以下是一个完整的应用案例:

  1. 配置开发环境:使用STM32CubeMX配置SYS、RCC、NVIC、GPIO等基本设置。

  2. 生成代码:生成初始代码框架。

  3. 添加Flash操作代码:将上述备份、擦除和恢复的代码添加到工程中。

  4. 调试与验证:通过仿真和调试,观察数据备份和恢复的效果。

通过以上步骤,可以安全地备份、擦除和重写Flash数据,同时降低数据丢失的风险。在实际开发中,还需要注意以下几点:

  • 电源电压:确保供电稳定,避免低电压导致擦除失败或损坏Flash。
  • 错误处理:检查并清除可能的错误标志,确保操作成功。
  • 上电时间:长时间操作需保证持续供电,防止掉电影响数据完整性。

掌握这些技巧后,开发者可以更加从容地应对STM32F103微控制器的Flash存储器管理任务,为项目的稳定运行奠定坚实基础。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号