SevenZ的笔记 https://passport2.21ic.com/?747229 [收藏] [复制] [RSS]

日志

STM32学习笔记--位带操作

已有 1368 次阅读2011-9-21 00:34 |系统分类:嵌入式系统| 位带操作

对位带别名区的控制其实目的就是能实现对内存单元按位的计算,就像51单片机一样,可以按位运算,而stm32也是从51继承过来的。


其实位带操作很简单,就是一个简单的映射问题:


位带区             --------------->        位带别名区


位带区有两种情况:一种是内部的外设(0x20000000开始),一种是RAM(0x40000000开始),它们的带宽都分别为1M。要想对位带区的进行位的控制,可进行对位带别名区的控制。地址计算公式:


AliaAddr(addr,bitnum) = (addr&0xF0000000) + 0x2000000 + (addr&0xFFFFF)<<5 + bitnum<<2


简单的例子:GPIOA 第0位的映射:GPIOA_BASE 为GPIOA口的基地址,GPIOA_BASE + 12 为GPIOA 的寄存器GPIOA_ODR的地址。计算为:AliaAddr(GPIOA_BASE+12 , 0)    


而对转换后的地址进行操作就可以达到对位带区的控制。我当初的疑问是为什么不对位带区地址进行直接操作,原因是STM32对内存的控制读写数据是按字节来算的,不能对一位进行直接操作。


 


 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)