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个地址。

转载自STM32 Flash读写;Flash地址对应的存储内容及方式;-CSDN博客

你可能感兴趣的:(stm32,嵌入式硬件,单片机)