STM32学习——位带区的理解

本文深入解析STM32的位带操作机制,包括位带的概念、位带别名区的作用及其实现原理,以及如何通过位带操作对特定比特位进行读写。文章还提供了具体的代码示例,帮助读者理解位带操作的具体应用。

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

位带简介

位操作就是可以单独的对一个比特位读和写,类似与51中sbit定义的变量,stm32中通过访问位带别名区来实现位操作的功能
STM32中有两个地方实现了位带,一个是SRAM,一个是片上外设。在这里插入图片描述

个人理解

(1)位带本质上是一块地址区(例如每一位地址位对应一个寄存器)映射到另一片地址区(实现每一位地址位对应一个寄存器中的一位),该区域就叫做位带别名区,将每一位膨胀成一个32位的字。
(2)位带区的4个字节对应实际寄存器或内存区的一个位,虽然变大到4个字节,但实际上只有最低位有效(代表0或1)
在这里插入图片描述

映射过程

要设置0x2000 0000这个字节的第二个位bit2为1,使用位带操作的步骤有:
1、将1写入位 带别名区对应的映射地址(即0x22000008,因为1bit对应4个byte);
2、将0x2000 0000的值 读取到内部的缓冲区(这一步骤是内核完成的,属于原子操作,不需要用户操作);
3、将bit2置1,再把值写 回到0x2000 0000(属于原子操作,不需要用户操作)。
在这里插入图片描述
看一段代码
在这里插入图片描述
其中A是我们想要操作的位所在的字节地址(原地址),0x40000000是外设位带区的起始地址,0x42000000时外设位带别名区的起始地址。
一个字节有8位,每一位膨胀后是4个字节,所以84;
n(0<=n<=7)是位序号,所以*4;

对于位带区,只是理解,用的并不普遍。。。
Reference:
https://www.cnblogs.com/leo0621/p/9494290.html
野火教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值