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

[复制链接]
2446|13
 楼主| 福州观沧海 发表于 2013-5-21 14:56 | 显示全部楼层 |阅读模式
请问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) {
...}  我的问题是:被当做存储数据的空间同时也可能是程序的空间,应该如何进行两者地址的区分呢?
airwill 发表于 2013-5-22 08:53 | 显示全部楼层
AN2594 的官方文档, 还有软件例程
 楼主| 福州观沧海 发表于 2013-5-22 10:52 | 显示全部楼层
AN2594 介绍的是EEPROM 的应用吧
 楼主| 福州观沧海 发表于 2013-5-22 16:25 | 显示全部楼层

变量KeyDecFlag的地址竟然是0x08001cb8,这不是程序存放的地址范围吗?手册说SRAM的地址范围是0x20000000以上啊。
STM32.JPG
香水城 发表于 2013-5-22 17:28 | 显示全部楼层
第一,STM32的片上闪存当然可以用来存储数据,比如你可以开辟一段区域存放从通信端口收到的KEY

第二,7楼的这个KeyDscFlag是一个const变量么?如果是,就肯定会放在RO的flash区域啊,你看看map file就知道了。
cjhk 发表于 2013-5-22 19:06 | 显示全部楼层
看看官网上的技术手册    好好钻研钻研   应该能够解决的   
txcy 发表于 2013-5-22 19:08 | 显示全部楼层
可以参考一下ST的相关例程
 楼主| 福州观沧海 发表于 2013-5-24 16:59 | 显示全部楼层
KeyDecFlag是一个普通的一字节变量
 楼主| 福州观沧海 发表于 2013-5-24 17:17 | 显示全部楼层
按理说,它应该被定义到SRAM空间的啊。怎么和程序空间混在一起了呢
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的范围。
 楼主| 福州观沧海 发表于 2013-7-14 08:40 | 显示全部楼层
谢谢楼上各位精彩回答,我的问题已经解决。虽然楼上诸位肯定知道方法,但出于礼貌,我有必要说一下我的解决方法:可以直接使用stm32f10x_flash.c文件里的函数存储非易失性数据。另外,本人更倾向于使用flash模拟EEPROM的方法,可直接调用eeprom.c文件里的函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

311

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部