1.位帶介紹
(1)位帶操作
51單片機使用sbit對IO口的定義,STM 中沒有這種關鍵字掉冶,而是通過訪問位帶別名區(qū)來實現(xiàn),即通過將每個比特位膨脹成一個32位字理逊,當訪問這些字的時候就實現(xiàn)了訪問比特的目的
比方說BSRR寄存器有32個位窿侈,那么可以映射到32個地址上扼雏,當我們去訪問這32個地址就達到訪問32個位的目的屿岂。
(2)STM32位帶及位帶別名區(qū)域
支持位帶操作的區(qū)域是 SRAM 區(qū)的最低 1MB 范圍(APB1/2坞琴,AHB外設)和片內外設區(qū)的最低 1MB范圍作郭。
2.位帶區(qū)與位帶別名區(qū)地址轉換
A:要操作的位所在寄存器的地址
n:位號陨囊,即在寄存器的第幾位
外設位帶區(qū)與外設位帶別名區(qū)的地址轉換公式:
AliasAddr = 0x42000000+ [(A-0x40000000)8 +n]4
SRAM位帶區(qū)與SRAM位帶別名區(qū)的地址轉換公式:
AliasAddr = 0x22000000+ [(A-0x20000000)8 +n]4
理解要點:位帶區(qū)的一個位在位帶別名區(qū)會被膨脹成四個字節(jié),8意思是一個字節(jié)8位,4是一位膨脹32位即4字節(jié)
根據(jù)上述兩個公式特點夹攒,將其統(tǒng)一為一個公式表示:
((A & 0xF0000000)+0x02000000+((A &0x000FFFFF)<<5)+(n<<2))
理解要點:如果A是0x42000000與0xF0000000那么最高位還是4蜘醋,再加上0x02000000就是上式。1MB的地址范圍分別是0x20000000 ~ 0x200fffff 和0x40000000 ~ 0x400fffff所以可以屏蔽前三位就可以知道所需位的偏移咏尝。<<5是32压语,<<2是4