专注电子技术学习与研究
当前位置:单片机教程网 >> 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;

关闭窗口

相关文章