我对STM32所用位带操作宏的超详细剖析、优势分析及应用推广探索研究(持续更新,欢迎讨论交流)
在原子例程的sys.h中,使用宏定义建立了位带操作的基础,
使得操作IO端口可以像51一样实现位操作。
其实深入了解了位带操作的原理,几乎就可以实现对STM32所有外设寄存器的访问,
极端情况下,什么库函数版本,什么寄存器版本都可以不用,直接精准地操控所有寄存器的每一位的读写!!!
知道了STM32将所有外设寄存器的每一位都建立了位带别名区,
你只要再花一点点时间,彻底搞明白下面的三句宏定义,位带操作就都不在话下了:
#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))
这三句是一环套一环的,
首先第一句:
#define BITBAND(addr, bitnum) ((addr & 0xF000 0000)+0x200 0000+((addr &0xF FFFF)<<5)+(bitnum<<2))
这一句定义了位带存储地址的计算方法,
知道了寄存器的地址,以及我们关心的寄存器的某一比特位,就可以根据此计算方法算出其对应的别名区地址
这个计算公式不仅对外设寄存器对应的别名区计算有用,对用户SRAM对应的别名区一样适用。
addr & 0xF000 0000 只取绝对地址的最高4位,实际
我对STM32所用位带操作宏的超详细剖析、优势分析及应用推广探索研究(持续更新,欢迎讨论交流)相关推荐
- STM32的位带操作
1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义.但STM32没有这样的关键字,于是便要通过访问位带别名区的方式来实现.即:将每一位膨胀成 ...
- STM32 的 “位带”操作Bit-banding--学习笔记
利用2个32MB大小的"虚拟"内存空间实现对2个1MB大小的物理内存空间进行"位"的置位和清除操作. 这样就可以有效地对设备寄存器和位于SRAM中的数据变量进行 ...
- STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作
文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...
- Cortex‐M3和Cortex‐M0是否都能位带操作
最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码 Cortex‐M0的位带操作代码 //IO输出方向设置 #define SDA_IN() ...
- STM32 进阶教程 8 - 位带操作
前言 有过51单片机开发经历的朋友应该都对51的IO口或一些特殊寄存器可以直接按位操作的方式不陌生吧,那么在stm32中有没有类似的操作呢,答案是肯定的,本节将给大家介绍如何在STM32中实现位带操作 ...
- STM32(五)------GPIO位带操作
GPIO位带操作 介绍 位带简介 外设位带区 SRAM位带区 位带区和位带别名区地址转换 GPIO 位带操作 代码解析 GPIO 寄存器映射 GPIO位操作 主函数 介绍 位带简介 位操作就是可以单独 ...
- 【STM32】标准库与HAL库对照学习教程六--位带操作
[STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...
- STM32开发项目:GPIO的位带操作
目录 背景介绍 GPIO位带操作的实现 使用指南 背景介绍 位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见.51 单片机中通过关键字 sbit 来实现位定义,STM32-M3, ...
- STM32:内存单元,一个单元一个字节--------位带操作
学到了位带操作,发现不懂0~0x10 0000 地址内如何保存1MB的数据,分析了一会明白了. 起初我以为STM32内存单元里是每个单元都是32位的,其实都是8位的,也就是一个字节一个单元. 0x00 ...
最新文章
- C语言中 #pragma pack()
- 如何筑起第二座“长城”?长城汽车:唯有科技
- 少儿编程python线上课程-少儿编程课堂|python – 用游戏学编程
- Java文件流输入输出
- 手把手带你复现ICCV 2017经典论文—PyraNet
- React Native开发指南-在原生和React Native间通信
- 马鞍山红星中学2021年高考成绩查询,2021年马鞍山高考状元名单公布,马鞍山高考状元学校资料及最高分...
- Maven自学日志01---安装
- Bootstrap按钮下拉菜单的尺寸
- spark sql select selectExpr简析
- Tableau最新版安装下载
- 2021年全国电子设计竞赛题目
- 《统计学》第八版贾俊平第八章假设检验知识点总结及课后习题答案
- 视频编解码之理论概述
- 人类的行为与程序计算
- 分享一个Joda-Time日期时间工具类
- Effective C++ 读书笔记之Part5.Implementations
- 2020电工(初级)考试题及电工(初级)模拟考试系统
- [win32]c++使用win32开发一个窗口的完整流程【转】
- Unity 小游戏-打砖块