没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32F4--FLASH读写demo程
资源详情
资源评论
资源推荐
STM32F4--FLASH读写demo程序
www.51hei.com 2015-6-5 13:47
最近在写机器人的姿态解算,需要把一些数据保存到stm32f4的内部Flash中。于是调了一下
午Flash,整理出了下面这个demo程序。发现stm32f4的功能还挺强的,
8位、16位、32位、64位的数据都能读写。而且还能写入负数,虽然库里提供的函数写数据
的类型是无符号的,我也不知道这是什么原因。
flash.c
#include "flash.h"
/****************************************************************************
* 功 能: 获取地址Address对应的sector编号
* 入口参数:地址
* 出口参数:sector编号
* 说 明:无
* 调用方法:无
****************************************************************************/
uint16_t Flash_GetSector(uint32_t Address)
uint16_t sector = 0;
if((Address < ADDR_FLASH_SECTOR_1) && (Address >= ADDR_FLASH_SECTOR_0))
sector = FLASH_Sector_0;
else if((Address < ADDR_FLASH_SECTOR_2) && (Address >=
ADDR_FLASH_SECTOR_1))
sector = FLASH_Sector_1;
else if((Address < ADDR_FLASH_SECTOR_3) && (Address >=
ADDR_FLASH_SECTOR_2))
sector = FLASH_Sector_2;
else if((Address < ADDR_FLASH_SECTOR_4) && (Address >=
ADDR_FLASH_SECTOR_3))
sector = FLASH_Sector_3;
else if((Address < ADDR_FLASH_SECTOR_5) && (Address >=
ADDR_FLASH_SECTOR_4))
sector = FLASH_Sector_4;
else if((Address < ADDR_FLASH_SECTOR_6) && (Address >=
ADDR_FLASH_SECTOR_5))
sector = FLASH_Sector_5;
else if((Address < ADDR_FLASH_SECTOR_7) && (Address >=
ADDR_FLASH_SECTOR_6))
sector = FLASH_Sector_6;
else if((Address < ADDR_FLASH_SECTOR_8) && (Address >=
ADDR_FLASH_SECTOR_7))
sector = FLASH_Sector_7;
else if((Address < ADDR_FLASH_SECTOR_9) && (Address >=
ADDR_FLASH_SECTOR_8))
sector = FLASH_Sector_8;
else if((Address < ADDR_FLASH_SECTOR_10) && (Address >=
ADDR_FLASH_SECTOR_9))
sector = FLASH_Sector_9;
else if((Address < ADDR_FLASH_SECTOR_11) && (Address >=
ADDR_FLASH_SECTOR_10))
sector = FLASH_Sector_10;
else/*(Address < FLASH_END_ADDR) && (Address >= ADDR_FLASH_SECTOR_11))*/
sector = FLASH_Sector_11;
return sector;
/****************************************************************************
* 功 能: 擦除指定扇区
* 入口参数:SectorNum 扇区号
* 出口参数:无
* 说 明:无
* 调用方法:无
****************************************************************************/
void Flash_EraseSector(uint16_t SectorNum)
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
if (FLASH_EraseSector(SectorNum, VoltageRange_3) != FLASH_COMPLETE) while (1);
FLASH_Lock();
/****************************************************************************
* 功 能: 写入长度为length的32位数据
* 入口参数:address:地址
length: 数据长度
data_32:要写入的数据指针
* 出口参数:无
* 说 明:无
* 调用方法:无
****************************************************************************/
void Flash_Write32BitDatas(uint32_t address, uint16_t length, int32_t* data_32)
uint16_t StartSector, EndSector,i;
FLASH_Unlock(); //解锁FLASH后才能向FLASH中写数据。
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
StartSector = Flash_GetSector(address); //获取FLASH的Sector编号
EndSector = Flash_GetSector(address+4*length);
for (i = StartSector; i < EndSector; i += 8) //每次FLASH编号增加8,可参考上边FLASH
Sector的定义。
if (FLASH_EraseSector(i, VoltageRange_3) != FLASH_COMPLETE) while (1);
for(i=0; i<length; i++)
if (FLASH_ProgramWord(address, data_32[i]) == FLASH_COMPLETE) //将DATA_32写
入相应的地址。
剩余15页未读,继续阅读
weixin_38827143
- 粉丝: 1
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0