STM32位带操作全解

本文将从下面几个问题展开进行介绍:

什么是位带操作、什么是位带区、什么是位带别名区、怎么使用位带操作、为什么要使用位带操作(或者说位带操作有什么优点)、什么时候使用位带操作。

一、什么是位带操作?

使用过51单片机的小伙伴应该有过类似的操作,想要点亮一个LED灯只要一个P2^1 = 0;就可以实现了,非常方便,其实,所谓的位带操作就等价于51单片机的位操作,但是在STM32里面,内核的最小寻址单位是字节,一个字节里面有8bit,那么,STM32又是怎么实现位操作的?要搞清楚这个问题,就要先弄明白下面两个问题,什么是位带区、什么是位带别名区。

二、什么是位带区

介绍位带区之前,我们先来看一下Cortex-M内核里面寻址空间是怎么分配的

这是一张Cortex-M内核寻址空间映射图,来自《Cortex M3和M4权威指南》

我们可以看到图中有两个位带区,分别是SRAM区里的0X20000000-0X200FFFFF地址段和片内外设区里的0X40000000-0X400FFFFF地址段(图中标号①处),它们的地址空间大小都是1M字节,在SRAM和外设地址段内的这1M大小的空间就是位带区,说白了就是支持位带操作的区域就是位带区。我们上面已经说过了,内核的最小寻址单位是字节,那么怎么将寻址单位缩小到bit?要弄明白这个问题,那就要先弄明白什么是位带别名区了。

三、什么是位带别名区

从位带别名区名字上理解,感觉它像是别人的替身,实际使用上它就是别人的替身(电影里出名的武打明星都有自己的替身,STM32这么出名,肯定也有自己的替身啦,危险的操作都让替身去做,自己躺着就行了),位带别名区就是为位带区服务的,对位带别名区的操作最终都会反映在位带区上,我们操作位带别名区的时候就等价于在操作位带区地址,那么位带别名区与位带区又是什么样的关联关系呢?

从上面映射图上可以看到,SRAM区里的0X22000000-0X23FFFFFF地址段和外设区里0X42000000-0X43FFFFFF地址段都是位带别名区,两个别名区空间大小都是32M。那么,这32M的位带别名区地址空间是怎么与1M的位带区地址空间对应起来的呢?其实,工程师们想出了一个很好的办法,地址映射,将1M字节里面的每一个bit映射到32M字节里面去,那么怎么映射呢?看到这里可能有些小伙伴就亿脸懵逼了,懵逼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值