关于STMF4系列芯片GPIO的ODR、BSRR、BRR寄存器

最近在学习HAL库的过程中,遇到了一些疑问,通过Goto发现,所有对GPIO引脚状态的设置函数均是对相关寄存器进行操作,这里只探讨我所遇见的疑问,请各位大佬指点。这里需要记在以下两点重要知识点,方便理解。

  1. 所有配置GPIO数据的库函数,均是设置ODR,BSRR,BRR 寄存器直接来控制引脚输出状态。
  2. ODR、BSRR、BRR寄存器均为32位。

主要参考以下大佬的博客:

STM32F4不同版本的库中BSRR的设置差异简述_stm32f407 bsrr-CSDN博客

GPIO 配置之ODR, BSRR, BRR 详解 - prayer521 - 博客园 (cnblogs.com)

GPIO 配置之ODR, BSRR, BRR 详解_gpiox->brr-CSDN博客

BSRR代码

void SCL_OutPut(iic_bus_t *Bus, uint16_t Value)
{
    if(Value)
    {
        Bus ->IIC_SCL_PORT->BSRR |= Bus->IIC_SCL_PIN;
    }
    else
    {
        Bus->IIC_SCL_PORT->BSRR = (uint32_t)Bus->IIC_SCL_PIN << 16U;
    }
}

此代码中,通过直接操作BSRR寄存器即可实现IIC发送一位数据,对我这种常年调库的菜鸡来说,一下干到寄存器直接懵逼,这个寄存器是干什么的,为什么对他操作,能实现相关GPIO端口Pin的高低电平转换,于是带着疑问,Goto了一下这个寄存器,发现他是在stm32f4xx_hal_gpio.h里面定义的一个结构体成员:

  GPIO结构体定义

typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuan园园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值