3858
- 收藏
- 点赞
- 分享
- 举报
再说STM32中使用Flash模拟EEPROM
这是一片讲得很透彻的帖子,其实Flash也没那么难用 原帖:http://www.amobbs.com/thread-5288587-1-1.html 关于这个话题已经有很多贴了,况且官方也出了操作例程,但是感觉还是比较繁琐!
最近要用到这个功能,例程看了半天还是不怎么明白,最后只好仔细阅读了下<STM32F10xxx闪存编程>,感觉其实挺简单的,就是按照资料上说的操作相关的寄存器就可以了。
附上源程序:
define PAGE_ADDR (0x08000000 + 63 * 1024)
/***
- 函数名称: MemReadByte()
- 函数功能: 从存储器中读出num字节数据
- 入口参数: *dat:读出数据的保存地址
- num :读出的字节数
- 出口参数: 0:操作失败;1:操作成功
- 使用说明: 无
-
创建日期: 2010年12月15日 ***/ uint8 MemReadByte(uint16 data,uint16 num)
{ uint16 temp_addr = (uint16 *)PAGE_ADDR;while(num --) { *data ++ = *temp_addr ++; } return 1;}
/***
- 函数名称: MemWriteByte()
- 函数功能: 向存储器中写入num字节数据
- 入口参数: *dat:待写入数据
- num :写入的字节数
- 出口参数: 0:操作失败;1:操作成功
- 使用说明: 无
-
创建日期: 2010年12月15日 ***/ uint8 MemWriteByte(uint16 *data,uint16 num)
{ FLASH_Status temp_stat; uint32 temp_addr = PAGE_ADDR;FLASH_Unlock(); // Flash解锁,允许操作相关的寄存器 temp_stat = FLASH_ErasePage(PAGE_ADDR); // 擦出制定的页 if(temp_stat != FLASH_COMPLETE) { FLASH_Lock(); return 0; } while(num --) { temp_stat = FLASH_ProgramHalfWord(temp_addr,*data); if(temp_stat != FLASH_COMPLETE) { FLASH_Lock(); return 0; } temp_addr += 2; data++; } FLASH_Lock(); return 1;}
include "app_cfg.h"
uint16 write_buf[10] = {0,1,2,3,4,5,6,7,8,9};
int main(void) { uint16 cnt;
STM32Init();
MemWriteByte(write_buf,10);
for(cnt = 0;cnt < 10;cnt ++)
{
write_buf[cnt] = 11;
}
MemReadByte(write_buf,10);
while(1)
{
;
}
}
上面的程序是在63K开始的Flash中写入10个16位的数据,然后在把他读出来,当然在每次写时需要擦除一整页,只要数据不是非常频繁修改,不会影响Flash的使用寿命!
简单吧,呵呵! 我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片
相关问答
-
2013-12-07 22:45:43
-
2013-12-07 14:49:27
-
2014-04-08 23:35:47
-
2008-06-23 14:16:09
-
2013-08-25 11:19:52
-
2020-10-22 14:52:29
-
2013-11-19 13:16:54
-
2018-12-06 11:22:26
-
2019-01-16 17:34:58
-
2018-12-07 17:24:04
-
02013-08-24 22:15:18
-
2013-08-26 23:30:31
-
2013-08-27 13:35:24
-
2013-11-18 11:08:00
-
2013-11-23 08:55:19
-
2013-08-26 23:22:55
-
2019-01-07 16:26:22
-
2020-11-28 12:54:40
-
2018-12-11 09:12:44
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
10hi35169dv500平台使用http协议推拉流UVC摄像头,帧率问题
-
10hi3516cv610关于YOLO优化和调优问题
-
10hi_mpi_vpss_get_chn_frame err:0xa0078016报错
-
5gk7205v200(hisi3516ev200)如何接入b656?
-
30pipe管道创建失败
-
10atc转换模型失败
-
20拍摄静止画面显示正常,拍摄运动的画面出现马赛克显示
-
100hi3516cv610 通过易百纳官方SDK中编译出的uboot env kernel,移植到自己的工程中,MPP初始化时出现内核拷贝数据到用户端时出现错误导致内核进入pain模式进而时内核重启
-
5hisi3519 gs2972 bt1120 转sdi 无法正常显示问题
-
5hisi3516cv610 + gc4336p 夜晚很模糊
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认

微信扫码分享
QQ好友