×
单片机 > 单片机程序设计 > 详情

关于STM32_GPIO的BSRR和BRR寄存器

发布时间:2020-06-01 发布时间:
|

首先,

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口不变,则
  GPIOA->BSRR = 0x0C21(0000 1100 0010 0001);

反过头来再好好消化上述第1条特征!!!

2)要设置端口A的D1、D3、D14、D15为低,而保持其它I/O口不变,则
  GPIOA->BRR = 0xC00A;

假设有16位data需要写入高8位的数据,则

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

也可以直接操作这两个寄存器: 
GPIOA->BSRR = data & 0xff00; 
GPIOA->BRR = ~data & 0xff00;


关键字:STM32  GPIO  BSRR  BRR寄存器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会