打印
[STM32F3]

Flash 存储的基本操作

[复制链接]
108|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢动作|  楼主 | 2024-12-9 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Flash 存储的操作通常包括读取、写入和擦除。在 STM32 中,操作 Flash 存储需要通过专门的库函数,如 STM32 HAL 库提供的 HAL_FLASH_Program 和 HAL_FLASH_Erase 函数。

代码示例:Flash 写入操作
c
复制代码
#include "stm32f0xx_hal.h"

#define FLASH_USER_START_ADDR   0x0801F800  // 用户数据存储起始地址
#define FLASH_USER_END_ADDR     0x08020000  // 用户数据存储结束地址

// 写入 1 字节数据到指定地址
HAL_StatusTypeDef Flash_Write(uint32_t Address, uint8_t data) {
    HAL_FLASH_Unlock();  // 解锁 Flash 写入
    if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, data) == HAL_OK) {
        HAL_FLASH_Lock();  // 写入完成后锁定 Flash
        return HAL_OK;
    }
    HAL_FLASH_Lock();
    return HAL_ERROR;
}

// 擦除 Flash 页面(1KB)
HAL_StatusTypeDef Flash_Erase(uint32_t startAddress) {
    FLASH_EraseInitTypeDef EraseInitStruct;
    uint32_t PageError;

    HAL_FLASH_Unlock();

    EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
    EraseInitStruct.PageAddress = startAddress;
    EraseInitStruct.NbPages = 1;  // 擦除1页(1KB)

    if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
        HAL_FLASH_Lock();
        return HAL_ERROR;
    }

    HAL_FLASH_Lock();
    return HAL_OK;
}

使用特权

评论回复
沙发
慢动作|  楼主 | 2024-12-9 16:39 | 只看该作者
读取 Flash 存储
读取 Flash 存储的操作非常简单,只需要访问指定的地址即可。

代码示例:Flash 读取操作
c
复制代码
uint8_t Flash_Read(uint32_t Address) {
    return *(volatile uint8_t*)Address;  // 直接读取 Flash 地址
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

719

帖子

0

粉丝