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

    STM32 同一I/O口下 多個口同時操作

    作者:未知   來源:互聯網   點擊數:  更新時間:2014年06月22日   【字體:

    主要通過 GPIOx_BSRR 和GPIOx_BSR 兩個寄存器來實現


    規則:
    一、置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;// 使用規則一和規則二

     

    如果使用了PD口的PD8-PD15高8位,假設data為8位要寫入的數據:

    GPIO_SetBits(GPIOD, data & 0xff00);
    GPIO_ResetBits(GPIOD, (~data & 0xff00));

    也可以直接操作這兩個寄存器:
    GPIOD->BSRR = data & 0xff00;
    GPIOD->BRR = ~data & 0xff00;

     

    如果使用了PD口的PD0-PD7低8位,假設data為8位要寫入的數據:

    GPIO_SetBits(GPIOD, data & 0x00ff);
    GPIO_ResetBits(GPIOD, (~data & 0x00ff));

    也可以直接操作這兩個寄存器:
    GPIOD->BSRR = data & 0x00ff;
    GPIOD->BRR = ~data & 0x00ff;

    關閉窗口

    相關文章

    亚洲一区二区制服在线|在绩专区欧美自拍日韩|青春娱乐网97超碰人人射|在线观看国产网址你懂的