我正在尝试学习如何在STM32F4 Discovery中为GPIO引脚编写驱动程序。我正在阅读教程,我遇到了这一行:
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位。我知道&lt;&lt;是左移位运算符。但我仍然没有得到完整的背景。
有人可以解释这一切吗?
答案 0 :(得分:3)
尝试解释第GPIOx->MODER |= (mode << (2* pin_no));
行:
GPIOx
是指向结构的指针GPIOx->MODER
访问此结构中的成员MODER
x |= y
是x = x | y
的缩写,表示&#34;执行x和y的逻辑OR,并将结果写回x mode << (2* pin_no)
表示将变量mode
的内容左移两次pin_no
位。因此,该行表示&#34;取GPIOx->MODER
的内容,按位-OR与mode
的左撇子内容。