mcpField
T
timers-pwm-baremetal

timers-pwm-baremetal

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

timers-pwm-baremetal について

timers-pwm-baremetalは、ベアメタル MCU のタイマー設定を扱うエージェント向けスキルです。PWM、入力キャプチャ、SysTickによる時刻基準を解説し、組み込みファームウェア開発者を対象としています。

主な機能

  1. 01タイマーのプリスケーラーと周期の設定
  2. 02PWMチャンネルとデューティ比の設定
  3. 03SysTickをティック源として使用
  4. 04入力キャプチャとエッジ検出の設定

活用シーン

  1. 01モーターやLEDの明るさ制御
  2. 02入力パルス幅の測定
  3. 03FreeRTOSなしでミリ秒計時を実装
  4. 04タイマーによる周期サンプリング

インストール

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

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

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

詳細

タイマーと PWM(ベアメタル)

目的

PWM 出力、入力キャプチャ、周期スケジューリング用に MCU タイマーを設定します。プリスケーラーと ARR の設定、比較チャネル、およびシンプルなティックソースとしての SysTick を扱います。

使用する場面

  • PWM によるモーター/LED の調光
  • パルス幅の測定(入力キャプチャ)
  • FreeRTOS を使わないベアメタル環境での millis()
  • ハードウェアによる周期的なサンプリングのトリガー

ワークフロー

1. TIM2 CH1 の PWM(STM32)
f_pwm = f_timer_clk / ((PSC+1) * (ARR+1))
duty = (CCR / (ARR+1)) * 100%
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

TIM2->PSC  = 83;      /* 84MHz / 84 = 1 MHz tick */
TIM2->ARR  = 999;     /* 1 kHz PWM */
TIM2->CCR1 = 500;     /* 50% duty */
TIM2->CCMR1 |= (6U << TIM_CCMR1_OC1M_Pos);  /* PWM mode 1 */
TIM2->CCER  |= TIM_CCER_CC1E;
TIM2->CR1   |= TIM_CR1_CEN;

GPIO:PA0 AF1 TIM2_CH1。

2. SysTick ティック
volatile uint32_t tick_ms;

void SysTick_Handler(void) {
    tick_ms++;
}

void systick_init(uint32_t hz) {
    SysTick_Config(SystemCoreClock / hz);
}
3. 入力キャプチャ

CCMR でチャネルを入力として設定し、CCER で極性を設定します。エッジをキャプチャした割り込みで CCR を読み取ります。

4. エージェントの使用
/timers-pwm-baremetal 1 kHz 25% duty PWM on TIM2 channel 1

よくある問題

症状原因対処方法
周波数が正しくないAPB タイマーのクロックが 2 倍になるRM のタイマークロック x2 ルールを確認する
PWM 出力がないCCER/CCMR が有効になっていないチャネル出力を有効にする
ティックが不安定SysTick が上書きされているSysTick の所有者を 1 つにする

関連スキル

  • skills/baremetal/gpio-baremetal — タイマーピンの AF
  • skills/embedded/freertos — SysTick を RTOS ティックに置き換える
  • skills/baremetal/adc-dac-baremetal — ADC トリガー用のタイマー TRGO

コメント