主要通過 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口不變,只需一行語句:
2)要設置D1、D3、D14、D15為低,而保持其它I/O口不變,只需一行語句:
3)要同時設置D0、D5、D10、D11為高,設置D1、D3、D14、D15為低,而保持其它I/O口不變,也只需一行語句:
如果使用了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;