STM32 GPIO BRR和BSRR寄存器
比如希望快速地對(duì)GPIOE的位7進(jìn)行翻轉(zhuǎn),則可以:
本文引用地址:http://www.ex-cimer.com/article/201611/321402.htmGPIOE->BSRR = 0x80; // 置1
GPIOE->BRR = 0x80; // 置0
如果使用常規(guī)讀-改-寫(xiě)的方法:
GPIOE->ODR = GPIOE->ODR | 0x80; // 置1
GPIOE->ODR = GPIOE->ODR & 0xFF7F; // 置0
有人問(wèn)是否BSRR的高16位是多余的,請(qǐng)看下面這個(gè)例子:
假如你想在一個(gè)操作中對(duì)GPIOE的位7置1,位6置0,則使用BSRR非常方便:
如果沒(méi)有BSRR的高16位,則要分2次操作,結(jié)果造成位7和位6的變化不同步!
規(guī)則:
一、置GPIOD->BSRR低16位的某位為1,則對(duì)應(yīng)的I/O端口置1;而置GPIOD->BSRR低16位
的某位為0,則對(duì)應(yīng)的I/O端口不變。
二、置GPIOD->BSRR高16位的某位為1,則對(duì)應(yīng)的I/O端口置0;而置GPIOD->BSRR高16位
的某位為0,則對(duì)應(yīng)的I/O端口不變。
三、置GPIOD->BRR低16位的某位為1,則對(duì)應(yīng)的I/O端口置0;而置GPIOD->BRR低16位的
某位為0,則對(duì)應(yīng)的I/O端口不變。
例如:
1)要設(shè)置D0、D5、D10、D11為高,而保持其它I/O口不變,只需一行語(yǔ)句:
2)要設(shè)置D1、D3、D14、D15為低,而保持其它I/O口不變,只需一行語(yǔ)句:
3)要同時(shí)設(shè)置D0、D5、D10、D11為高,設(shè)置D1、D3、D14、D15為低,而保持其它I/O口不變
,也只需一行語(yǔ)句:
如果中斷中要對(duì)IO口設(shè)置,最好使用BSRR和BRR操作,而不要用ODR .
評(píng)論