STM32中的位帶 bit band 操作

2022-08-01 16:30:15 字數 2241 閱讀 6600

**

//

位帶操作,實現51類似的gpio控制功能

//具體實現思想,參考<

//io口操作巨集定義

#define bitband(addr, bitnum) ((addr & 0xf0000000)+0x2000000+((addr &0xfffff)<<5)+(bitnum<<2))

#define mem_addr(addr) *((volatile unsigned long *)(addr))

#define bit_addr(addr, bitnum) mem_addr(bitband(addr, bitnum))

//io口位址對映

#define gpioa_odr_addr (gpioa_base+12) //

0x4001080c

#define gpiob_odr_addr (gpiob_base+12) //

0x40010c0c

#define gpioc_odr_addr (gpioc_base+12) //

0x4001100c

#define gpiod_odr_addr (gpiod_base+12) //

0x4001140c

#define gpioe_odr_addr (gpioe_base+12) //

0x4001180c

#define gpiof_odr_addr (gpiof_base+12) //

0x40011a0c

#define gpiog_odr_addr (gpiog_base+12) //

0x40011e0c

#define gpioa_idr_addr (gpioa_base+8) //

0x40010808

#define gpiob_idr_addr (gpiob_base+8) //

0x40010c08

#define gpioc_idr_addr (gpioc_base+8) //

0x40011008

#define gpiod_idr_addr (gpiod_base+8) //

0x40011408

#define gpioe_idr_addr (gpioe_base+8) //

0x40011808

#define gpiof_idr_addr (gpiof_base+8) //

0x40011a08

#define gpiog_idr_addr (gpiog_base+8) //

0x40011e08

//io口操作,只對單一的io口!

//確保n的值小於16!

#define paout(n) bit_addr(gpioa_odr_addr,n) //

輸出 #define pain(n) bit_addr(gpioa_idr_addr,n) //

輸入 #define pbout(n) bit_addr(gpiob_odr_addr,n) //

輸出 #define pbin(n) bit_addr(gpiob_idr_addr,n) //

輸入 #define pcout(n) bit_addr(gpioc_odr_addr,n) //

輸出 #define pcin(n) bit_addr(gpioc_idr_addr,n) //

輸入 #define pdout(n) bit_addr(gpiod_odr_addr,n) //

輸出 #define pdin(n) bit_addr(gpiod_idr_addr,n) //

輸入 #define peout(n) bit_addr(gpioe_odr_addr,n) //

輸出 #define pein(n) bit_addr(gpioe_idr_addr,n) //

輸入#define pfout(n) bit_addr(gpiof_odr_addr,n) //

輸出 #define pfin(n) bit_addr(gpiof_idr_addr,n) //

輸入#define pgout(n) bit_addr(gpiog_odr_addr,n) //

輸出 #define pgin(n) bit_addr(gpiog_idr_addr,n) //

輸入

STM32 位帶應用

from cortex m3 支援了位操作後,可以使用普通的載入 儲存指令來對單一的位元進行讀寫。在 cm3 支援的位帶中,有兩個區中實現了位帶。其中乙個是 sram區的最低 1mb 範圍,0x20000000 0x200fffff sram 區中的最低 1mb 第二個則是片內外設區的最低 1mb範...

STM32中的位帶 bit band 操作

支援了位帶操作後,可以使用普通的載入 儲存指令來對單一的位元進行讀寫。在 cm3 中,有兩個區中實現了位帶。其中乙個是 sram 區的最低 1mb 範圍,第二個則是片內外設區的最低 1mb範圍。這兩個區中的位址除了可以像普通的 ram 一樣使用外,它們還都有自己的 位帶別名區 位帶別名區把每個位元膨...

STM32中的位帶 bit band 操作

支援了位帶操作後,可以使用普通的載入 儲存指令來對單一的位元進行讀寫。在 cm3 中,有兩個區中實現了位帶。其中乙個是 sram 區的最低 1mb 範圍,第二個則是片內外設區的最低 1mb範圍。這兩個區中的位址除了可以像普通的 ram 一樣使用外,它們還都有自己的 位帶別名區 位帶別名區把每個位元膨...