stm32中如何進行位定義

2021-07-24 15:52:51 字數 2302 閱讀 9491

#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範...