资源简介
基于stm32 开发板的flash读写程序,可以保存用户数据,测试ok!

代码片段和文件信息
#include “ev_stm32_falsh.h“
uint16_t Flash_Write_Without_check(uint32_t iAddress uint8_t *buf uint16_t iNumByteToWrite)
{
uint16_t i = 0;
volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;
while((i < iNumByteToWrite) && (FLASHStatus == FLASH_COMPLETE))
{
FLASHStatus = FLASH_ProgramHalfWord(iAddress *(uint16_t*)buf);
i = i+2;
iAddress = iAddress + 2;
buf = buf + 2;
}
return iNumByteToWrite;
}
int Flash_Write(uint32_t iAddress uint8_t *buf uint32_t iNbrToWrite)
{
uint32_t sectoraddress;
uint32_t iNumByteToWrite = iNbrToWrite;
uint16_t sectoroffset;
uint16_t sectorremainspace;
uint16_t i = 0;
uint8_t tmp[FLASH_PAGE_SIZE];
volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;
FLASH_UnlockBank1();
sectoraddress = iAddress & (~(FLASH_PAGE_SIZE - 1 )) ;//扇区地址
sectoroffset = iAddress & (FLASH_PAGE_SIZE - 1); //在扇区内的偏移
sectorremainspace = FLASH_PAGE_SIZE - sectoroffset; //扇区剩余空间大小
if(iNumByteToWrite<=sectorremainspace) sectorremainspace = iNumByteToWrite;//不大于4096个字节
while( 1 ) {
Flash_Read(sectoraddress tmp FLASH_PAGE_SIZE); //读出整个扇区
for(i=0;i { //校验数据
if(tmp[sectoroffset+i]!=0XFF) break; //需要擦除
}
if(i FLASHStatus = FLASH_ErasePage(sectoraddress); //擦除这个扇区
if(FLASHStatus != FLASH_COMPLETE)
return -1;
for(i=0;i { //复制
tmp[i+sectoroffset]=buf[i];
}
Flash_Write_Without_check(sectoraddress tmp FLASH_PAGE_SIZE);//写入整个扇区
} else {
Flash_Write_Without_check(iAddressbufsectorremainspace);//写已经擦除了的直接写入扇区剩余区间.
}
if(iNumByteToWrite==sectorremainspace) //写入结束了
break;
else
{
sectoraddress += FLASH_PAGE_SIZE;
sectoroffset = 0;//偏移位置为0
buf += sectorremainspace; //指针偏移
iAddress += sectorremainspace;//写地址偏移
iNumByteToWrite -= sectorremainspace; //字节数递减
if(iNumByteToWrite>FLASH_PAGE_SIZE)
sectorremainspace=FLASH_PAGE_SIZE;//下一个扇区还是写不完
else
sectorremainspace = iNumByteToWrite; //下一个扇区可以写完了
}
}
FLASH_LockBank1();
return iNbrToWrite;
}
int Flash_Read(uint32_t iAddress uint8_t *buf uint32_t iNbrToRead)
{
int i = 0;
while(i < iNbrToRead ){
*(buf + i) = *(__IO uint8_t*) iAddress++;
i++;
}
return i;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2495 2014-09-26 10:50 application\ev_stm32_falsh.c
文件 878 2014-09-26 11:27 application\ev_stm32_falsh.h
文件 537 2014-09-26 11:00 application\startup.c
目录 0 2014-09-26 11:30 application
----------- --------- ---------- ----- ----
3910 4
- 上一篇:普通快速排序随机快速排序算法实验
- 下一篇:基于LQR的二级倒立摆模糊控制
相关资源
- 基于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 倒计时器
- AD7606采集程序
- 找不同FLASH游戏源码
- TMS320F2812_FLASH读写实例
评论
共有 条评论