精华内容
下载资源
问答
  • 位带操作

    2020-02-15 16:47:15
    位带操作 找了很久关于位带操作的有关知识,今天算是有点明白什么意思。特此记录,以防忘记。 外设位带区与外设位带别名区的地址转换: AliasAddr = 0x42000000 + (A - 0x40000000)84 + n4 SRAM位带区和SRAM位带别名...

    位带操作
    找了很久关于位带操作的有关知识,今天算是有点明白什么意思。特此记录,以防忘记。

    外设位带区与外设位带别名区的地址转换:
    AliasAddr = 0x42000000 + (A - 0x40000000)×8×4 + n×4
    SRAM位带区和SRAM位带别名区的地址转换:
    AliasAddr = 0x22000000 + (A - 0x20000000)×8×4 + n×4

    A:表示我们要操作的那个位所在的寄存器的地址
    n:位号(表示我们要操作的二进制数字的第几位)
    理解要点:位带区的一个位在位带别名区会被膨胀为四个字节

    展开全文
  • stm32 位带操作

    2021-01-06 08:21:44
    STM32 位带操作什么是位操作51单片机STM32位带别名区BitBand膨胀关系形象举例:位带操作的头文件编写 什么是位操作 51单片机 对于我么熟悉的51单片机,有了==sbit(特殊功能寄存器位)==关键字后,我们可以直接读写...
  • 位带操作原理

    2020-11-28 21:03:07
    位带操作原理 把每个比特膨胀(映射)为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读-改-写)这32个地址就达到访问32个比特的...

    位带操作原理
    把每个比特膨胀(映射)为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读-改-写)这32个地址就达到访问32个比特的目的。

    即如果要改写某个寄存器的某一位,通过改写这一位映射的地址即可
    在这里插入图片描述

    原理图1
    在这里插入图片描述

    原理图2
    在这里插入图片描述

    映射对应关系图
    位带操作的优越性
    在这里插入图片描述

    例子
    sys.h里面对GPIO输入输出部分功能实现了位带操作:

    #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))
    //IO口地址映射
    #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
    #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
    #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
    #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
    #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
    #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
    #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
    //IO口操作,只对单一的IO口!
    //确保n的值小于16!
    #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
    #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入

    #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
    #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入

    #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出
    #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //输入

    #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出
    #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //输入
    输出:(操作ODR寄存器)
    BIT_ADDR可以理解为是一个映射关系,用过写PAout(n)=1,即往它映射的地址写1

    输入:(操作IDR寄存器)
    同上

    跑马灯实例
    int main(void)
    {
    delay_init(); //延时函数初始化
    LED_Init(); //初始化与LED连接的硬件接口
    while(1)
    {
    PAout(8)=1; //LED0输出低
    PDout(2)=0;//LED1输出高
    delay_ms(500);
    PAout(8)=0;//LED0输出高
    PDout(2)=1;//LED1输出低
    delay_ms(500);
    }
    }

    作者:GODD6
    链接:https://www.jianshu.com/p/030b8d427d18
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • stm32位带操作

    2018-06-17 16:19:37
    stm32位带操作,各种库各种有!!!!!!!!!!!!!!!!!!!!
  • STM32F4xx位带操作

    2020-07-25 17:28:15
    本文给大家分享了STM32F4xx位带操作
  • STM32F407 位带操作 位操作 驱动12864 位操作像51一样操作F407的IO口。
  • STM32位带操作

    2020-01-21 17:52:32
    1. 位带操作是可以对寄存器内的一个位映射到位带别名区进行单独操作----寄存器正常是一次进行32位的操作 2. STM32是通过位带别名区实现位操作,即将寄存器中的一个位映射到另一个32位的地址上,操作这个地址就能操作...

    1.  位带操作是可以对寄存器内的一个位映射到位带别名区进行单独操作----寄存器正常是一次进行32位的操作

    2.  STM32是通过位带别名区实现位操作,即将寄存器中的一个位映射到另一个32位的地址上,操作这个地址就能操作寄存器的一个位

    3.  外设位带区地址为:0X40000000~0X40100000,位带别名区的地址为:0X42000000~0X43FFFFFF

    4.  SRAM位带区地址:0X2000 0000~X2010 0000,位带别名区地址:0X2200 0000~0X23FF FFFF

    5.  寄存器的位对应位带别名区地址计算公式: ((addr & 0xF0000000)+0x02000000+((addr &0x00FFFFFF)<<5)+(n<<2))

        addr是寄存器的地址,n是寄存器内对应的第几位

    展开全文
  • STM32F4(位带操作

    2020-12-24 16:57:17
    STM32F4 的 位带操作 主体是库函数的 只是一个小demo 还有一部分笔记
  • 初识“位带操作

    2020-07-29 16:48:27
    初识“位带操作” 什么是“位带操作”? STM32的“位带操作”为何会出现? STM32“位带操作”相较于C51的“位寻址操作”的优越性? 如何通过“位带操作”实现对某一个IO口的操作? 初识“位带操作” 什么是...

    目录

     

    初识“位带操作”

    什么是“位带操作”?

    STM32的“位带操作”为何会出现?

    STM32“位带操作”相较于C51的“位寻址操作”的优越性?

    如何通过“位带操作”实现对某一个IO口的操作?


    初识“位带操作”

    什么是“位带操作”?

    CPU不能直接对位带区中的单个数据位位寻址,只能通过对位带别名区的访问(或读/写)实现对位带区单个数据位的访问(或读/写),这种操作被称为位带操作。

    STM32的“位带操作”为何会出现?

    51单片机相信各位都用过,假设P1.1的IO口上挂了一个LED,那么你单独对LED的操作就是P1.1 = 0或P1.1 = 1,注意,是你可以单独的对P1端的第一个IO口进行操作,然而STM32是不允许这样做的,那么为了像51单片机一样能够单独的对某个端的某一个IO单独操作,就引入了位带操作这样的概念,简而言之,言而总之,就是为了去单独操作32里面PA端的第1个IO口,所以才有了位带这样的操作机制。

    STM32“位带操作”相较于C51的“位寻址操作”的优越性?

    ① 更高效

     

    注:“位置bit2”改为“修改bit2的值”。

     

    ② 读取更简单

     

    如何通过“位带操作”实现对某一个IO口的操作?

     

    展开全文
  • stm32位带操作详细说明 PDF文档
  • 最近用到STM32F303,在修改IO的时候,觉得用库操作太麻烦了,要自己一个一个修改,用宏定义也...查M4的手册知道M4也是支持位带操作,F3系列也是属于M4内核,而且在405也是用位带操作,觉得F303也是一样可以做位带操作
  • STM32中位带操作

    2021-01-29 15:06:46
    stm32中的位带操作 1.基础概念回顾 1…什么是位操作? 位操作就是可以单独对一个比特位读和写 2.什么是位带操作? 支持了位带操作后,可以使用普通的加载/存储指令来对单一的比特讲行读写。在CN3中,有两个区中实现...
  • 位带操作 学习笔记

    2019-05-08 16:52:48
    位带操作:位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见。 51 单片机中通过关键字 sbit 来实现位定义,STM32 没有这样的关键字,而是通过访问位带别名区来实现。 在 STM32 中,有两个地方...
  • STM32的位带操作

    2021-03-08 09:58:08
    1. 什么是位带操作? 学习 51 单片机的时候就使用过位操作,通过关键字 sbit 对单片机IO口进行位定义。但STM32没有这样的关键字,于是便要通过访问位带别名区来实现。即: 将每一位膨胀成一个32位字,因此SRAM的1MB...
  • STM32位带操作基础

    2020-04-12 22:02:06
    #位带操作的引入 提起位操作大家应该都不会陌生,此前在51单片机中相信大家都接触过sbit这样的操作,其最大的特点就是简洁方便啦~不过在32单片机中没有sbit这样的操作。因此,要实现位操作就要用到“位带操作”喽! ...
  • 东芝MCU实现位带操作

    2019-09-28 04:12:36
    位带操作简介 位带操作的概念其实30年前就有了,那还是 8051单片机开创的先河,如今ARM CM3 将此能力进化,可以说,这里的位带操作是8051 位寻址区的威力大幅加强版。即如果要改写某个寄存器的某一位,通过改写这一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,938
精华内容 2,375
关键字:

位带操作