您的位置:首页 > 其它

STM32的库如何实现对同一组IO口的一部分引脚进行读写

2015-09-12 11:31 281 查看
规则:

一、置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;// 使用规则一和规则二

所以,如果想改变一组引脚的低八位的值,可以这样实现:

#define DATAOUT(data) do{ \

GPIO_SetBits(GPIOE, data&0x00ff); \

GPIO_ResetBits(GPIOE,(~data & 0x00ff)); \

}while(0)

也可以直接操作这两个寄存器:

GPIOD->BSRR = data & 0x00ff;

GPIOD->BRR = ~data & 0x00ff;

高八位同理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: