打印

菜鸟请教STM32F103RB的闪存使用问题

[复制链接]
1873|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请问STM32F103RB内部的闪存可用来存储非易失性数据吗?如可以,有相关的例程吗?如不可,该如何实现上述目的?恳请大家回答!谢谢!!
沙发
IJK| | 2013-5-21 15:33 | 只看该作者
可以。印象里ST有例程,可以找找固件库里面的例子

使用特权

评论回复
板凳
hawksabre| | 2013-5-21 19:14 | 只看该作者
官网上应该有例程   找找看吧   应该有的   呵呵

使用特权

评论回复
地板
福州观沧海|  楼主 | 2013-5-22 08:52 | 只看该作者
我看到stm32f10x_flash.c里面有很多关于FLASH操作的函数,其中有一个FLASH写1个字(32位)的函数。如下:
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) {
...}  我的问题是:被当做存储数据的空间同时也可能是程序的空间,应该如何进行两者地址的区分呢?

使用特权

评论回复
5
airwill| | 2013-5-22 08:53 | 只看该作者
AN2594 的官方文档, 还有软件例程

使用特权

评论回复
6
福州观沧海|  楼主 | 2013-5-22 10:52 | 只看该作者
AN2594 介绍的是EEPROM 的应用吧

使用特权

评论回复
7
福州观沧海|  楼主 | 2013-5-22 16:25 | 只看该作者

变量KeyDecFlag的地址竟然是0x08001cb8,这不是程序存放的地址范围吗?手册说SRAM的地址范围是0x20000000以上啊。

STM32.JPG (16.63 KB )

STM32.JPG

使用特权

评论回复
8
香水城| | 2013-5-22 17:28 | 只看该作者
第一,STM32的片上闪存当然可以用来存储数据,比如你可以开辟一段区域存放从通信端口收到的KEY

第二,7楼的这个KeyDscFlag是一个const变量么?如果是,就肯定会放在RO的flash区域啊,你看看map file就知道了。

使用特权

评论回复
9
cjhk| | 2013-5-22 19:06 | 只看该作者
看看官网上的技术手册    好好钻研钻研   应该能够解决的   

使用特权

评论回复
10
txcy| | 2013-5-22 19:08 | 只看该作者
可以参考一下ST的相关例程

使用特权

评论回复
11
福州观沧海|  楼主 | 2013-5-24 16:59 | 只看该作者
KeyDecFlag是一个普通的一字节变量

使用特权

评论回复
12
福州观沧海|  楼主 | 2013-5-24 17:17 | 只看该作者
按理说,它应该被定义到SRAM空间的啊。怎么和程序空间混在一起了呢

使用特权

评论回复
13
hexiaolong2008| | 2013-5-24 22:00 | 只看该作者
大哥,你好好看看这段汇编的含义:
MOVS        r0, #0x02            ;给寄存器r0赋值0x02,r0作为载体,将数值0x02最终赋给变量KeyDecFlag
LDR        r1, [pc, #160]       ;把pc+160所指向的地址空间的内容装载到r1,这里r1只是个指针
STRB        r0, [r1, #0x00]      ;最后把r0的内容存储到r1+0所指向的地址空间,存储宽度为1个字节

所以,这里pc+160只是个指向KeyDecFlag地址的地址,即二维指针,也就是说,在0x08001cb8的地方存储的是KeyDecFlag的地址,因为这个地址是个常量,所以是存放在只读数据段的,即0x8000000到0x8040000的范围。

使用特权

评论回复
14
福州观沧海|  楼主 | 2013-7-14 08:40 | 只看该作者
谢谢楼上各位精彩回答,我的问题已经解决。虽然楼上诸位肯定知道方法,但出于礼貌,我有必要说一下我的解决方法:可以直接使用stm32f10x_flash.c文件里的函数存储非易失性数据。另外,本人更倾向于使用flash模拟EEPROM的方法,可直接调用eeprom.c文件里的函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

311

帖子

1

粉丝