首页 >> 知识 >> STM32F407学习笔记GPIO(二)

STM32F407学习笔记GPIO(二)

位带操作 Bit-Banding简称位带。支持位带操作后,可以使用普通的加载存储指令来对单一的bit进行读写操作。 在STM32中不能直接操作寄存器的某一个Bit位。例如单独控制PA端口输出数据寄存器中的ODR的位15:0只能以字(16位)的形式进行操作。 为了能直接操作ODR这类的Bit位,在Cortex内核中开辟了一块地址区域:位带别名 ,可以将ODR这类Bit位(位带区)映射到(位带别名区),只需要操作映射后的位带别名区的地址就可以实现操作ODR的Bit位了。

位带区:支持位带操作的地址区域位带别名:对别名地址的访问会最终作用到位带区上位带区->位带别名区计算公式: 位带操作的主要目的:通过Bit位地址(A)计算得到位带别名区地址(AliasAddr)。 SRAM计算方式: AliasAddr = 0 x 22000000 + ( ( A‐ 0 x 20000000 ) × 8 + n ) × 4 = 0 x 42000000 + ( A − 0 x 20000000 ) × 32 + n × 4 ext{AliasAddr}= 0 ext{x}22000000 + (( ext{A}‐0 ext{x}20000000) imes8+n) imes4=0 ext{x}42000000+( ext{A}- 0 ext{x}20000000) imes32 + n imes4 AliasAddr=0x22000000+((A‐0x20000000)×8+n)×4=0x42000000+(A−0x20000000)×32+n×4外设: AliasAddr = 0 x 42000000 + ( ( A‐ 0 x 40000000 ) × 8 + n ) × 4 = 0 x 42000000 + ( A − 0 x 40000000 ) × 32 + n × 4 ext{AliasAddr}= 0 ext{x}42000000 + (( ext{A}‐0 ext{x}40000000) imes8+n) imes4= 0 ext{x}42000000+( ext{A}- 0 ext{x}40000000) imes32 + n imes4 AliasAddr=0x42000000+((A‐0x40000000)×8+n)×4=0x42000000+(A−0x40000000)×32+n×4

由此可以对IO进行

读取:PXin(n) ⇒ Rightarrow ⇒读取端口X的第n位输入,返回端口输入的值写入:PXout(n)=M ⇒ Rightarrow ⇒对端口X的第n位进行写入值M //计算映射地址#define BITBAND(addr,bitnum) ((addr&0xF00000000)+0x20000000+((addr&0xFFFFF)
网站地图