STM32 Flash读写;Flash地址对应的存储内容及方式;

概念:计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是1个字节,

1个存储单元存放1个字节,每个存储单元对应一个32位(bit)地址,所以重要的话说三遍:对于32bit的ARM CPU

一个32位地址指向1个字节!!!  一个32位地址指向1个字节!!!   一个32位地址指向1个字节!!!

我们常说的flash空间,多少多少K,指的是多少多少K byte


假如我们执行下面的函数操作:

FlashWriteWord_P(0x1082,&WordVar); /* 向0x1082、0x1083中写入0xABCD */
经过编译,从map文件查看flash内容如下:


注意,前面的1080是十六进制,所以从0x1080到0x1090,共16个地址跨越,因为还有0x108A....0x108F

从这个map中,我们能发现一些问题

(1)验证了一个32位地址存放的是1个字节。

(2)将一个16位数,也就是2个字节,存放的顺序是低字节在前,高字节在后,这个跟感官上不一样。

(3)未存放数据的闪存单元是0xFF,这个不是巧合,因为flash说到底,内部也是只有1和0两种状态,CPU默认都是1.

另外,一个潜规定,向Flash中写数据,起始地址最好是偶数,否则容易出现错误,所以:

  1. 可以在0x1080、0x1081中存放一个uint16_t类型的数据;
  2. 可以在0x1082、0x1083中存放一个uint16_t类型的数据;
  3. 但是不能在0x1081、0x1082中存放一个uint16_t类型的数据。

从上可以看出,数据在flash中存放顺序是低在前,高在后,那么读flash时呢,答案是,会再反转,高在前,低在后,因为读flash必须一次至少读16位,不太允许读8位,所以正好又反过来了。

在编程时,要注意给要分配要存储的内容地址,每个数据对应地址,都是偶数,因为1个数据要占用2个地址。


  • 13
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值