首页 > 编程知识 正文

MCU_STM32的位带操作 -- bit banding

时间:2023-05-06 06:14:36 阅读:39003 作者:2109

带位操作的STM32芯片除了通用的寄存器访问外,还具有有趣的位操作。

位带的含义是,每个位(位)位膨胀为32位字(word ),并在访问这些字时实现访问“位”的目的。

位操作的一个典型特征是将一个位映射为32位,便于在程序处理中操作具体位。 典型地,像RCC寄存器那样,需要按位进行操作的地方很多,直接寄存器操作中程序的可读性不强。

位带操作的缺点也很明显,时间开销也会稍大一些。 因为计算位带映射是不可避免的。

Cortex-M4文档中有这样一个例子:

参照: http://infocenter.arm.com/help/index.JSP? topic=/com.arm.doc.ddi 0337 h/behcjiic.html

原文的映射解释是这样的。

thealiaswordat0x 23 ffff E0 maps tobit [0] of the bit-bandbyteat0x 200 ffff :0 x 23 ffffe0=0x 22000000 (0x ffff * 32 )0*4。

thealiaswordat0x 23 ffffcmapstobit [7] of the bit-bandbyteat0x 200 fffff :0 x 23 fffffc=0x 22000000 (0x ffff * 32 )7*4。

thealiaswordat0x 2200000 maps tobit [0] of the bit-bandbyteat :0 x 22000000=0x 22000000 (0* 32 )0*4。

thealiaswordat0x 2200001 cmapstobit [7] of the bit-bandbyteat0x 20000033600 x 2200000 (0* 32 )7*4。

请说明。 也就是说:

0x200FFFFF的bit[0]带字节的映射计算:=0x22000000(0xfffff*32 )0*4=0x23FFFFE0

0x200FFFFF的bit[7]带字节的映射计算:=0x22000000(0xfffff*32 )7*4=0x23FFFFFC

0x20000000的bit[0]带位字节的映射计算:=0x22000000(0x0*32 )0*4=0x22000000

0x20000000的bit[7]带位字节的映射计算:=0x22000000(0x0*32 )7*4=0x2200001C

寻找了关于程序常用的具体例子。 例如,此函数在STM32F407中操作RCC_CR中的第19个CSSON。 程序如下,一目了然。

voidHal_RCC_ENABLECSS(void ) ) (_iouint32_t* ) RCC_Cr_CSSon_bb=) uint32_t )启用; }

理解:

首先,关于RCC_CR_CSSON_BB的定义,

# defineperiph _ bb _ base0x 42000000 ul

# defineahb1per iph _ base (per iph _ base0x 00020000 ul )。

# define RCC _ base (ah B1 per iph _ base0x 3800 ul ) ) ) ) ) ) ) ) )

# define RCC _ offset (RCC _ base-per iph _ base ) /计算结果,即=0x00020000UL 0x3800UL

# define RCC _ Cr _ offset (RCC _ offset0x 00 u ) )。

# define RCC _ CSS on _ bit _ number0x 13u

# define RCC _ Cr _ CSS on _ bb (per iph _ bb _ base (RCC _ Cr _ offset * 32u ) RCC _ CSS on _ bit _ nu nu nu 4u ) )

这些数据去哪里找这里? PERIPH_BB_BASE的映射地址为0x42000000,上例中的SRAM映射地址为0x22000000。 具体请参阅STM32的编程参考手册PM0214。 请参照下图

其次,STM32F405xx/STM32F407xx的数据表10显示了RCC寄存器地址为0x40023800-0x40023BFF,

因此,RCC_CR_CSSON_BB的计算为0x 42000000 ul0x 00023800 * 320 x13 * 4

参考资料STM 32 f 405/407数据表下载地址:

33559 www.ST.com/resource/en/data sheet/STM 32 f 405 og.pdf

STM32F4编程手册(STM 32 cortex-M4 mcusandmpusprogrammingmanual )下载地址:

3359 www.ST.com/content/CCC/resource/technical/document/programming _ manual/6c/3a/CB/E7/E4/ea/eee

Cortex-m3技术参考手册(Cortex-m3文档)下载位置:

3358 infocenter.arm.com/help/topic/com.arm.doc.ddi 0337 e/ddi 0337 e _ cortex _ m3 _ R1 P1 _ trm.pdf

Cortex-M4技术参考手册(Cortex-M4文档)下载位置:

3358 infocenter.arm.com/help/topic/com.arm.doc.ddi 0439 b/ddi 0439 b _ cortex _ M4 _ r0p0_ trm.pdf

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。