STM32中 GPIO -> BSRR/BRR

首先看看GPIO_TypeDef的结构体:

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);

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

假设有16位data的高8位写入端口A,可以直接操作这两个寄存器:
GPIOA->BSRR = data & 0xff00; //data写入端口A
GPIOA->BRR = ~data & 0xff00; //data高8位保持不变写入端口A,data低8位置0写入端口A

等价于:
GPIO_SetBits(GPIOA, data & 0xff00);
GPIO_ResetBits(GPIOA, (~data & 0xff00));

原文链接:https://blog.csdn.net/greatxiaoting/article/details/52133578

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值