我正試圖學習如何在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