• 大小: 4KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: STM32  内部  flash  读写  

资源简介

针对 STM32F4xx 的内部flash的读写操作,经本人优化,运行稳定可靠。

资源截图

代码片段和文件信息

#include “stm32f4xx_flash.h“
#include “stm32f4xxflash.h“



void flashDelay(int n)
{
while(n-- > 0);
}

/*
//名称:FlashSave
//功能:flash 保存功能
//参数:
// p 要保存的数据。
// n 要保存的数据个数。
void FlashSave(char * p  int n )
{
int i;

FLASH_Unlock(); //解锁
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_OPERR|FLASH_FLAG_WRPERR|
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);   //清标志
FLASH_EraseSector(FLASH_OPR_SECTOR  VoltageRange_3); //擦除扇区
for(i = 0 ; i < n ; i++)
{
FLASH_ProgramByte(FLASH_SAVE_ADDR + ip[n]);//写字节
}
FLASH_Lock();//加锁
}


//名称:FlashSave
//功能:读取flash内数据
//参数:
// p 读取的数据存放的地方
// n 要读取的数据个数。
void FlashLoad(char * p  int n )
{
volatile int i;
volatile char * addr=(char *)FLASH_SAVE_ADDR;

FLASH_Unlock(); //解锁
//FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_OPERR|FLASH_FLAG_WRPERR| 
// FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);    //清标志
//FLASH_EraseSector(FLASH_OPR_SECTOR  VoltageRange_3); //擦除扇区
for(i = 0 ; i < n ; i++)
{
p[n] = addr[i];
//FLASH_LoadByte(FLASH_SAVE_ADDR + ip[n]);//写字节
}
FLASH_Lock();//加锁
}







#define DATA_32                 ((uint32_t)0x87654321)


void flashtest(void )
{
volatile int MemoryProgramStatus;
int Address;
int StartSector;
int EndSector;
int i;
volatile int data32;


FLASH_Unlock(); //解锁FLASH后才能向FLASH中写数据。


FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | 
      FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

// Get the number of the start and end sectors //
StartSector =FLASH_Sector_10;// GetSector(FLASH_Sector_10);  //获取FLASH的Sector编号
EndSector = FLASH_Sector_10;//GetSector(FLASH_Sector_10);

//擦除FLASH
for (i = StartSector; i < EndSector; i += 8)  //每次FLASH编号增加8,可参考上边FLASH Sector的定义。
{
/// Device voltage range supposed to be [2.7V to 3.6V] the operation will
//be done by word 
if (FLASH_EraseSector(i VoltageRange_3) != FLASH_COMPLETE)

while (1)
{
}
}
}

//擦除完毕//
//开始写入//
Address = FLASH_SAVE_ADDR;

while (Address < FLASH_SAVE_ADDR + 64)
{

if (FLASH_ProgramWord(Address DATA_32) == FLASH_COMPLETE)   //将DATA_32写入相应的地址。
{
Address = Address + 4;
}
else

// Error occurred while writing data in Flash memory. 
User can add here some code to deal with this error 
while (1)
{
}
}
}

FLASH_Lock();  //读FLASH不需要FLASH处于解锁状态。

//读出数据 检查写入值是否正确
Address = FLASH_SAVE_ADDR;
MemoryProgramStatus = 0x0;
while (Address < FLASH_SAVE_ADDR + 64)
{
data32 = *(__IO uint32_t*)Address;   //读FLASH中的数据,直接给出地址就行了。跟从内存中读数据一样。

if (data32 != DATA_32)
{
MemoryProgramStatus++;  
}

Address = Address + 4;
}  
}
*/
//


/////////////////////////////////////////////////////////////////////////////////////////////////

//读取指定地址的半字(16位数据)
//faddr:读地址
//返回值:对应数据.
u32 STMFLASH_ReadWord(u32 faddr)
{
       return *

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7176  2015-10-23 10:09  stm32F4xxflash.c

     文件       2413  2015-10-23 10:27  stm32F4xxflash.h

----------- ---------  ---------- -----  ----

                 9589                    2


评论

共有 条评论