新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 GPIO寄存器ODR BSRR BRR

        STM32 GPIO寄存器ODR BSRR BRR

        作者: 時間:2016-11-17 來源:網絡 收藏
        使用BRRBSRR寄存器可以方便地快速地實現對端口某些特定位的操作,而不影響其它位的狀態。

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

        本文引用地址:http://www.104case.com/article/201611/315449.htm

        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 .



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 玛多县| 苍溪县| 德州市| 花莲县| 延边| 喀喇| 武穴市| 元江| 昌邑市| 台东市| 香港 | 永登县| 唐河县| 连山| 垣曲县| 新竹市| 呼伦贝尔市| 济南市| 莱西市| 咸丰县| 许昌县| 濉溪县| 土默特左旗| 鄱阳县| 兴城市| SHOW| 大理市| 班戈县| 慈利县| 温州市| 弥勒县| 蕲春县| 东乡族自治县| 永善县| 黄山市| 广东省| 延川县| 枞阳县| 随州市| 潮安县| 中西区|