资源简介
针对 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阶汉诺塔源代码与演示程序
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- flash3.0小游戏
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- flash as3 多点触控-缩放-旋转-滑动.zi
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- 国内一家大型软件公司内部的正规软
- DSP28335程序片内FLASH搬运至RAM运行的
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- flash 倒计时器
评论
共有 条评论