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

发布者:Lianai最新更新时间:2024-03-29 来源: elecfans关键字: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步

图片


关键字:STM32  位段  操作方法 引用地址:STM32位段的定义及其操作方法详解

上一篇:STM32定时器(二)定时器中断
下一篇:STM32内部重要功能全记录

推荐阅读最新更新时间:2026-03-24 06:46

STM32 中 BIT_BAND(/带)和别名区使用入门
一、 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ;这样就把P1口的第三个脚(BIT2)置0置1。而现在STM32的位段、位带别名区就为了实现这样的功能。 它的对象可以是SRAM、I/O和外设空间。要实现对这些地方的某一位的操作。它是这样做的:在寻址空间(32位对应的地址空间为 4GB )的另一地方,取个别名区空间,从这个地址开始处,每一个字(32BIT)对应SRAM或I/O的一位。 这样,1MB SRAM 就可以有 32MB 的对应别名区空间,就是1位膨胀到32位(1 BI
[单片机]
STM32单片机串口一键下载电路与操作方法详解
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 要了解STM32的几种启动模式. BOOT0接GND,BOOT1接GND.那就是正常的启动模式,从flash加载代码. 而BOOT0接V3.3,BOOT1接GND.则是ISP模式,也就是串口更新代码. 其次,你要了解STM32 ISP下载代码的过程. 首先BOOT0接V3.3,然
[单片机]
<font color='red'>STM32</font>单片机串口一键下载电路与<font color='red'>操作方法</font>详解
HDDY直流电源综合特性测试仪功能操作方法
主菜单: 图4-1 主菜单 1、综合测试 综合测试显示测量直流电流、测量直流电压、测量交流电压和测量纹波电压,并计算出稳压精度、稳流精度、纹波系数。 使用的按钮如下: 返回:返回上一级菜单。 开始:参数设置后,开始测量。 列表:以列表方式显示测量结果。 趋势:以趋势方式显示测量结果。 概要:显示主要测量参数。 保存:保存当前测量结果。 终止:终止当前测量。 退出:(回放状态下显示)返回记录查看界面。 :在插有U盘的时候,可保存图片。 图4-1-1综合测试编号设置 图4-1-2综合测试参数设置 1.1
[测试测量]
HDDY直流电源综合特性测试仪功能<font color='red'>操作方法</font>
指针式万用表测量直流电流操作方法图解
指针式是一种多功能、多量程的测量仪表。在生活,工业中都很常见,前几天我们讲到了用指针式万用表测试直流电压的基础知识,今天我们来介绍一下如何用指针式万用表测试直流电流。 平时用万用表判断旧干电池时,除要测量电池的电压,还要测短路电流。其操作方法如图1-13所示。将万用表的量程开关拨至万用表的最大直流电流挡,如500ma或1000ma等,因万用表的型号不同而不同,用红表笔接待测电池正极,黑表笔接其负极。表笔接触电池的瞬间读取指示电流值,能正常供电的电池,其短路电流应大于200ma,否则认为被测电池已基本耗尽。 在测电池的短路电流时,时间要尽可能短,这不仅有利于保 护万用表,而且能减小电池耗电,延长电池的使用寿命。 使用直流
[测试测量]
指针式万用表测量直流电流<font color='red'>操作方法</font>图解
UL94水平垂直燃烧测试仪的简介及操作方法
水平垂直燃烧测试仪UL94主要用于测定塑料、橡胶或薄膜在规定火源下燃烧性能,以判断其耐火等级。不但适用于照明设备、低压电器、家用电器、电机、工具、仪表等设备以及电气连接件等电工电子塑料或橡胶产品及其组件部件的研究、生产和质检部门,也适用于绝缘材料、工程塑料、防火封堵材料型式认可或其它固体可燃材料行业。 UL94水平垂直燃烧试验箱操作方法试验火焰的校准是进行试验*基本的保证,保障试验的可靠性。试验要求50w火焰高度20±1mm,500w 火焰外部黄色火焰高为125mm,内部蓝色火焰高40mm;使用火焰加热铜块,要求温铜块从100 度上升到700 度所需的时间50W 试验火焰为44±2s,500W试验火焰为54±2s。一般使用火焰
[测试测量]
泰克示波器MSO5系列进行基本信号获取和探头补偿的操作方法
各位电子工程师如果是泰克的“铁粉”,想必一定知道泰克示波器MSO5系列,它拥有很多卓越的亮点和特性,远远优于它的同类产品和竞争对手。安泰测试的工程师们近两年可没少提着MSO5系列混合信号示波器奔走于各个客户之间,为他们带来直观的视觉体验。今天,安泰测试就跟大家分享一下泰克MSO5系列示波器 进行基本信号获取和探头补偿的相关操作。 在进行我们实际信号的抓取之前,我们还需要完成最后一步,就是探头的补偿操作。示波器探头的补偿操作是我们在实际操作中非常有可能遗漏掉的关键一步,如果我们用一个未完成探头补偿的示波器探头来进行信号的测试测量的时候,由于探头的欠补偿或者过补偿,会对我们测量的结果造成偏差,这个偏差可能会比我们实际测量的结果偏大
[测试测量]
泰克示波器MSO5系列进行基本信号获取和探头补偿的<font color='red'>操作方法</font>
检漏测试仪简单操作方法
  操作方法:   1、组装:拿出检漏仪主机和测试探头手柄进行连接,接着摁下主机面板上的电源开机。   2、开机:开机之后等待仪器预热和仪器回零。预热过程中将“手持探头”置于没有SF6气体的空气中。120秒后,仪器自动将零漂参数清零,进入测试状态。   3、测试:测试时,用户只需携带仪器,然后将“手持探头”的测试口抵近疑似泄露点即可。如果被测环境有SF6气体时,主机显示值将及时显示实际的SF6气体浓度值,以体积比PPmv为单位。测试值大于10PPmv时,蜂鸣器开始低频声音报警。测试浓度越大,蜂鸣器报警频率约高。  注意事项:   1、测试预热过程中,请将测试探头置于没有SF6气体的空气中;   2、请不要长期堵塞手持探头的测试
[测试测量]
接地电阻测试仪的使用操作方法
  1、使用接地电阻测试仪准备工作   ①熟读接地电阻测量仪的使用说明书,应全面了解仪器的结构、性能及使用方法。   ②备齐测量时所必须的工具及全部仪器附件,并将仪器和接地探针擦拭干净,特别是接地探针,一定要将其表面影响导电能力的污垢及锈渍清理干净。   ③将接地干线与接地体的连接点或接地干线上所有接地支线的连接点断开,使接地体脱离任何连接关系成为独立体。   2、使用接地电阻测试仪测量步骤   (1)、将两个接地探针沿接地体辐射方向分别插入距接地体20m、40m的地下,插入深度为400mm,如下图所示。   接地电阻测试使用图解:a)实际操作 b)等效原理   (2)、将接地电阻测量仪平放于接地体附近,并进行接线,接线方
[测试测量]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved