- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32库开发实战指南-M4:13- GPIO—位带操作
零死角玩转STM32—F429
第 章 —位带操作
13 GPIO
本章参考资料: 《STM32F4xx 中文参考手册》存储器和总线构架章节、GPIO章节,
《Cortex®-M4 内核编程手册》2.2.5Bit-banding。学习本章时,配套这些参考资料学习效果
会更佳。
13.1 位带简介
位操作就是可以单独的对一个比特位读和写,这个在51单片机中非常常见。51单片
机中通过关键字sbit来实现位定义,F429 中没有这样的关键字,而是通过访问位带别名区
来实现。
在F429 中,有两个地方实现了位带,一个是SRAM 区的最低 1MB 空间,另一个是外
设区最低 1MB 空间。这两个 1MB 的空间除了可以像正常的RAM一样操作外,他们还有
自己的位带别名区,位带别名区把这 1MB 的空间的每一个位膨胀成一个32位的字,当访
问位带别名区的这些字时,就可以达到访问位带区某个比特位的目的。
图13-1F429 位带地址
13.1.1 外设位带区
外设位带区的地址为:00X400F0000,大小为1MB,这 1MB 的大小包含
了APB1/2和AHB1上所以外设的寄存器,AHB2/3总线上的寄存器没有包括。AHB2总线
上的外设地址范围为:00X50060BFF,AHB3总线上的外设地址范围为:
第110 页共996
零死角玩转STM32—F429
0XA0000000~0XA0000FFF。外设位带区经过膨胀后的位带别名区地址为:
00X43FFFFFF,这部分地址空间为保留地址,没有跟任何的外设地址重合。
13.1.2 SRAM位带区
SRAM 的位带区的地址为:0X200F 0000,大小为1MB,经过膨胀后的位
带别名区地址为:00X23FF FFFF,大小为32MB。操作SRAM 的比特位这个
用得很少。
13.1.3 位带区和位带别名区地址转换
位带区的一个比特位经过膨胀之后,虽然变大到4个字节,但是还是LSB才有效。有
人会问这不是浪费空间吗,要知道F429 的系统总线是32位的,按照4个字节访问的时候
是最快的,所以膨胀成4个字节来访问是最高效的。
我们可以通过指针的形式访问位带别名区地址从而达到操作位带区比特位的效果。那
这两个地址直接如何转换,我们简单介绍一下。
1. 外设位带别名区地址
对于片上外设位带区的某个比特,记它所在字节的地址为A,位序号为n(0 n 7),则
该比特在别名区的地址为:
1 AliasAddr 0 (A-0*8*4 +n*4
0外设位带别名区的起始地址,0外设位带区的起始地址,
(A-0表示该比特前面有多少个字节,一个字节有8位,所以*8,一个位膨胀
后是4个字节,所以*4,n表示该比特在A地址的序号,因为一个位经过膨胀后是四个字
节,所以也*4。
2. SRAM位带别名区地址
对于SRAM位带区的某个比特,记它所在字节的地址为A,位序号为n(0 n 7),则
该比特在别名区的地址为:
1 AliasAddr 0 (A-0*8*4 +n*4
公式分析同上。
3. 统一公式
为了方便操作,我们可以把这两个公式合并成一个公式,把 “位带地址+位序号”转
换成别名区地址统一成一个宏。
1 // 把“位带地址+位序号”转换成别名地址的宏
第111页共996
零死角玩转STM32—F429
2 #define BITBAND (addr, bitnum) ((
文档评论(0)