GPIO(2)
mbed osを使用せずにレジストリに直接アクセスして操作する場合は、データテーブルまたはリファレンスマニュアルを参照してください. https://www.st.com/resource/en/datasheet/stm32f411re.pdf https://www.st.com/resource/en/reference_manual/dm00119316-stm32f411xce-advanced-armbased-32bit-mcus-stmicroelectronics.pdf
ポートはGPIOAからGPIOHの間に存在する.
上のデータテーブルのメモリ部分の断面図です.
これはGPIOのベースアドレスです.
GPIOレジスタの全体構成は手動8.4.11である.
base addressに最も近い場所にport mode registerが存在します.(GPIOx->MODER)
このポートの数番ピンの用途を初期化するレジスタ.
00はinput,01はoutput,10はalternative function mode,11はシミュレーションモードである.
リセットすると、ほとんどのpinのdefaultはinputモードです.(PA 13、PB 3、PB 4を除く…)
output type register(GPIOx->OTYPER)
push-pull mode/open-draw.
output speed register (GPIOx->OSPEEDR)
オン/オフの速度を決定します.
00 low speed, 01 medium speed, 10 fast speed, 11 high speed
pull-up pull-down register(GPIOx->PUPDR)
00 no pull-up/pull-down, 01 pull up, 10 pull-down
input data register(GPIOx->IDR)
単語単位でアクセスできます.読み取り専用レジスタです.
output data register(GPIOx->ODR)
GPIO出力モードでは、このレジスタに使えばいいです.
ここでの入力と出力は別々であるが,多くのプロセッサはIDRとODRを区別せず,物理的に異なるアドレスを用いる.したがって,主にvolatileを用いる.
bit set/reset register(GPIOx->BSRR)
この文章の下部の画像を見て、Bit set/resetレジスタの信号を通ってoutput dataレジスタに入ります.
これは、ピンの値を再設定することを意味します.プログラム作成時にピン値をリセットする必要がある場合は、BSRRレジスタにリセットできます.
configuration lock register(GPIOx->LCKR)
誤って値を変更しないようにロックします.
例えば、PA 5を出力モードに設定するには、
レジスタを使用してuser buttonを押すたびにLED 2の点滅率が変化するプログラムを制御します.
https://github.com/jacinder/embeeded_PA/blob/main/GPIO/GPIO%20In%20&%20Out.cpp
GPIO register
ポートはGPIOAからGPIOHの間に存在する.
上のデータテーブルのメモリ部分の断面図です.
これはGPIOのベースアドレスです.
GPIOレジスタの全体構成は手動8.4.11である.
base addressに最も近い場所にport mode registerが存在します.(GPIOx->MODER)
このポートの数番ピンの用途を初期化するレジスタ.
00はinput,01はoutput,10はalternative function mode,11はシミュレーションモードである.
リセットすると、ほとんどのpinのdefaultはinputモードです.(PA 13、PB 3、PB 4を除く…)
output type register(GPIOx->OTYPER)
push-pull mode/open-draw.
output speed register (GPIOx->OSPEEDR)
オン/オフの速度を決定します.
00 low speed, 01 medium speed, 10 fast speed, 11 high speed
pull-up pull-down register(GPIOx->PUPDR)
00 no pull-up/pull-down, 01 pull up, 10 pull-down
input data register(GPIOx->IDR)
単語単位でアクセスできます.読み取り専用レジスタです.
output data register(GPIOx->ODR)
GPIO出力モードでは、このレジスタに使えばいいです.
ここでの入力と出力は別々であるが,多くのプロセッサはIDRとODRを区別せず,物理的に異なるアドレスを用いる.したがって,主にvolatileを用いる.
bit set/reset register(GPIOx->BSRR)
この文章の下部の画像を見て、Bit set/resetレジスタの信号を通ってoutput dataレジスタに入ります.
これは、ピンの値を再設定することを意味します.プログラム作成時にピン値をリセットする必要がある場合は、BSRRレジスタにリセットできます.
configuration lock register(GPIOx->LCKR)
誤って値を変更しないようにロックします.
例えば、PA 5を出力モードに設定するには、
__HAL_RCC_GPIOA_CLK_ENABLE()
GPIOA->MODER &= ~(0b11 << 10);
GPIOA->MODER |= (0b01 << 10);
時計を間違えると回路基板が壊れてしまうので、時計はライブラリを使いました.MODERは01をPA 5番ビットに書き込む必要があり、元の値が10であればor演算時は11となる.したがって、元の値を00に設定し、or演算10に設定します.論理設計、コンピュータ構造の後、bit演算やバイナリ、16進数を使うことはほとんどないので、うろうろしていたが、0 b 11はバイナリが11、0 b 11<10は11の後に10個の0を加えた.MODERレジスタデータテーブルによると、PA 5は11,10を使用するため、10回右シフトした.(0 b 11<10)であれば、11+(010個)ではないので、00+(110個)となり、and演算が行われるため、11,10回のみビットが0に初期化される.GPIO via register LAB
レジスタを使用してuser buttonを押すたびにLED 2の点滅率が変化するプログラムを制御します.
https://github.com/jacinder/embeeded_PA/blob/main/GPIO/GPIO%20In%20&%20Out.cpp
Reference
この問題について(GPIO(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@highgrace/GPIO2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol