KST-STM32学习之位带操作

发布者:SparkleMagic最新更新时间:2018-12-14 来源: eefocus关键字:KST-STM32  位带操作 手机看文章 扫描二维码
随时随地手机看文章

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、 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)这样的繁琐代码了!


岂不美哉!!!


位带操作写程序还需要注意的地方


这里写图片描述


后面的分号切记不要忘记了!!!

关键字:KST-STM32  位带操作 引用地址:KST-STM32学习之位带操作

上一篇:KST-STM32学习之PWM实现的各种途径(软件硬件+通用高级定时器)
下一篇:KST-STM32 学习之GPIO_Speed

推荐阅读最新更新时间:2024-03-16 16:20

KST-STM32学习之数码管扫描中的一个寄存器操作疑问
猝不及防的寄存器操作 读到这里,竟然卡住了,吓得我赶紧回去查查书,在第一章的19页。当然它还是摘自《STM32中文参考手册》的P115页。 再结合一下当初的51,也就不难理解此处的含义,就是清0当前低8位的值,也就是数码管对应的段选,然后接下来要进行读取缓冲区的值,写入到该寄存器中,最下面的if else,当然就是进行位选了,较51只是段选,位选的顺序反了而已。 当然,查阅资料的过程中,还发现一个有意思的函数,《STM32固件库使用手册》 阅读函数实现后发现其实本质也是ODR寄存器的操作,不信看图。。。
[单片机]
<font color='red'>KST-STM32</font>学习之数码管扫描中的一个寄存器<font color='red'>操作</font>疑问
KST-STM32学习之PWM实现的各种途径(软件硬件+通用高级定时器)
一、STM32的通用定时器介绍 STM32F103ZE 拥有 TIM2、TIM3、TIM4 和 TIM5 共 4 个通用定时器。 STM32F103C8拥有TIM2/TIM3/TIM4这三个通用定时器 通用定时器除了具备基本定时器的向上计数器功能外,还可以向下、向上/向下计数。 此外还具备独立通道,能够实现输入捕获、输出比较、PWM 输出、单脉冲输出的功能。 二、输出比较产生PWM 1、产生PWM的几种方式 ①、硬件实现。比如STM32 自带的 PWM 输出功能。 注意了,硬件实现的时候,外部接线需要接到通用定时器的外部通道上! ②、通用定时器的输出比较实现软件的PWM,这个软件产生的PWM要比
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved