STM32的位带区和位带别名区的地址换算不明白,求教!
我看了它的位带说明,自己理解的总的思想是: 位带区nbit位的位带别名区地址= 位带别名区基地址(起始地址) + (位带偏移地址*8+n)*4 0<=n<=7 但是n是有限制还是无限制?若n ==8 ,岂不和下一个冲突了?这个没看懂,求教!位带区位带区bit位n位带别名区
0x4000000000x42000000
0x4000000010x42000004
0x4000000020x42000008
0x4000000030x4200000C
0x4000000040x42000010
0x4000000050x42000014
0x4000000060x42000018
0x4000000070x4200001C
0x4000000080x42000020
………………
0x4000000100x42000020
0x4000000110x42000024
0x4000000120x42000028
0x4000000130x4200002C
………………
限制在范围内的。
记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作:P1.2=0;P1.2=1;这样就把P1口的第三个脚(BIT2)置0置1。而现在STM32的位段、位带别名区就为了实现这样的功能。 它的对象可以是SRAM、I/O和外设空间。要实现对这些地方的某一位的操作。它是这样做的:在寻址空间(32位对应的地址空间为 4GB)的另一地方,取个别名区空间,从这个地址开始处,每一个字(32BIT)对应SRAM或I/O的一位。 这样,1MB SRAM就可以有 32MB 的对应别名区空间,就是1位膨胀到32位(1 BIT变为1个字节)。我们对这个别名区空间内的某一字操作(置0或置1),就等于它映射的 SRAM 或 I/O相应的某地址的某一位的操作。 本帖最后由 toofree 于 2018-8-10 00:18 编辑
位段中byte_offset是字节偏移地址,即以字节为单位递增。
byte_offset×32,即是表示用32个地址去表示一个字节内的8位。
bit_number×4,是说,每一个位,都由一个32位的数来表示,即占4个字节。
一个位用位段表示要占4个字节,自然8个位,就要占32个字节。
页:
[1]