找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1932|回复: 0
打印 上一主题 下一主题
收起左侧

STM32位带操作的实现解读 附源程序

[复制链接]
跳转到指定楼层
楼主

位带的概述

2.1.1 什么是位带操作?

              先认识两个概念:位带区、位带别名区。

位带区:支持位带操作的地址区。

              位带别名区:位带区映射的地址区

由图可知,位带区的每一位,在位带别名区中都有32位对应。(假装理解:在位带区中它是1位,在位带别名区中它膨胀了,为32位)


位带操作:

简单理解,能对单片机的某一位进行单独操作。

复杂理解,对位带别名区的操作,最终会映射到位带区中。理解:你对位带别名的某32位地址写入1,相当于在这个32位地址对应的位带区中的某一位写1。

2.1.2位带操作的细节?

              在位带区中,每个位(比特)都映射到别名地址区的一个(32位)字——这字只有 LSB (最低位)有效。

              理解:在位带别名区中某个32位地址中写入0x1,0x3,0x7,0xf是一样的效果,都映射到位带区中的某一位写入1。

支持位带操作的两个内存区的范围是:

0x2000_0000-0x200F_FFFF( SRAM 区中的最低 1MB)

0x4000_0000-0x400F_FFFF(片上外设区中的最低 1MB)

2.1.3 位带操作的好处

《1》书写方便、使代码简洁

              以前对某一位进行操作时(写操作)

                            读----读取整个寄存器

                            改----屏蔽不需要的位,修改需要的位

                            写----把修改好的值,写回寄存器

              现在对某一位进行操作时(写操作)

                            写----确定需要修改的位,写入对应位带别名区

《2》安全

              以前读、改、写,是三个步骤,在多中断系统中,存在数据写入丢失的风险。

              位带操作、一步到位、直接写,不会存在数据写入丢失风险。底层是执行一个原子操作的读、改、写过程,不允许被中断。

2.1.4 位带操作的实现

映射公式:

              理解公式从这个角度理解:位带操作的位带区与位带别名区的关系是:一个比特位(1位)与一个字(32位=4个字节)之间的映射

1比特位与4个字节的对应

2.2 位带软件实现

2.2.1 片上外设位带实现

以PA端口为例:

第一步:找出PA端口数据寄存器对应的地址。

复盘:

              0x4000 0000

              0x0002 0000

              0x0000 0000

              0x0000 0014

相加结果:

              0x4002 0014

第二步:根据公式,求出位带区别名区中地址

2.3补充

位带操作开始难以理解其实现原理,但渐渐喜欢位带操作,渐渐了解一点一点。

《1》位带操作,实现51类似的IO控制功能

《2》位带区中的每一比特位,都映射到别名区的一个字(4个字节)(绑定关系)

《3》对别名地址的访问最终作用到位带区的访问上


以上文档51hei下载地址:

位带操作.docx (1.91 MB, 下载次数: 22)

头文件: M4位带操作文件.zip (910 Bytes, 下载次数: 16)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表