<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        STM32 GPIO BRR和BSRR寄存器

        作者:CNTSW   來源:CNTSW的博客   點擊數:  更新時間:2014年06月03日   【字體:

         使用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 .

        http://m646208823.blog.163.com/blog/static/166902953201293132522237/

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮