STM32如何操作单个位

STM32无sbit关键字,不能单个位操作,一般有两种方式:
1、读改写。2、位段操作。
第一种方法,先从寄存器中读出原来的值,对相应的位修改,再写入寄存器。unsigned int tmp =; tmp &= ;寄存器 = tmp; 缺点:不是原子操作,步骤比较多,3步。原子操作:不会被线程调度机制打断的操作,一旦开始,就一直运行到结束。
第二种方法,位段操作。
目的:对存储空间变相的实现位操作。
片区域能够实现位段操作。(只有标记了BB才可以)0X2000 0000--0X200F FFFF:SRAM区范围1MB。0X4000 0000--0X400F FFFF:APB1、APB2、AHB1。所有外设的寄存器组,范围也是1MB。
原理:将“位段区”的单个bit膨胀(映射)为别名区的一个32位的字,通过向别名区的字整体写1和0,实现对单个bit的写1和0。
位:指实际操作的那个bit,段:指映射后的·那个“字”。一个位操作最终变成了一个字段操作,所以被称为位段操作。
如何操作别名区的膨胀后的字呢。
通过地址,别名区有范围,必须映射到指定地址范围的别名区,不然不能进行位段操作。
SRAM区:0X2200 0000--0X23FF FFFF。
外设区:0X4200 0000--0X43FF FFFF。在ST的内核,别名区属于“保留地址,没有映射实际存储器”。
计算膨胀字的地址。
bit_word_addr = bit_band_base + byte_offset*32 + bit_number*4
bit_band_base 别名区基地址:0X2200 0000;0X4200 0000
byte_offset 字节偏移:bit所在字节或寄存器地址 -(SRAM区域外设区基地址)0X2000 0000;0X4000 0000。
  bit_number:位偏移=位号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值