STM32位带操作-详解-计算过程

本文详细介绍了STM32的位带操作,包括官方解释、位带操作地址转换计算和其优点。位带操作允许直接对单个比特进行读写,简化了对GPIO等硬件I/O的操作,尤其适用于IO口的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这篇文章主要用来讲解STM32中的位带操作,学习过51单片机的应改了解,在控制51单片机IO引脚时,只需要向某一个IO口赋值就可以实现,对应IO口的输出高或低。那么STM32可以不可以像51单片机那样,直接对引脚进行操作呢。答案是肯定的可以。这就用到了位带操作。

位带操作

位带操作的概念其实很多年前就有了,那还是 8051 单片机开创的先河。如今,CM3 将此能力进化,这里的位带操作是 8051 位寻址区的威力大幅加强版。

官方解释

先来看一下Cortex-M3权威指南中描述的位带操作:
支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写操作。在CM3中,有两个区中实现了位带。其中一个是 SRAM 区的最低1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。
在这里插入图片描述

正点原子库函数指导书解释

位带操作简单的说,就是把每个比特膨胀为一个 32 位的字,当访问这些字的时候就达到了访问比特的目的,比如说 BSRR 寄存器有 32 个位,那么可以映射到 32 个地址上,我们去访问这 32 个地址就达到访问 32 个比特的目的。这样我们往某个地址写 1 就达到往对应比特位写 1 的目的,同样往某个地址写 0 就达到往对应的比特位写 0 的目的。
在这里插入图片描述

对比下来还是下面写的更容易理解一些,现在我们知道了位带操作是将一位是数据膨胀为32位的字,那么他是怎么实现的呐?

位带操作地址转换计算

在这里插入图片描述
大家先看一下这个图注意一下,下面为位带区(就是原来的位置,占一位),而上面位带别名区(新地址,站32位)。(这里真的不知道咋解释了,试着理解一下吧)
在这里插入图片描述

CM3中支持位带操作的地址

首先我们要了解在STM32中有两个区域可以进行位带操作,支持位带操作的两个内存区的范围是:
0x2000 0000-0x200F FFFF (SRAM区中的最低1MB)
0x4000 0000-0x400F FFFF (片上外设区中的最低1MB)
对应别名区的范围为:
0x2200 0000-0x23FF FFFF
0x4200 0000-0x43FF FFFF

从这连个范围就可以看出点问题,支持位带操作的区域大小,差不多比位带别名区小32倍。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gussu-毛虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值