[STM32F4] 如何正确配置与操作内部Flash

[复制链接]
1574|11
 楼主| 米多0036 发表于 2024-9-30 17:51 | 显示全部楼层 |阅读模式
有没有大佬讲解一下如何配置STM32的Flash存储器

回复就哭哭 发表于 2024-9-30 23:17 | 显示全部楼层
Flash存储器用于存储程序代码、数据以及其他持久性信息。STM32使用链接器文件(.ld)来定义程序在Flash中的存放位置。默认情况下,STM32CubeIDE会自动生成适当的链接器文件
tpgf 发表于 2024-10-11 14:23 | 显示全部楼层
在使用内部FLASH存储其它数据前需要了解哪一些空间已经写入了程序代码。
Stahan 发表于 2024-10-13 22:53 | 显示全部楼层
程序后面的空间应该都可以用吧
guanjiaer 发表于 2024-10-14 16:01 | 显示全部楼层
STM32的内部FLASH包含主存储器、系统存储器、OTP区域以及选项字节区域
heimaojingzhang 发表于 2024-10-14 16:36 | 显示全部楼层
由于内部FLASH空间主要存储的是应用程序,是非常关键的数据,为了防止误操作修改了这些内容,芯片复位后默认会给FLASH上锁
keaibukelian 发表于 2024-10-14 17:11 | 显示全部楼层
在对FLASH写入数据前,需要先给它解锁。解锁的操作步骤包括往Flash 密钥寄存器 FLASH_KEYR中写入特定的密钥值
paotangsan 发表于 2024-10-14 17:50 | 显示全部楼层
STM32提供了扇区擦除指令和整个FLASH擦除的指令,批量擦除指令仅针对主存储区
renzheshengui 发表于 2024-10-14 18:22 | 显示全部楼层
写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还还需要配置一系列的寄存器
yzzly 发表于 2024-10-24 16:32 | 显示全部楼层
void FlashSectorErase(Uint32 SectorNum)
{
        FLASH_EraseSector(SectorNum,VoltageRange_3);
}

void FlashPageWrite(Uint32 SectorNum,Uint32 *SourceBuf,Uint32 Len)
{
        Uint32 Cnt = 0;
        __disable_irq();
        FLASH_Unlock();
        FlashSectorErase(SectorNum<<3);
        for(Cnt = 0;Cnt < Len;Cnt++)
        {
                FLASH_ProgramWord(FlashAddressTab[SectorNum]+Cnt*4,*(SourceBuf+Cnt));        //
                if(*(Uint32 *)(FlashAddressTab[SectorNum]+Cnt*4) != *(SourceBuf+Cnt))        //
                {
                        break;
                }
        }
        FLASH_Lock();
        __enable_irq();        
}

void FlashPageRead(Uint32 SectorNum,Uint32 *DestBuf,Uint32 Len)
{
        Uint32 Cnt = 0;
        Uint32 *SourceAddr=(Uint32 *)FlashAddressTab[SectorNum];
        for(Cnt=0;Cnt<Len;Cnt++)
        {
                *(DestBuf+Cnt)=*(SourceAddr+Cnt);
        }
}
月亮一键变蓝 发表于 2024-11-2 10:53 | 显示全部楼层
读取Flash数据相对简单,可以直接通过指针访问Flash地址
温室雏菊 发表于 2024-11-3 11:00 | 显示全部楼层
你可以用cubemx配置比较简单
失物招領 发表于 2024-11-3 12:00 | 显示全部楼层
我觉得可以参考例程的,每个芯片型号都有相关的例程操作
将爱藏于深海 发表于 2024-11-3 12:00 | 显示全部楼层
我觉得可以考虑用外部的flash比较容易一些,内部的麻烦
我吃小朋友 发表于 2024-11-3 13:00 | 显示全部楼层
建议还是直接参考例程,直接清晰明了
未说出口的像你 发表于 2024-11-3 15:00 | 显示全部楼层
这种操作内部flash就是计算好用的大小,解锁,格式化,然后使用存储,在加锁就行了
一只眠羊 发表于 2024-11-3 16:00 | 显示全部楼层
擦除操作会清除整个扇区的数据,因此在执行擦除操作前,确保不需要的数据已经备份
她已醉 发表于 2024-11-3 17:00 | 显示全部楼层
写入操作只能将1写入0,不能将0写入1。因此,在写入数据之前,通常需要先擦除目标扇区
在曼谷的春 发表于 2024-11-3 18:00 | 显示全部楼层
在完成所有Flash操作后,务必锁定Flash,以防止意外写入
春日负喧 发表于 2024-11-3 20:00 | 显示全部楼层
在写入数据之前,通常需要擦除目标扇区。STM32的Flash被划分为多个扇区,每个扇区的大小可能不同
您需要登录后才可以回帖 登录 | 注册

本版积分规则

138

主题

1431

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部