gpio-baremetal について
gpio-baremetalは、HALを使わないGPIO設定を案内するガイドです。ピンモード、代替機能、プル抵抗、割り込みを扱い、STM32、nRF52、ESP32の例を含みます。
主な機能
- 01入力と出力の設定
- 02代替機能のピン割り当て
- 03プルアップとプルダウンの設定
- 04ピン変化割り込みの設定
- 05STM32、nRF52、ESP32の例
活用シーン
- 01LEDの点灯やボタン入力
- 02USARTまたはSPIへのピン割り当て
- 03エッジトリガーのEXTI割り込み設定
- 04ベンダー間でのGPIOコード移植
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill gpio-baremetalインストール後、Claude Code で/gpio-baremetalを入力して読み込まれたか確認します。
詳細
GPIO(ベアメタル)
目的
HAL を使わずに GPIO を設定して使用します。入力/出力モード、代替機能のマッピング、プルアップ/プルダウン、速度/スルーレート、LED、ボタン、周辺機器のピンマルチプレクサー向けのピン変化割り込みを扱います。
使用する場面
- UART/SPI を起動する前に LED を点滅させたり、ボタンの状態を読み取ったりする
- ピンを USART/SPI の代替機能に割り当てる
- ピンのエッジで EXTI ライン割り込みを発生させる
- ベンダー間で GPIO コードを移植する
ワークフロー
1. STM32 の GPIO パターン
/* Enable GPIOA clock */
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
/* PA5 output — MODER[11:10] = 01 */
GPIOA->MODER &= ~(3U << (5 * 2));
GPIOA->MODER |= (1U << (5 * 2));
/* Toggle via BSRR — atomic set/reset */
GPIOA->BSRR = (1U << 5); /* set */
GPIOA->BSRR = (1U << (5+16)); /* reset */
代替機能(例:PA2 の USART2 TX):
GPIOA->MODER &= ~(3U << (2*2));
GPIOA->MODER |= (2U << (2*2)); /* AF mode */
GPIOA->AFR[0] &= ~(0xFU << (2*4));
GPIOA->AFR[0] |= (7U << (2*4)); /* AF7 = USART2 */
2. プルアップ付き入力
/* PC13 input, pull-up */
GPIOC->MODER &= ~(3U << (13*2)); /* input mode 00 */
GPIOC->PUPDR &= ~(3U << (13*2));
GPIOC->PUPDR |= (1U << (13*2)); /* pull-up */
int pressed = !(GPIOC->IDR & (1U << 13)); /* active low */
3. EXTI 割り込み(STM32)
/* SYSCFG: map EXTI13 to PC13 */
SYSCFG->EXTICR[3] = (SYSCFG->EXTICR[3] & ~0xFU) | 0x2; /* port C */
EXTI->IMR |= (1U << 13);
EXTI->FTSR |= (1U << 13); /* falling edge */
NVIC_EnableIRQ(EXTI15_10_IRQn);
ISR:EXTI->PR を確認し、1 の書き込みでクリアします。
4. nRF52/ESP32 に関する注意事項
| プラットフォーム | パターン |
|---|---|
| nRF52 | NRF_P0->PIN_CNF[n] — 方向、プル、ドライブ |
| ESP32 | GPIO.out_w1ts、GPIO.enable;機能には IO_MUX を使用 |
ピンを設定する前に、必ず周辺機器のクロック/電源ドメインを有効にしてください。
5. エージェントの使用方法
/gpio-baremetal Configure PA2 as USART2 TX alternate function on STM32F4
よくある問題
| 症状 | 原因 | 対処方法 |
|---|---|---|
| ピンの状態が固定される | MODER の設定が誤っている/AF ではない | RM のピンテーブルを再確認する |
| EXTI が連続発生する | デバウンスがない/入力がフローティング状態 | プルを有効にし、ソフトウェアでデバウンスする |
| AF の不一致 | AFR のニブルが誤っている | RM のピンごとの AF テーブルを確認する |
| トグルが見えない | ポートビットが誤っている/LED がアクティブ Low | 回路図を確認する |
関連スキル
skills/baremetal/mmio-and-bit-manipulation— BSRR/MODER マスクskills/baremetal/peripherals-from-datasheet— RM のピン配置テーブルskills/baremetal/uart-serial-baremetal— シリアル用 AF マルチプレクサー
コメント
Markdown 対応