在原子例程的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所用位带操作宏的超详细剖析、优势分析及应用推广探索研究(持续更新,欢迎讨论交流)相关推荐

  1. STM32的位带操作

    1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义.但STM32没有这样的关键字,于是便要通过访问位带别名区的方式来实现.即:将每一位膨胀成 ...

  2. STM32 的 “位带”操作Bit-banding--学习笔记

    利用2个32MB大小的"虚拟"内存空间实现对2个1MB大小的物理内存空间进行"位"的置位和清除操作. 这样就可以有效地对设备寄存器和位于SRAM中的数据变量进行 ...

  3. STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作

    文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...

  4. Cortex‐M3和Cortex‐M0是否都能位带操作

    最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码 Cortex‐M0的位带操作代码 //IO输出方向设置 #define SDA_IN() ...

  5. STM32 进阶教程 8 - 位带操作

    前言 有过51单片机开发经历的朋友应该都对51的IO口或一些特殊寄存器可以直接按位操作的方式不陌生吧,那么在stm32中有没有类似的操作呢,答案是肯定的,本节将给大家介绍如何在STM32中实现位带操作 ...

  6. STM32(五)------GPIO位带操作

    GPIO位带操作 介绍 位带简介 外设位带区 SRAM位带区 位带区和位带别名区地址转换 GPIO 位带操作 代码解析 GPIO 寄存器映射 GPIO位操作 主函数 介绍 位带简介 位操作就是可以单独 ...

  7. 【STM32】标准库与HAL库对照学习教程六--位带操作

    [STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...

  8. STM32开发项目:GPIO的位带操作

    目录 背景介绍 GPIO位带操作的实现 使用指南 背景介绍 位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见.51 单片机中通过关键字 sbit 来实现位定义,STM32-M3, ...

  9. STM32:内存单元,一个单元一个字节--------位带操作

    学到了位带操作,发现不懂0~0x10 0000 地址内如何保存1MB的数据,分析了一会明白了. 起初我以为STM32内存单元里是每个单元都是32位的,其实都是8位的,也就是一个字节一个单元. 0x00 ...

最新文章

  1. C语言中 #pragma pack()
  2. 如何筑起第二座“长城”?长城汽车:唯有科技
  3. 少儿编程python线上课程-少儿编程课堂|python – 用游戏学编程
  4. Java文件流输入输出
  5. 手把手带你复现ICCV 2017经典论文—PyraNet
  6. React Native开发指南-在原生和React Native间通信
  7. 马鞍山红星中学2021年高考成绩查询,2021年马鞍山高考状元名单公布,马鞍山高考状元学校资料及最高分...
  8. Maven自学日志01---安装
  9. Bootstrap按钮下拉菜单的尺寸
  10. spark sql select selectExpr简析
  11. Tableau最新版安装下载
  12. 2021年全国电子设计竞赛题目
  13. 《统计学》第八版贾俊平第八章假设检验知识点总结及课后习题答案
  14. 视频编解码之理论概述
  15. 人类的行为与程序计算
  16. 分享一个Joda-Time日期时间工具类
  17. Effective C++ 读书笔记之Part5.Implementations
  18. 2020电工(初级)考试题及电工(初级)模拟考试系统
  19. [win32]c++使用win32开发一个窗口的完整流程【转】
  20. Unity 小游戏-打砖块

热门文章

  1. lucene中Field简析
  2. git推送代码到(码云)(github)
  3. 带你揭秘Alltesting众测平台的真实面孔(二)
  4. 华中科技大学 校外就医 报销流程
  5. 十年云化之路 中国移动快速向下一代IT架构转型
  6. fetch.php迅雷,记一次关于sklearn.datasets.fetch_20newsgroups的下载速度极慢的解决
  7. (5)微信UI自动化-实现静默鼠标点击(C#)
  8. odata $expand的关联查询使用方法
  9. 4位数码管protues模拟
  10. 团队常用的4款流程图工具,绝对避坑