私は、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));
が何をするか分かりません。また、modeが32ビットのときにpin_noが16ビットである理由は分かりません。私は< <が左シフトビット演算子であることを知っています。しかし、私はまだ完全な文脈を得ていません。
誰でもこのことを説明できますか?ラインGPIOx->MODER |= (mode << (2* pin_no));
説明しようと
'pin_no'と'モード 'は、同じ型を持つべき理由はありませんその値はaddやmultiplyなどの演算で発生するように一緒に使用されるのではなく、単なるインデックスであり、値をシフトする量( 'mode')を計算するために使用されます(' mode')。 shiftは単純に数値でなければなりません;シフトされるものと同じ型である必要はありません。したがって、 '+'や '* 'のような演算子ではオペランドを同じ型に変換する必要がありますが、 '演算子は、左右に異なる型を持つことがあります。 –
moを見てくださいチップのドキュメントのgpioセクションに記載されています。これは、単にこのレジスタに2ビットを設定していることがわかります。 –
Google:「ビット演算子の仕組み」または本を読む。 – Lundin