向大家介绍 STM32F1 的位带操作,让 STM32 的位操作和 51 单片机的位操作一样简单。
位带操作
在学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机 IO 口进行位定义。但是 STM32 没有这样的关键字,而是通过访问位带别名区来实现。即将每个比特位膨胀成一个 32 位字,当访问这些字的时候就达到了访问比特的目的。比方说 BSRR 寄存器有 32 个位,那么可以映射到 32 个地址上,当我们去访问这 32 个地址就达到访问 32 个比特的目的。
STM32F1 中有两个区域支持位带操作,一个是 SRAM 区的最低 1MB 范围,一个是片内外设区的最低 1MB 范围(APB1、APB2、AHB 外设)。如下图所示:
从图中可知,SRAM 的最低 1MB 区域,地址范围是 0X2000 0000-0X200FFFFF。片内外设最低 1MB 区域,地址范围是 0X4000 0000-0X400F FFFF,在这个地址范围内包括了 APB1、APB2、AHB 总线上所有的外设寄存器。
在 SRAM 区中还有 32MB 空间,其地址范围是 0X2200 0000-0X23FF FFFF,它是 SRAM 的 1MB 位带区膨胀后的位带别名区,前面已经说过位带操作,要实现位操作即将每一位膨胀成一个 32 位的字,因此 SRAM 的 1MB 位带区就膨胀为 32MB的位带别名区,通过访问位带别名区就可以实现访问位带中每一位的目的。
片内外设区的 32MB 的空间也是一样的原理。 片内外设区的 32MB 地址范围是0X4200 00