uart-serial-baremetal について
uart-serial-baremetalは、ボーレート計算、フレーミング、ポーリング、割り込み、DMAの基礎を扱う、ベアメタルUART/USART実装ガイドです。組み込み開発でのシリアル出力の立ち上げや通信の問題調査に役立ちます。
主な機能
- 01ボーレート計算
- 028N1フレーミング
- 03ポーリングによる送受信
- 04割り込み駆動のRXリングバッファー
- 05オーバーラン処理とDMAの基礎
- 06newlib printfのリターゲット
活用シーン
- 01新しいハードウェアでのログ出力
- 02シリアル経由でのセンサーやモジュール接続
- 03ブロッキング型HAL_UARTドライバーの置き換え
- 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 IRQskills/baremetal/dma-baremetal— UART RX DMAskills/embedded/openocd-jtag— semihosting の代替手段
コメント
Markdown 対応