#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) //輸入
///ex_nvic_config專用定義
#define gpio_a 0
#define gpio_b 1
#define gpio_c 2
#define gpio_d 3
#define gpio_e 4
#define gpio_f 5
#define gpio_g 6
/這是stm32f103 位帶操作的定義方式,看懂了就可以進行位定義了,出自 正點原子資料
**:
1 io口 stm32 STM32如何進行位繫結
在我們學習51微控制器的時候,對io的操作可直接使用p0 1 0,p0 2 1,控制某個io口就可以單獨的對某個埠的io口進行操作,但在stm32中是不能直接這樣用的,為了可以像使用51微控制器一樣對某個埠的io口進行直接操作方便我們使用,就出現了位帶操作。位繫結理解 stm32對外設埠的操作是通過...
在linux環境下如何進行stm32的開發建議
工具鏈一般用gcc arm none eabi,可以用包管理裝,也可以到arm官網下,也可以自己編譯,畢竟gnu源有這個配置。純用命令列的話,cubemx可以生成makefile工程,改下編譯器路徑就能make,會生成bin檔案。用ide的話,可以用eclipse,參考wiced sdk。可以用vs...
STM32 位帶應用
from cortex m3 支援了位操作後,可以使用普通的載入 儲存指令來對單一的位元進行讀寫。在 cm3 支援的位帶中,有兩個區中實現了位帶。其中乙個是 sram區的最低 1mb 範圍,0x20000000 0x200fffff sram 區中的最低 1mb 第二個則是片內外設區的最低 1mb範...