stm32 IO口快速操作

2021-06-21 10:56:40 字數 1131 閱讀 3936

使用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 IO口位帶操作

m4中有4gb的訪問空間,訪問空間有兩個比較重要的位址,暫存器對映位址,又叫別名位址 範圍32mb 暫存器位址 範圍1mb,固定的 使用庫函式對io引腳操作比較費時間,需要進行現場保護和現場恢復操作,不能一步到位。使用位帶操作能夠一步到位,方便快捷。每個埠都有對應的暫存器位址,檢視庫函式可以看到對暫...

stm32 IO復用配置

gpio pinafconfig gpioa,gpio pinsource9,gpio af usart1 gpioa9usart1解析 gpio為埠a的基址 gpio pinsource9 為埠9 gpio af usart1 復用對映,巨集定義為 define gpio af usart1 ui...

STM32 IO口工作模式

一 推挽輸出 可以輸出高 低電平,連線數字器件 推挽結構一般是指兩個三極體分別受兩個互補訊號的控制,總是在乙個三極體導通的時候另乙個截止。高低電平由ic的電源決定。推挽電路是兩個引數相同的三極體或mosfet,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次...