STM32位段的定义及其操作方法详解

1 定义
首先需要明确下,位段,位带和别名区这三个名词
名词定义
位段
stm32用户参考手册使用的名字
位带
cortexm3参考手册使用的
别名区
地址总线上用来位访问地址区域,
所以说,位段和位带是一个意思,是不同手册的不同叫法。
由上述的名词解释得知,位带功能并不是stm32独有的,是cortexm3的功能(cortexm4也有这样的功能)。mcs51有位操作,以一位(bit)为数据对象的操作,mcs51可以简单的将p1口的第2位独立操作:p1.2=0;p1.2=1 ;这样就把p1口的第三个脚(bit2)置0置1。而stm32的位段、位带别名区最重要的就为了实现这样的功能。
2 位带操作
2.1 范围
位带是有范围的,并不是cortexm3全部地址空间都支持的。在 cm3中,有两个区中实现了位带。其中一个是 sram 区的最低 1mb 范围,第二个则是片内外设区的最低 1mb 范围。这两个区中的地址除了可以像普通的 ram 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。
支持位带操作的两个内存区的范围是:
0x2000_0000‐0x200f_ffff (sram 区中最低1mb区域)
0x4000_0000‐0x400f_ffff (片上外设区中的最低 1mb)
2.2 位带操作
对 sram 位带区的某个比特,记该比特所在字节的地址为a,位序号为 n (0<=n<=7),则它在别名区的地址为:
aliasaddr = 0x22000000 + ((a‐0x20000000)*8+n)*4 =0x22000000 + (a‐0x20000000)*32 + n*4对于片上外设位带区的某个比特,记该比特所在字节的地址为a,位序号为 n (0<=n<=7),则该比特在别名区的地址为:
aliasaddr = 0x42000000 + ((a‐0x40000000)*8+n)*4 = 0x42000000 + (a‐0x40000000)*32 + n*4上式中,“*4”表示一个字为 4 个字节,“*8”表示一个字节中有 8 个比特。
2.3代码实现
把“位带地址+位序号”转换别名地址宏为:
#define bitband(addr, bitnum) ((addr & 0xf0000000)+0x2000000 + ((addr &0xff fff)< <5) + (bitnum< <2))把该地址转换成一个指针:
#define mem_addr(addr, bitnum) *((volatile unsigned long *)((addr & 0xf0000000)+0x2000000 + ((addr &0xff fff)< <5) + (bitnum< <2)))其中
addr的取值范围:
0x2000_0000‐0x200f_ffff
0x4000_0000‐0x400f_ffff
注意:addr取值要32位对齐
bitnum的取值范围:
0-31
解析:
(addr & 0xf0000000) + 0x02000000:
区分sram还是外设,如果是外设,结果为4,再加0x2000000就等于0x4200000,0x42000000就是外设别名位带区。如果是sram,结果为2,再加上0x2000000就等于0x22000000,0x22000000就是sram别名位带区。
addr & 0x00ffffff:
屏蔽了最高2位,相当于减去0x20000000或者0x40000000。因为位带区的有效范围是1m,即0x100000,这样子就做到了低6位有效。
<< 5:
等价于乘以32
<< 2:
等价于乘以4
特别提醒
当你使用位带功能时,要访问的变量必须用 volatile 来定义。因为 c 编译器并不知道同一个比特可以有两个地址。所以就要通过 volatile,使得编译器每次都如实地把新数值写入存储器,而不再会出于优化的考虑。
3 位段的优点
最容易想到的就是通过 gpio 的管脚来单独控制每盏 led 的点亮与熄灭。另一方面,也对操作串行接口器件提供了很大的方便(典型如 74hc165,cd4094)。位带操作可以把代码缩小, 速度更快,效率更高,更安全。总之位带操作对于硬件 i/o 密集型的底层程序最有用处了
位带操作还能用来化简跳转的判断。
当跳转依据是某个位时,以前必须这样做
1、读取整个寄存器
2、掩蔽不需要的位
3、比较并跳转
使用位带操作后
1、从未带别名区读取状态位
2、比较并跳转
当然,对于写入操作也从4步精简到3步

中国网络安全业务收入逐年增长,“云安全”最受关注
地平线黄畅:未来2到3年,AI芯片出货量能达上千万级别
IBM 与 SAP 最新联合报告:ERP 已成企业推动可持续发展的“利器”
蓝牙耳机有什么功能应该如何选择蓝牙耳机
MPPT和功率分析仪在光伏发电行业的应用
STM32位段的定义及其操作方法详解
视频展台故障排除大全
便携式ECG介绍及相关TI产品介绍
三星开启8K下一个黄金时代 超高清产业即将爆发
锂电池采购成本多次上涨,如何利用数字化采购管理系统高效降本?
怎样调整激光笔
谷歌已经解雇了道德人工智能团队Meg Mitchell
诺基亚8什么时候上市?诺基亚8最新消息:诺基亚8或于七八月份发布,配2K屏和虹膜扫描仪
苹果5G手机缺席11月发布会!下半年危机四伏
奇美材昆山厂产能已满,部分订单转移到台湾
ST MEMS传感器设计应用指导以及常见问题
高通否认华为5G芯片是业界首款 并希望能够"重新书写历史"
广域网用什么进行组网的?
从融合洞见AI未来,看云计算、大数据与AI之间的关系
高景太阳能科创板IPO申请获深圳证券交易所受理