STM32 GPIO BRR和BSRR暫存器

2021-07-28 10:03:11 字數 1131 閱讀 1301

使用brr和bsrr暫存器可以方便地快速地實現對埠某些特定位的操作,而不影響其它位的狀態。

比如希望快速地對gpioe的位7進行翻轉,則可以:

gpioe->bsrr = 0x80; // 置'1'

gpioe->brr = 0x80; // 置'0'

如果使用常規'讀-改-寫'的方法:

gpioe->odr = gpioe->odr | 0x80; // 置'1'

gpioe->odr = gpioe->odr & 0xff7f; // 置'0'

有人問是否bsrr的高16位是多餘的,請看下面這個例子:

假如你想在乙個操作中對gpioe的位7置'1',位6置'0',則使用bsrr非常方便:

gpioe->bsrr = 0x00400080;

如果沒有bsrr的高16位,則要分2次操作,結果造成位7和位6的變化不同步!

gpioe->bsrr = 0x80;

gpioe->brr = 0x40;

規則:一、置gpiod->bsrr低16位的某位為'1',則對應的i/o埠置'1';而置gpiod->bsrr低16位

的某位為'0',則對應的i/o埠不變。

二、置gpiod->bsrr高16位的某位為'1',則對應的i/o埠置'0';而置gpiod->bsrr高16位

的某位為'0',則對應的i/o埠不變。

三、置gpiod->brr低16位的某位為'1',則對應的i/o埠置'0';而置gpiod->brr低16位的

某位為'0',則對應的i/o埠不變。

例如:1)要設定d0、d5、d10、d11為高,而保持其它i/o口不變,只需一行語句:

gpiod->bsrr = 0x0c21;// 使用規則一

2)要設定d1、d3、d14、d15為低,而保持其它i/o口不變,只需一行語句:

gpiod->brr = 0xc00a;// 使用規則三

3)要同時設定d0、d5、d10、d11為高,設定d1、d3、d14、d15為低,而保持其它i/o口不變

,也只需一行語句:

gpiod->bsrr = 0xc00a0c21;// 使用規則一和規則二

如果中斷中要對io口設定,最好使用bsrr和brr操作,而不要用odr .

STM32 ARM STM32 各種縮寫和全稱

gpio gpio 英語 general purpose input output 通用型之輸入輸出的簡稱,功能類似8051的p0 p3,其接腳可以供使用者由程式控制自由使用,pin腳依現實考量可作為通用輸入 gpi 或通用輸出 gpo 或通用輸入與輸出 gpio 如當clk generator,c...

STM32 GPIO和外部中斷

stm32中使用gpio作為外部中斷,以如下圖的方式連線到外部中斷,因此在設計的時候,不能同時將中斷連線在pa.1 pb.1 pc.1 pd.1 pe.1,因為同時只能選擇乙個中斷。外部中斷初始化,乙個重要的結構體exit inittypedef typedef struct exti initty...

STM32外部中斷和IWDG

實驗平台 正點原子戰艦開發板 系統 windows 7 64位 編譯器 mdk 4.72a 參考例程 atk 串列埠例程,野火 iso串列埠例程 中斷主要分為兩種 1 系統異常中斷也可以說的核心異常,這類異常中斷有些是不可以控制的,如reset,nmi,fault.2 外部中斷,這些中斷都是可以設定...