资源简介
针对 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
- 上一篇:微型伺服马达原理与控制.doc
- 下一篇:n阶汉诺塔源代码与演示程序
相关资源
- 基于STM32F4x9的LCD显示
- VS1053B编解码器的VDR分布式声音采集卡
- stm32的DAC播放音乐文件
- STM32+TMC5160代码电路图.rar
- 扩展Maxwell-CP2模型中具有内部结构的一
- 基于STM32的深海钻机甲板控制系统
- stm32f103.SchDoc
- STM32F103 USART+DMA
- DMA+stm32 407.zip
- 4_USART串口通信(空闲中断+DMA.zip
- stm32f105-usart-DMA收发demo
- STM32F042F6P6 Uart12DMA;发送中断接收
- 基于STM32的嵌入式双目图像采集系统设
- Adaptec发布业内系列最全内部SAS存储解
- 基于STM32F103C8单片机的晶联讯电子JL
- 基于STM32的温湿度检测系统实现
- stm32F4+w5300
- 14284969_《STM32单片机应用与全案例实践
- flash透明时钟140个
-
ST-li
nk-V2的SWD仿真使用方法.docx - 安富莱STM32开发板资料
- STM32F103实现OV7670摄像头显示
- STM32F207学习板例程
- STM32F103VCT6TR - High-density performance lin
- 基于USB总线的MC68HC908JB8 Flash在线编程
- STM32 SRAM启动的 KeiL 配置
- STM32的IAP-Bootloader程序
- STM32例程之Bootloader
- stm32f103 虚拟U盘,调试成功的
- 基于stm32F103vct6的SD卡FATFS文件系统移植
评论
共有 条评论