历史上的今天
今天是:2024年09月16日(星期一)
2021年09月16日 | KST-STM32学习之位带操作
2021-09-16 来源:eefocus

位带别名区地址 = 位带别名区基址 + 位带区字节偏移 × 32(位带区的一个字节膨胀过来是32个字节) + 位带区位偏移 × 4(位带区的一个位膨胀过来是32位即4个字节)
1、位带认识
其实学习51的时候已经初步领略过,只是当时没有提出这么专业的名次,譬如:TR0 = 1不就是嘛!
51中可以进行位带操作的内存地址为20H 到 2FH 这 16 个字节共 128 位的内存!而其余内存只能字节操作!
这么方便的东西,对于STM32当然也是有的啦!
2、STM32的位带操作
有两部分可以进行位带操作, SRAM 区的最低 1MB 范围和片内外设区的最低 1MB 范围,而常用的位带操作为后者,即片外外设区的1MB,也就是外设寄存器所在的地址空间。
3、位带与位带别名区认识
编程操作时,不方便对外设寄存器的某一位直接访问,因此在片内外设区另外开辟了一个 32MB 大小的寻址空间,取名为位带别名区。在这个地址空间中,每 4个字节对应了位带区的一个位。
有了这层关系,对位带别名区的某 4 个字节的操作,就等价于对这个地址对应的位带区的某一位的操作。
4、位带与位带别名区对应关系
这里再次复习一下,地址换算到空间大小的方法,
先记住,2的10次方是1K,2的20次方是1M,2的30次方是1G,
然后具体就是数0的个数了,或者数1的个数也行!
Cortex-M3的地址空间是4GB,片内外设的地址从0x40000000到0x5FFFFFFF共512MB。(两者相减后为1FFFFFFF,共29个1,换算到空间大小就是2的29次方字节,就是512MB。)
512MB其中从 0x40000000 到 0x40100000 的地址空间是片内外设的 1MB 的位带区。(1MB的计算同上,共20个0,即2的20次方字节,就是1MB)。
从 0x42000000 到 0x43FFFFFF 是对应的 32MB 的位带别名区。
注意理清楚,位带区与位带别名区的关系!
直观理解图

更形象理解图

5、位带与位带别名区的映射公式
编程实现的时候首先确定要操作的寄存器的地址,也就是他的位带地址,然后确定要操作的是哪一位,最终根据映射关系计算出要操作的这一位所映射的位带别名区的地址。
所以有了下面的映射公示。
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000 +
((addr &0x00FFFFFF)<<5)+(bitnum<<2))
1
2
1、 addr 表示的是外设寄存器的地址,bitnum 表示的是要操作的这一位在这个寄存
器的第几位。
2、(addr & 0xF0000000)+0x2000000 区分的是片内外设区还是 SRAM 区的位带,片上外设区的位带地址是从 0x40000000 到 0x40100000,SRAM 区的位带地址是从 0x20000000 到0x20100000,大多数情况下只操作外设。
3、(addr &0x00FFFFFF)<<5)表示这一位所在的寄存器的第 0 位对应的位带别名区地址。由于位带区的一个寄存器是 32 位,因此映射到位带别名区就是 32 个字节,左移 5 相当于乘以 32。
4、bitnum<<2 是确定这一位相对于寄存器第 0 位对应的位带别名区地址的偏移地址。由于相对于寄存器的第 0 位,每偏移 1 个位,位带别名区就偏移 4 个字节,因此需要左移 2 位,相当于乘以 4。
emmmm,好吧,我承认第一看到这里的时候,确实蒙圈了。。。。
这个完全的理解,还需要结合上下文,我们就根据下面的图来看就行了!

应该差不多可以理解大概的意思了,熟练的话可能需要假以时日而已。
差不多就来看应用了。。。
之前对于IO的操作,是使用位设置函数GPIO_SetBits(××, ××),以及位清除函数GPIO_ResetBits(××, ××),而现在引入位带操作后就可以像51那样直接操作了!!!
譬如,PA1,其引脚模式已经设置为输出。
那么首先需要进行宏定义,即#define PA1 PAOut(1),然后就可以直接写PA1 = 1;代替GPIO_SetBits(GPIOA, GPIO_Pin_1)这样的繁琐代码了!
岂不美哉!!!
位带操作写程序还需要注意的地方

后面的分号切记不要忘记了!!!
史海拾趣
|
UCOS UCGUI STM32 TFT 一个包含以上内容的程序,是红牛开发板上的,当然也可以很容易的移植到其他的板子上 人不能总是获取,也要分享啊。… 查看全部问答> |
|
USB(Universal Serial Bus)即通用串行总线,用于把键盘、鼠标、打印机、扫描仪、数码相机、MP3、U盘等外围设备连接到计算机,它使计算机与周边设备的接口标准化,从2000年以后,支持USB2.0版本的计算机和设备已被广泛使用,USB2.0包括了三种速率: ...… 查看全部问答> |
|
单片机实现软件复位(软复位)的方法及讨论。(转帖)加自己整理。 单片机实现软件复位(软复位)的方法及讨论(天堂雨林博客blog.sina.com.cn/acer收集整理)单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用\"复位\",因为复位是纯硬件过 ...… 查看全部问答> |
|
RT,系统的设计要求如下: 1、CVBS视频信号输入(PAL/NTSC双制式),经过AD芯片转换为RGB565/666/888或CCIR601/CCIR656数字信号。2、数字视频信号输入FPGA或ARM或专用芯片,实现将视频信号(NTSC:720*480 PAL:720*576)放大成1024*768。3 ...… 查看全部问答> |
|
偶参加四月份北京车展,五月份京交会 ,都看到了一些德国MINI型轿车。大家如何看到一些德国MINI型轿车在大陆市场很走俏啊? http://weibo.com/vishaychina… 查看全部问答> |




