首先,
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
BSRR和BRR寄存器来自32位。
比较:
1 )置GPIOA-BSRR低16位的某位为'1',则对应的I/O端口管脚置'1';
置GPIOA-BSRR低16位的某位为'0',则对应的I/O端口管脚保持不变。
2 )置GPIOA-BSRR高16位的某位为'1',则对应的I/O端口管脚套'0';
置GPIOA-BSRR高16位的某位为'0',则对应的I/O端口管脚保持不变。
3 )置GPIOA-BRR低16位的某位为'1',则对应的I/O端口管脚套'0';
置GPIOA-BRR低16位的某位为'0',则对应的I/O端口管脚保持不变。
例如:
1 )将端口a的D0、D5、D10、D11设置为高度,并保留其他I/O端口
gioa-bsrr=0x0c 21 (0000110000100001 );
反过头来再好好消化上述第1条特征!!!
2 )将端口a的D1、D3、D14、D15设置为较低,而保留其他I/O端口时
GPIOA-BRR=0xC00A;
假设16位data需要写入高位8位的数据
Gpio_setbits(gpioa,data0xff00 );
gpio_resetbits(gpioa,(~data0xff00 ) );
也可以直接操作这两个寄存器。
GPIOA-BSRR=data0xff00;
GPIOA-BRR=~data0xff00;