STM32操作FLASH

以下将为你详细介绍 STM32 的 Flash 操作相关知识,包含基本原理、操作步骤,并给出具体的代码示例。

1. STM32 Flash 基本原理

1.1 Flash 存储器结构

STM32 的 Flash 存储器用于存储程序代码和一些需要掉电保存的数据。它通常被划分为多个扇区,每个扇区有固定的大小。不同系列的 STM32 芯片,其 Flash 扇区大小和数量可能不同。例如,STM32F103 系列的 Flash 扇区大小有 1KB、2KB、4KB、16KB、64KB 和 128KB 等。

1.2 Flash 操作限制
  • 写操作:在进行写操作之前,必须先擦除相应的扇区。因为 Flash 的写操作只能将 “1” 变为 “0”,而擦除操作会将整个扇区的数据都变为 “1”。
  • 擦除操作:擦除操作是以扇区为单位进行的,不能只擦除一个字节或一个字。
  • 保护机制:为了防止误操作或恶意修改,STM32 的 Flash 提供了写保护和读保护机制。

2. STM32 Flash 操作步骤

2.1 解锁 Flash

在进行写或擦除操作之前,需要先解锁 Flash。因为 Flash 默认是处于锁定状态的,以防止误操作。

2.2 擦除扇区

如果要写入新的数据,需要先擦除相应的扇区。可以选择擦除单个扇区或多个扇区。

2.3 写入数据

在扇区擦除完成后,就可以向 Flash 中写入数据了。写入数据时需要注意数据的对齐方式,通常是以半字(16 位)或字(32 位)为单位进行写入。

2.4 锁定 Flash

在完成写或擦除操作后,需要锁定 Flash,以保护数据安全。

3. 代码示例(以 STM32F103 为例)

#include "stm32f10x.h"

// 解锁Flash
void FLASH_Unlock(void)
{
    if ((FLASH->CR & FLASH_CR_LOCK) != 0)
    {
        FLASH->KEYR = FLASH_KEY1;
        FLASH->KEYR = FLASH_KEY2;
    }
}

// 锁定Flash
void FLASH_Lock(void)
{
    FLASH->CR |= FLASH_CR_LOCK;
}

// 擦除指定扇区
uint8_t FLASH_EraseSector(uint32_t Sector)
{
    uint32_t timeout = 0xFFFF;
    FLASH_Unlock();
    FLASH->CR |= FLASH_CR_PER;
    FLASH->AR = Sector;
    FLASH->CR |= FLASH_CR_STRT;
    while ((FLASH->SR & FLASH_SR_BSY) != 0)
    {
        if (timeout-- == 0)
        {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值