mcpField
U
uart-serial-baremetal

uart-serial-baremetal

github.com/mohitmishra786開発269308 回インストール18 週間前に更新
リポジトリ

uart-serial-baremetal について

uart-serial-baremetalは、ボーレート計算、フレーミング、ポーリング、割り込み、DMAの基礎を扱う、ベアメタルUART/USART実装ガイドです。組み込み開発でのシリアル出力の立ち上げや通信の問題調査に役立ちます。

主な機能

  1. 01ボーレート計算
  2. 028N1フレーミング
  3. 03ポーリングによる送受信
  4. 04割り込み駆動のRXリングバッファー
  5. 05オーバーラン処理とDMAの基礎
  6. 06newlib printfのリターゲット

活用シーン

  1. 01新しいハードウェアでのログ出力
  2. 02シリアル経由でのセンサーやモジュール接続
  3. 03ブロッキング型HAL_UARTドライバーの置き換え
  4. 04文字化けや文字欠落の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill uart-serial-baremetal

インストール後、Claude Code で/uart-serial-baremetalを入力して読み込まれたか確認します。

詳細

UART シリアル(ベアメタル)

目的

デバッグコンソールやデバイス通信向けに UART/USART を実装します。ボーレートの計算、8N1 フレーミング、ポーリングと割り込み駆動の I/O、オーバーラン処理、オプションの DMA の基礎を扱います。

使用する場面

  • 新しいハードウェアで最初の printf/ログ出力を行うとき
  • センサー/モジュールとのシリアルプロトコル通信
  • ブロッキング方式の HAL_UART を最小限のドライバーに置き換えるとき
  • 文字化けや文字の欠落を解消するとき

ワークフロー

1. ボーレート(STM32)
BRR = pclk / (16 * baud)   /* oversampling by 16 — check RM for USART */
void usart2_init(uint32_t pclk, uint32_t baud) {
    RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
    /* GPIO PA2/PA3 AF — see gpio-baremetal */

    USART2->BRR = pclk / baud;  /* simplified — RM has fractional formula */
    USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
}

実際のクロックツリー(SystemCoreClock、APB プリスケーラー)から pclk を確認します。

2. ポーリング TX/RX
void uart_putc(USART_TypeDef *u, char c) {
    while (!(u->SR & USART_SR_TXE))
        ;
    u->DR = (uint8_t)c;
}

char uart_getc(USART_TypeDef *u) {
    while (!(u->SR & USART_SR_RXNE))
        ;
    return (uint8_t)u->DR;
}
3. 割り込み駆動の RX リングバッファー
void USART2_IRQHandler(void) {
    if (USART2->SR & USART_SR_RXNE) {
        uint8_t b = USART2->DR;
        rb_push(&rx_rb, b);
    }
    if (USART2->SR & USART_SR_ORE) {
        (void)USART2->DR;  /* clear overrun — required on STM32 */
    }
}
4. printf のリターゲット(newlib)
int _write(int fd, char *ptr, int len) {
    (void)fd;
    for (int i = 0; i < len; i++)
        uart_putc(USART2, ptr[i]);
    return len;
}

--specs=nosys.specs とリンクするか、システムコールをすべて用意してください。

5. エージェントの使用方法
/uart-serial-baremetal Calculate USART BRR for 115200 at 84 MHz PCLK

よくある問題

症状原因対処方法
文字化けボーレート/PCLK が不正BRR を再計算し、APB ディバイダーを確認
バイトの欠落ORE がクリアされていないORE 発生時に DR を読み取り、IRQ とリングバッファーを使用
出力がないTX ピンが AF に設定されていないGPIO の代替機能を設定
printf が停止する_write がないリターゲットを実装

関連スキル

  • skills/baremetal/gpio-baremetal — TX/RX ピンの多重化
  • skills/baremetal/interrupts-and-exceptions-baremetal — USART IRQ
  • skills/baremetal/dma-baremetal — UART RX DMA
  • skills/embedded/openocd-jtag — semihosting の代替手段

コメント