我正试图学习如何在STM32F4发现中编写GPIO引脚的驱动程序。我经历的教程和我碰到这条线进来:C编码中的按位操作
static void hal_gpio_configure_pin_mode (GPIO_TypeDef *GPIOx, uint16_t pin_no, uint32_t mode)
{
GPIOx->MODER |= (mode << (2* pin_no));
}
我是比较新的嵌入式系统,不知道是什么GPIOX->MODER |= (mode << (2* pin_no));
一样。另外,我不知道为什么pin_no是16位,而模式是32位。我知道< <是左移位运算符。但我仍然没有得到完整的上下文。
任何人都可以解释这一切吗?
没有理由'pin_no'和'mode'应具有相同的类型。它们的值不会像加法或乘法那样在运算中使用,而是'pin_no'只是一个索引,用于(2)来计算一个值的移位量('mode')。移位只是一个数字;它不必与被移位的类型是同一类型,所以,像'+'和'*'这样的运算符要求将它们的操作数转换为相同的类型,'<< '操作员的左右侧可能有不同的类型。 –
看着莫der注册在芯片文档的gpio部分。你会看到,这只是在这个寄存器中设置了几位。 –
Google:“c按位运算符如何工作”。或读一本书。 – Lundin