| |
|
开发:
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.位带操作比普通操作的优点:
相关的术语:
? 访问的时候,当一个别名地址被访问的时候,会先把该地址变换成位带地址 ? 支持位带操作的两个内存区的范围是: 0x2000_0000-0x200F_FFFF(SRAM 区中的最低 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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |