IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 位带操作(stm32)宏定义寄存器的作用 -> 正文阅读

[嵌入式]位带操作(stm32)宏定义寄存器的作用

1.stm32内核两处使用了位带操作:

其中一处是SRAM的最低1M范围,第二个则就是片内外设区

当然它们还有自己的“位带别名区”,位带别名区将每个比特膨胀成一个32位的字,当访问位带别名区的这些字时,就可以达到访问位带区某个比特位的目的。

其中位带操作从30年前51单片机开始就出现了

2.比较位带操作和普通操作

举例子:如果想要设置地址0x2000 0000 中的比特2

a.不使用位带写操作:

b.使用位带写操作

?

总结:从执行步数来看不使用位带明显多一步,位带操作稍微简单一点

3.位带操作比普通操作的优点:


????????a.代码更加简介

????????b.实现多任务中共享资源的“互锁”访问

相关的术语:

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

位带别名: 对别名地址的访问最终会变换成对位带区的访问(注意:这中途有一个地址

映射过程)

?

访问的时候,当一个别名地址被访问的时候,会先把该地址变换成位带地址

?

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

0x2000_0000-0x200F_FFFFSRAM 区中的最低 1MB

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

例子:

?

4.实际操作之间的对比:

不幸的是,在 C 编译器中并没有直接支持位带操作。比如, C 编译器并不知道同一块内存能够

使用不同的地址来访问,也不知道对位带别名区的访问只对 LSB 有效。欲在 C 中使用位带操作,最

简单的做法就是#define 一个位带别名区的地址。例如:

volatile?的作用:变量可能会被意想不到地改变

#define?DEVICE_REG0?????????????????????((volatile?unsigned?long?*)?(0x40000000))

#define?DEVICE_REG0_BIT0????????????????((volatile?unsigned?long?*)?(0x42000000))

#define?DEVICE_REG0_BIT1????????????????((volatile?unsigned?long?*)?(0x42000004))

*DEVICE_REG0?=?0xAB;????????????????????//使用正常地址访问寄存器

*DEVICE_REG0?=?*DEVICE_REG0?|?0x2;??????//使用传统方法设置?bit1

*DEVICE_REG0_BIT1?=?0x1;????????????????//?通过位带别名地址设置?bit1

?

//简化位带操作? 通过宏定义

#define?BITBAND(addr,?bitnum)?((addr?&?0xF0000000)+0x2000000+((addr?&0xFFFFF)<<5)+(bitnum<<2))?

#define?MEM_ADDR(addr)??*((volatile?unsigned?long??*)(addr))?

#define?BIT_ADDR(addr,?bitnum)???MEM_ADDR(BITBAND(addr,?bitnum))

MEM_ADDR(DEVICE_REG0)?=?0xAB;

MEM_ADDR(DEVICE_REG0)=?MEM_ADDR(DEVICE_REG0)?|?0x2;?//传统做法

BIT_ADDR(DEVICE_REG0,?1)?=?0x1;

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:19:00  更:2021-09-06 11:19:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:30:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码