0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32开发中的位带操作机制

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2021-04-09 14:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

为了像51单片机一样能够对某个管脚单独操作,引入了位带操作这样的操作机制。

如下图,位带(Bit band)区就是就是你想单独操作的IO的区域,比如PA1、PA2。而位带别名区就是你给每一位重新起了个名字的那一片地址区域。可以看下表,M3内核存储器映射表,你能看到1M内存的BitBand区,还有与之对应的32M内存的BitBand别名区,因为你将每一位膨胀成为了一个32位的地址,所以相应的别名区的内存也会是位带区的32倍。

32c3e2ce-9869-11eb-8b86-12bb97331649.png

想进行位带操作,应该先去找该位对应的别名区的地址,找到了这个地址,对这个地址进行操作,那么实际上也就是对该位进行操作了。

官方给出了如下相应的计算公式:

AliasAddr=0x42000000+((A‐0x40000000)*8+n)*4=0x42000000+ (A‐0x40000000)*32 + n*4

其中,AliasAddr是别名区的地址,A是GPIOA-》ODR的地址,n是该端口的上的某一位。

0x42000000是位带别名区域的起始地址,A是输出数据寄存器GPIOA-》ODR的地址,A的地址先减去位带区基地址,得到的是相对于位带区基地址的偏移地址,那么膨胀之后还是一个偏移地址,是相对于位带别名区基地址的偏移量,加上位带别名区域基地址,就得到了其对应的别名区地址。

多数情况下,大家见到的代码,应该是以下这个样子,一共分为三步:

#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))

第一步,就是我们上面分析的,得到位带别名区域的32位地址。

第二步,就是将第一步得到的32位地址,给转换成一个指针变量,并且操作这个地址里的值,唯一的区别,就是由于安全的考虑,多加了一个volatile 这样的关键字。

举个例子

如下,想直接访问0x00000001这个地址,并且给这个地址写1,该怎么做呢?

# define ADDR 0x00000001*(int *)ADDR = 1;

第三步,就是将前两部,结合在一起,根据传入的addr和bit计算得到32位的地址,然后强制类型转换,使得我们可以去操作这个地址里的值。

提示:bitnum《《2相当于bitnum2乘以4,实际上在计算机底层乘法也是基于位运算实现的。

原文标题:STM32开发中的位运算以及位带操作

文章出处:【微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45334

    浏览量

    663295
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371048

原文标题:STM32开发中的位运算以及位带操作

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    arm单片机位带操作的原理

    单片机单片机的带操作(Bit-Banding)是一种特殊的内存映射技术,允许开发者以原子操作的方式对特定的内存进行读写,从而提高了对GP
    发表于 11-25 08:24

    操作的常见错误与应对策略

    的,可能会导致数据溢出或丢失。 (三)数据类型表示的理解要点 在嵌入式系统,不同的数据类型有着不同的表示方式,这一点在进行操作
    发表于 11-24 07:50

    使用操作精准配置单片机寄存器

    项目对效率要求高,推荐使用掩码操作;如果需要可读性和维护性,推荐结构体映射寄存器;如果使用Cortex-M架构,带操作是个不错的选择。 1、使用
    发表于 11-24 07:22

    映射的操作

    Bit-banding 简称带、段 支持带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写 对于硬件 I/O 密集型的底层程序最有用处 优点 使代码更简洁 在多任务
    发表于 11-18 07:03

    带操作的分析

    个字节,“*8”表示一个字节中有8个比特。 四、读写操作机制 在位带区,虽然每个比特都映射到别名区的一个字,但别名区的字只有LSB(最低位有效)有效,所以读写
    发表于 11-18 07:01

    GPIO输出操作的几种方法分享

    权威指南》第五章,第5小节 带操作(87页~92页)。   为简化带操作,可以定义一些宏。比如,我们可以建立一个把“带地址+
    发表于 11-13 07:50

    教程来啦!LuatOS的消息通信机制详解及其应用场景

    在资源受限的嵌入式环境,LuatOS采用消息机制实现模块间解耦与高效通信。通过预定义消息名称(如“new_msg”),开发者可轻松构建响应式程序结构。接下来我们将深入剖析其实现原理与典型使用方法
    的头像 发表于 09-26 18:59 221次阅读
    教程来啦!LuatOS<b class='flag-5'>中</b>的消息通信<b class='flag-5'>机制</b>详解及其应用场景

    STM32C011开发(3)----Flash操作

    STM32C011 系列微控制器内置 Flash 存储器,支持程序存储与数据保存,具备页面擦除、双字写入、读写保护等功能。本文将简要介绍 STM32C011 的 Flash 结构与特性,并通过实际代码示例,讲解 Flash 的擦除、写入与读取等基本
    的头像 发表于 09-18 16:48 3591次阅读
    <b class='flag-5'>STM32</b>C011<b class='flag-5'>开发</b>(3)----Flash<b class='flag-5'>操作</b>

    意法半导体:STM32CubeMX将不再集成到STM32CubeIDE

    ,这两个工具实现互操作的方式将与IAR EWARM、Keil MDK-ARM和STM32Cube for VS Code相同。 这两种工具当前的集成方式看似会在项目早期的原型开发阶段带来令人瞩目的效果。但
    的头像 发表于 09-01 17:18 2615次阅读

    STM32开发入门进阶必备!《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》新书发布!

    上市。高校教学推荐,STM32入门必读!图书介绍《STM32嵌入式系统开发——基于STM32CubeMX和HAL库》是一本介绍嵌入式系统
    的头像 发表于 04-03 14:54 1363次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>开发</b>入门进阶必备!《<b class='flag-5'>STM32</b>嵌入式系统<b class='flag-5'>开发</b>—基于<b class='flag-5'>STM32</b>CubeMX和HAL库》新书发布!

    STM32微控制器实现数据加密的方法

    Cryptolib,支持多种加密算法,如AES、DES、SHA等。这些库函数对加密操作进行了优化,使得开发者可以轻松地在STM32平台上实现数据加密和通讯安全功能。 · 例如,可以使用STM3
    发表于 03-07 07:30

    STM32开发板教程之STM32开发指南免费下载

    介绍了几个常用的系统文件(程序);3,实战篇,主要通过 56 个实例(绝大部分是直接操作寄存器完成的)带领大家一步步深入 STM32 的学习。   本指南为 ALIENTEK 战舰 STM32
    发表于 02-28 09:08 179次下载

    工程师开发利器:STM32CubeMX 与 eDesignSuite 的协同开发

    eDesignSuite 进行电源或电机控制设计。对寄存器操作感兴趣的开发者,建议从 LL 库入手以深入理解底层机制。资源获取STM32CubeMX 可在 ST 官网 下载。eDes
    的头像 发表于 02-26 14:07 1110次阅读
    工程师<b class='flag-5'>开发</b>利器:<b class='flag-5'>STM32</b>CubeMX 与 eDesignSuite 的协同<b class='flag-5'>开发</b>

    LwIP应用开发实战指南—基于野火STM32

    LwIP应用开发实战指南—基于野火STM32—20210122
    发表于 01-17 14:34 9次下载

    STM32、Arduino、树莓派开发方式差异大吗

    最近看到有网友问:STM32、Arduino、树莓派开发方式差异大吗?   要说相同点,它们之间也有很多相同点。但你要说他们之间开发的差异,其实也蛮大的。   STM32、Arduin
    的头像 发表于 01-02 11:33 1924次阅读