STM32 GPIO設定について


41

STM32 Standard Peripheralライブラリでは、GPIOを構成する必要があります。

しかし、3つの機能がありますが、それらの設定方法がわかりません。

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

GPIO_Speed、から選択する4つの設定があります

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

どの速度から選択するかを知るにはどうすればよいですか?高速または低速を使用する利点または欠点はありますか?(例:消費電力?)

GPIO_OType、から選択する2つの設定があります

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

どちらを選択するかを知る方法は?そして、オープンドレインとプッシュプルとは何ですか?

GPIO_PuPd、から選択する3つの設定があります

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

この設定はプッシュプルの初期設定に関連していると思います。


関連:AVR / Arduino、PICなど、ネイティブにサポートしていないマイクロコントローラーで「オープンドレイン」モードを明示的に強制する方法:electronics.stackexchange.com/a/354993/26234
Gabriel Staples

回答:


45
  • GPIO_PuPd(プルアップ/プルダウン)

    デジタル回路では、信号線が「フロート」状態にならないことが重要です。つまり、常に高状態または低状態である必要があります。フローティングの場合、状態は未確定であり、いくつかの異なるタイプの問題を引き起こします。

    これを修正する方法は、信号線からVccまたはGndに抵抗を追加することです。そうすることで、ラインがアクティブにハイまたはローに駆動されていない場合、抵抗により電位が既知のレベルにドリフトします。

    ARM(および他のマイクロコントローラー)には、これを行うための回路が組み込まれています。そうすれば、回路に別の部品を追加する必要はありません。たとえば、「GPIO_PuPd_UP」を選択した場合、信号ラインとVccの間に抵抗を追加するのと同等です。

  • GPIO_OType(出力タイプ):

    プッシュプル:これは、ほとんどの人が「標準」と考える出力タイプです。出力が低くなると、アクティブにグランドに「プル」されます。逆に、出力を高く設定すると、Vccに向かって積極的に「プッシュ」されます。簡略化すると、次のようになります。

    押し引き

    一方、オープンドレイン出力は一方向にのみアクティブです。ピンをグランドに引き寄せることはできますが、それを高く駆動することはできません。前のイメージを想像してください。ただし、上側のMOSFETはありません。グランドに引っ張られていない場合、MOSFETは単に非導電性であり、出力がフロートします。

    オープンドレイン

    このタイプの出力では、回路にプルアップ抵抗を追加する必要があります。これにより、ローに駆動されていないときにラインがハイになります。これを行うには、外部部品を使用するか、GPIO_PuPd値をGPIO_PuPd_UPに設定します。

    この名前は、MOSFETのドレインが内部で何にも接続されていないという事実に由来しています。MOSFETの代わりにBJTを使用する場合、このタイプの出力は「オープンコレクタ」とも呼ばれます。

  • GPIO_Speed

    基本的に、これは出力信号のスルーレート(立ち上がり時間と立ち下がり時間)を制御します。スルーレートが速いほど、回路からより多くのノイズが放射されます。スルーレートを遅くし、特定の理由がある場合にのみスルーレートを上げることをお勧めします。


ありがとう!素晴らしい答えのために;)、フローティング状態にあるときのさまざまな問題についてもう少し説明してもいいですか?
ティム

3
アイデアは、中間入力電圧での任意の長さの滞在は、入力ブロックの上部と下部の両方のFETを部分的にオンにし、それらを介して電源を部分的に短絡させ、過剰な電力消費または(特に深刻な場合)潜在的に損傷。
クリスストラットン

@ティムはい、クリス・ストラットンが言ったこと:)
ビットマック

3
@Timまた、ラインがフローティングの場合、電圧レベルを乱すことは非常に簡単です。回路に手を
かざすだけ

1
@Timそれは本当にアプリケーションに依存します。スイッチ(またはボタン)を読んでいる場合、それは実際には重要ではありません。他のコンポーネントとインターフェースする場合、インターフェースに依存します。たとえば、SPI通信の場合、CSラインはアクティブLowです。その場合、プルアップ抵抗が必要になるため、CSが不意にLowになることはありません。マイクロコントローラを使用してラインを常にアクティブに駆動する場合、これは不要であると考えるかもしれません。しかし、マイクロコントローラーが初期化される前はどうでしょうか?または、リセットされた場合 プルアップ抵抗が...任意の曖昧さを取り除く
bitsmack

5

GPIO速度は、GPIOが生成できる最大周波数です。設定を低くすると、電力を節約できます。

出力タイプは、ピンがハイとローをアサートするか(プッシュプル)、または出力がドレインでピンに接続されたFETのゲートをオンにするか(オープンドレイン)です。これは、他のピンを短絡させずにバスをローにできる接続ピンが必要な場合に便利です。

プルアップ抵抗はピン出力を電源レールに接続し、プルダウンは抵抗を介してグランドに接続します。これは、特に、ビットが高インピーダンス状態にある場合でも、ピンの電圧を制御します。これは、スポットスイッチを使用してデジタル入力値を変更するようなことを行うために重要です。スイッチが開いていても、入力は予測可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.