打印
[STM32F4]

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

[复制链接]
567|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 | 只看该作者
程序后面的空间应该都可以用吧

使用特权

评论回复
5
guanjiaer| | 2024-10-14 16:01 | 只看该作者
STM32的内部FLASH包含主存储器、系统存储器、OTP区域以及选项字节区域

使用特权

评论回复
6
heimaojingzhang| | 2024-10-14 16:36 | 只看该作者
由于内部FLASH空间主要存储的是应用程序,是非常关键的数据,为了防止误操作修改了这些内容,芯片复位后默认会给FLASH上锁

使用特权

评论回复
7
keaibukelian| | 2024-10-14 17:11 | 只看该作者
在对FLASH写入数据前,需要先给它解锁。解锁的操作步骤包括往Flash 密钥寄存器 FLASH_KEYR中写入特定的密钥值

使用特权

评论回复
8
paotangsan| | 2024-10-14 17:50 | 只看该作者
STM32提供了扇区擦除指令和整个FLASH擦除的指令,批量擦除指令仅针对主存储区

使用特权

评论回复
9
renzheshengui| | 2024-10-14 18:22 | 只看该作者
写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还还需要配置一系列的寄存器

使用特权

评论回复
10
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);
        }
}

使用特权

评论回复
11
月亮一键变蓝| | 2024-11-2 10:53 | 只看该作者
读取Flash数据相对简单,可以直接通过指针访问Flash地址

使用特权

评论回复
12
温室雏菊| | 2024-11-3 11:00 | 只看该作者
你可以用cubemx配置比较简单

使用特权

评论回复
13
失物招領| | 2024-11-3 12:00 | 只看该作者
我觉得可以参考例程的,每个芯片型号都有相关的例程操作

使用特权

评论回复
14
将爱藏于深海| | 2024-11-3 12:00 | 只看该作者
我觉得可以考虑用外部的flash比较容易一些,内部的麻烦

使用特权

评论回复
15
我吃小朋友| | 2024-11-3 13:00 | 只看该作者
建议还是直接参考例程,直接清晰明了

使用特权

评论回复
16
未说出口的像你| | 2024-11-3 15:00 | 只看该作者
这种操作内部flash就是计算好用的大小,解锁,格式化,然后使用存储,在加锁就行了

使用特权

评论回复
17
一只眠羊| | 2024-11-3 16:00 | 只看该作者
擦除操作会清除整个扇区的数据,因此在执行擦除操作前,确保不需要的数据已经备份

使用特权

评论回复
18
她已醉| | 2024-11-3 17:00 | 只看该作者
写入操作只能将1写入0,不能将0写入1。因此,在写入数据之前,通常需要先擦除目标扇区

使用特权

评论回复
19
在曼谷的春| | 2024-11-3 18:00 | 只看该作者
在完成所有Flash操作后,务必锁定Flash,以防止意外写入

使用特权

评论回复
20
春日负喧| | 2024-11-3 20:00 | 只看该作者
在写入数据之前,通常需要擦除目标扇区。STM32的Flash被划分为多个扇区,每个扇区的大小可能不同

使用特权

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

本版积分规则

128

主题

1392

帖子

0

粉丝