timers-pwm-baremetal について
timers-pwm-baremetalは、ベアメタル MCU のタイマー設定を扱うエージェント向けスキルです。PWM、入力キャプチャ、SysTickによる時刻基準を解説し、組み込みファームウェア開発者を対象としています。
主な機能
- 01タイマーのプリスケーラーと周期の設定
- 02PWMチャンネルとデューティ比の設定
- 03SysTickをティック源として使用
- 04入力キャプチャとエッジ検出の設定
活用シーン
- 01モーターやLEDの明るさ制御
- 02入力パルス幅の測定
- 03FreeRTOSなしでミリ秒計時を実装
- 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— タイマーピンの AFskills/embedded/freertos— SysTick を RTOS ティックに置き換えるskills/baremetal/adc-dac-baremetal— ADC トリガー用のタイマー TRGO
コメント
Markdown 対応