<< 运算符在引脚配置中的使用

 


      pos = ((uint32_t)0x01) << pinpos;
      currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
      if (currentpin == pos)
      {
        pos = pinpos << 2;
        pinmask = ((uint32_t)0x0F) << pos;
        tmpreg &= ~pinmask;
        tmpreg |= (currentmode << pos);
      }
      GPIOx->CRL = tmpreg;

应用场景

该操作在硬件编程,如对微控制器或其他嵌入式系统编程时非常常见。例如,设置GPIO(通用输入/输出)引脚的配置寄存器时,不同的引脚配置位于寄存器的不同位置。如果每个引脚配置占用 4 位,并且每组引脚的配置从寄存器的最低位开始,那么计算特定引脚配置的起始位位置就需要使用这样的移位操作。

如果 pinpos 表示 GPIO 引脚序号,而寄存器中每个引脚的配置都使用 4 位(比如模式设置、输出类型等),则 pos = pinpos << 2; 可以计算特定引脚配置在寄存器内的起始位位置。这样,通过修改从位置 pos 开始的位,可以控制对应引脚的配置。

注意事项

在使用左移操作时,需要注意不要超过操作数可以表示的位数范围。对于 int 类型(通常是32位),左移太多可能导致超过表示范围,产生未定义行为。此外,考虑到移位操作的目的和上下文,有时可能需要使用无符号类型来避免潜在的问题,如符号扩展。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值