历史上的今天

今天是:2024年09月16日(星期一)

2021年09月16日 | KST-STM32学习之位带操作

发布者:SereneHarmony 来源: eefocus关键字:KST-STM32  位带操作 手机看文章 扫描二维码
随时随地手机看文章

在这里插入图片描述

位带别名区地址 = 位带别名区基址 + 位带区字节偏移 × 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)这样的繁琐代码了!


岂不美哉!!!


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

这里写图片描述

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

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

上一篇:【STM32模块化程序】PWM产生
下一篇:KST-STM32 学习之GPIO_Speed

推荐阅读

据外媒报道,加拿大滑铁卢大学Linda Nazar教授宣布,其研究团队首次实现四电子转换(four-electron conversion),该技术将实现锂-氧电池(lithium-oxygen,Li-O2)的电子存储容量翻番。Nazar团队将有机电解质(organic electrolyte)转化为硝酸锂/硝酸钾(lithium nitrate/potassium nitrate)的无机熔盐(inorganic molten salt),旨在提升其化...
人工智能,前景很好,但“钱”景不好。远了不说,就说最近谋求上市的旷视以及融资机器商汤科技,甚至包括最近被晚辈不断超越的百度。商汤、旷视、依图、云从被坊间并称为“CV四小龙”,但特别活跃在媒体和投资者视线里的是商汤和旷视,2018年初,两家创业公司一度在融资上展开了“军备竞赛”。先看旷视,天使轮融资数百万元,A轮融资数百万美元,B轮融资47...
如今很少有汽车制造商在设计汽车时将连通性作为一种选择。即使目前还不是普遍可用的,它也是必不可少的。 Strategy Analytics采访了一些汽车业高管,探讨了这个问题。研究结果表明,公有云在汽车行业的合作机会越来越多。 今年,全球生产的汽车中,首次有超过一半配备内置蜂窝无线连接。考虑到车辆苛刻的操作环境和全球无线连接的不稳定因素,蜂窝无线的...
苹果2021年秋季新品发布会,令人失望。各种抱怨在朋友圈刷屏:“熬了半夜,令人失望”、“天天一套模具,换个颜色、加点防抖、升级一下参数”、“连苹果都打性价比的牌了”、“乔布斯之后,苹果再无惊喜”……当然也有赞誉,是关于线上发布会,办得非常像风光大片,令人怀念加州的阳光,还有新出的A15芯片以及苹果iPhone 13有了一些新功能,诸如 “影像...

史海拾趣

问答坊 | AI 解惑

用verilog写的SPWM程序无法用示波器观察

请教各位大虾,写了一个spwm的程序,出来是20Khz,但是接到示波器上无法得到想要的波形是怎么回事?是不是变换的速度太快了无法用示波器观察?…

查看全部问答∨

Windows Embedded工控 油田开采效率高

  能源是一种极重要的资源。大家都知道,没有能源,汽车不能开,飞机不能飞,工业无法持续发展,经济提高也没有保证。   所以,开发油田的意义很大,现在咱国家原油产量在1.6亿吨左右。按现有资源的可获量以及目前开采利用情况和技术经济条件 ...…

查看全部问答∨

刚参加完SPARTAN -6的现场活动

1、SPARTAN-6这块板子确实不错,32位软核MicroBlaze添加了MMU还有JTAG模式,可以在线调试。 2、新增的PCI高速接口对于高速数据开发很有帮助,参考示例中视频开发部分以及网络部分都是很有用的 3、调试需要的JTAG和UART接口它都做成USB转接口了, ...…

查看全部问答∨

不懂HELP!!!郁闷死!!!

今天问一个牛人(应该是斑竹)一个问题,他直接告诉我去看HELP,果然是牛人,直接去看HELP. 算了自己慢慢学吧 :@   话说回来谁让咱是菜鸟呢,早知道用JLINK开发了,搞的连软件用起来都困难。 LPCXPRESSO太郁闷了!!! [ 本帖最后由 lil ...…

查看全部问答∨

Windows Emabedded CE6.0下怎样在应用程序中加载驱动?

我做了一个看门狗驱动,想要在应用程序中动态加载驱动,使用ActivateDeviceEx()加载驱动,程序代码段: DrvDll = ActivateDeviceEx(_T("HKEY_LOCAL_MACHINE\\\\Drivers\\\\BuiltIn\\\\WDT"),RegIniData,1,NULL); hWDT = CreateFile(_T("W ...…

查看全部问答∨

你会优先选择TI还是ADI的DSP

大家来说说在自己的应用中会选用ADI的还是TI的DSP。   两家各有什么优势啊?  …

查看全部问答∨

很强大65535KBSRAM的STM32F103RBT6

现在网络差,上不了图,只能贴下载的反馈信息一片是20K,一片是65535K在串口COM8连接成功@115200bps,耗时261毫秒芯片内BootLoader版本号:2.1芯片PID:00000410芯片FLASH容量为128KB芯片SRAM容量为20KB96位的芯片唯一序列号:37006A065832373 ...…

查看全部问答∨

布局布线后仿真结果错误

行为仿真时正确,而布局布线后仿真结果错误。 大家来总结一下,这可能是什么原因导致的 :)  …

查看全部问答∨

寻求DSP仿真器 HDS560pod 驱动

一个很好的朋友向我求助DSP仿真器 HDS560pod,有哪位好心的朋友有的话,帮助我这个朋友一下好吗?谢谢!…

查看全部问答∨

发现eeworld重大漏洞,可能造成数据泄露请管理速速pm我

发现eeworld重大漏洞,可能造成数据泄露请管理速速pm我 我给你们eeworld这个帐号留言了 不知道发送成功没,请管理看到迅速pm我。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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