赞
踩
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:位偏移=位号。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。