STM32的位带操作

GPIO位带操作:(需要看到M3内核)

例子:使用通过GPIOF的基地址加上偏移地址
在stm32f4手册2.3章节,可以知道片上外设的地址GPIOF 0x40021400。并且在GPIO章节7可以知道输出寄存器偏移0x14,0x40021414 如下图
在这里插入图片描述
在这里插入图片描述
上面得到了GPIOF输出寄存器地址0x40021414
接下来通过《M3权威指南手册》计算寄存器的位映射地址:可以通过如下图看出,寄存器的位可以映射出新地址,并且新地址的元素的32位字只有LSB(最低位有效)

下图的第一:位带区地址就是相当于寄存器地址,正如GPIOF输出寄存器地址0x40021414就是位带区的一个。位带区在F4有32个BIT位
下图的第二:每个BIT位又对应映射到有偏移0x200 0000的区域中(固定偏移量),每个位的地址又称为位带别名地址,占用4个字节也就是占用。这四个字节就是BIT位的的控制数,最低位有效。

下图第3:可以看出SRAM的地址0x2000 0000 -0x3fff ffff 而片上外设是0x4000 0000-0x4fff ffff
。从而知道GPIOF输出寄存器地址0x40021414的偏移地址=片上外设基地址0x4000 0000+片上外设GPIOF的输出寄存器偏移地址0x21414。

所以位地址即别名位带从0x4000 0000开始计算偏移固定0x200 0000,后偏移基地址0x2141432+第几BIT位4.其中32是因为一个寄存器有32个BIT位,4是因为每个BIT位占4个字节(LSB即最低位有效);所以F(4)输出位的地址为=0x4000 0000+0x200 0000+0x2141432+44
或者F(n)输出位的地址=((0x40021414&0xF0000000)+0x2000000+((0x40021414 &0xFFFFF)<<5)+(n<<2))

在这里插入图片描述
在这里插入图片描述
位使用例程:初始化后,通过宏定义地址使用F9位
#define SARM_adress_base 0x40000000
#define GPIOF_adress_base 0x40021400
#define GPIO_F_ODR_adress_base (GPIOF_adress_base+0x14)
#define GPIO_F_OUT(n) *(( volatile unsigned long *)((GPIO_F_ODR_adress_base-SARM_adress_base)32+n4+0x2000000+SARM_adress_base))

#define LED9 GPIO_F_OUT(9)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值