GPIO¶
GPIOとは¶
GPIO(General Purpose Input Output)は、マイコンのピンを入力や出力として自由に利用できる機能である。
STM32やRaspberry Piなどのマイコンには多数のGPIOピンが搭載されている。
例えばSTM32では
PA0
PA1
PA2
PB0
PB1
PB2
などのピンがGPIOとして利用できる。
GPIOでできること¶
GPIOを利用すると様々な機器と接続できる。
入力¶
- ボタン
- DIPスイッチ
- リミットスイッチ
- センサ出力
出力¶
- LED
- リレー
- MOSFET
- ブザー
InputとOutput¶
GPIOには大きく分けて2つのモードがある。
| モード | 説明 |
|---|---|
| Input | 入力 |
| Output | 出力 |
Inputモード¶
外部からの信号を読み取る。
例
ボタン
↓
GPIO
↓
STM32
状態を読むと
押されていない → 0
押された → 1
のように判定できる。
Outputモード¶
GPIOから信号を出力する。
例
STM32
↓
GPIO
↓
LED
状態
0 → 消灯
1 → 点灯
HighとLow¶
GPIOは基本的に2つの状態しか持たない。
High¶
3.3V
または
5V
Low¶
0V
STM32の場合は通常
High = 3.3V
Low = 0V
となる。
GPIO入力例¶
回路
3.3V
│
SW
│
GPIO
│
10kΩ
│
GND
状態
押していない → 0
押した → 1
GPIO出力例¶
回路
GPIO
│
330Ω
│
LED
│
GND
状態
GPIO = High
↓
LED点灯
GPIO番号¶
STM32では
PA0
PA1
PA2
のような名前が付いている。
意味
P = Port
A = Port A
0 = 0番ピン
例えば
PB7
なら
Port B の 7番ピン
となる。
GPIOの電流制限¶
GPIOは直接大電流を流せない。
例えばSTM32では
数mA〜数十mA程度
しか出力できない。
そのため
モータ
LEDテープ
ソレノイド
などは直接接続してはいけない。
代わりに
GPIO
↓
MOSFET
↓
負荷
のように接続する。
Pull-up / Pull-down¶
GPIO入力にはPull-upやPull-downがよく利用される。
Pull-up
通常 → High
押す → Low
Pull-down
通常 → Low
押す → High
入力を安定させるために必要である。
オープンドレイン¶
GPIOにはオープンドレインモードが存在する。
通常出力
High
Low
両方出力可能。
オープンドレイン
Lowのみ出力可能
I2C通信で利用される。
GPIO速度¶
STM32では出力速度を設定できる。
例
Low
Medium
High
Very High
LED程度なら
Low
で十分。
SPIなど高速通信では
High
Very High
が利用される。
GPIO割り込み¶
GPIOは入力変化を検出できる。
例
ボタン押下
↓
割り込み発生
↓
処理実行
ポーリングより効率的である。
ポーリングとの違い¶
ポーリング¶
while(1)
{
ボタン確認
}
CPU負荷が高い。
割り込み¶
ボタン押下
↓
自動通知
CPU負荷が少ない。
STM32での利用¶
CubeMXで簡単に設定できる。
例
PA0
GPIO_Input
または
PA5
GPIO_Output
コード例¶
出力をHighにする
HAL_GPIO_WritePin(
GPIOA,
GPIO_PIN_5,
GPIO_PIN_SET
);
出力をLowにする
HAL_GPIO_WritePin(
GPIOA,
GPIO_PIN_5,
GPIO_PIN_RESET
);
入力を読む
HAL_GPIO_ReadPin(
GPIOA,
GPIO_PIN_0
);
LED点滅例¶
while(1)
{
HAL_GPIO_TogglePin(
GPIOA,
GPIO_PIN_5
);
HAL_Delay(500);
}
結果
0.5秒点灯
0.5秒消灯
を繰り返す。
Asterでの利用例¶
ALEOではGPIOが大量に利用される。
DIPスイッチ¶
DIP SW
↓
GPIO入力
モータドライバ制御¶
GPIO
↓
DRV8871
LED表示¶
GPIO
↓
LED
割り込み入力¶
センサ
↓
GPIO
↓
Interrupt
よくあるトラブル¶
フローティング¶
Pull-upやPull-downが無い。
電流超過¶
GPIOから直接モータを駆動している。
ピン設定ミス¶
InputとOutputを逆にしている。
電圧超過¶
STM32へ5Vを直接入力している。
GPIOと他機能の関係¶
STM32のピンはGPIO以外にも利用できる。
例
GPIO
UART
SPI
I2C
ADC
PWM
そのため
PA9
をUARTに設定すると、
GPIOとしては利用できなくなる。
まとめ¶
GPIOはマイコンの最も基本的な機能である。
- 入力と出力ができる
- ボタンやLEDの制御に利用される
- Pull-up/Pull-downで入力を安定化する
- 割り込みに対応している
- STM32のほぼ全ての機能の基礎となる
組み込み開発では最初に学ぶべき重要な機能であり、UART、SPI、I2C、PWMなども最終的にはGPIOピンを利用して実現されている。