1. 什么是位段、位带别号区?
2. 它有什么优点?
答1: 是这样的,记住MCS51吗? MCS51便是有位操作,以一位(BIT)为数据方针的操作,
答2:
//
//
//
//
//
//
//
//
// 支撑位带操作的两个内存区的规模是:
// 0x2000_0000‐0x200F_FFFF(SRAM 区中的最低1MB)
// 0x4000_0000‐0x400F_FFFF(片上外设区中的最低1MB)
#define PERIPH_BB_BASE ((u32)0x42000000)
它 举 的 比如中, 这个 PERIPH_BB_BASE ((u32)0x42000000) 是怎么确认的?
这个文档 是 STM32 的 Firware library
Bit-Banding的意思是:对Bit-Band区一个字的操作对应实践存储器中的一位。
在STM32F10xxx的技能参阅手册中第2.3.3节,有这样的描绘:
Cortex-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别号存储器区中的每个字映射到位段存储器区的一个位,在别号存储区写入一个字具有对位段区的方针位履行读-改-写操作的相同作用。
在STM32F10x里,外设寄存器和SRAM都被映射到一个位段区里,这答应履行单一的位段的写和读操作。
下面的映射公式给出了别号区中的每个字是怎么对应位带区的相应位的:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
其间:
– bit_word_addr 是别号存储器区中字的地址,它映射到某个方针位。
– bit_band_base 是别号区的开始地址。
– byte_offset 是包括方针位的字节在位段里的序号
– bit_number 是方针位所在位置(0-31)
下面的比如阐明怎么映射别号区中SRAM地址为0x20000300的字节中的位2:
0x22006008 = 0x22000000 + (0x300*32) + (2*4).
对0x22006008地址的写操作和对SRAM中地址0x20000300字节的位2履行读-改-写操作有着相同的作用。
读0x22006008地址回来SRAM中地址0x20000300字节的位2的值(0x01 or 0x00)。
请参阅《Cortex-M3技能参阅手册》以了解更多有关位段的信息。
上面比如中的基地址0x22000000和你所讲的基地址0x42000000是固定在芯片中,你必须用这两个地址;基地址0x22000000用于操作内置RAM,基地址0x42000000用于操作内置外设。
STM32位界说
你能够才用先用__at来指定一个变量的ARM地址
然后在界说,那么你在程序中就能够象51中相同运用了,我便是这么界说的.
例:
unsigned long System_Mark[10]
#define System_Mark0
#define System_Mark0_OFFSET
#define Moter_State_Changed
#define Moter0_Direction
那么我在程序就中就能够对:
Moter_State_Changed =1;/Moter_State_Changed =0/ if (Moter_State_Changed)
Moter_State_Changed =~Moter_State_Changed;Moter_State_Changed =!Moter_State_Changed;