mcpField
T
timers-pwm-baremetal

timers-pwm-baremetal

github.com/mohitmishra786开发269290 次安装18 周前更新
代码仓库

关于 timers-pwm-baremetal

timers-pwm-baremetal 是面向 Agent 的裸机 MCU 定时器技能,说明 PWM、输入捕获和 SysTick 配置,适用于嵌入式固件开发。

主要功能

  1. 01配置定时器预分频与周期
  2. 02设置 PWM 通道和占空比
  3. 03使用 SysTick 生成时基
  4. 04配置输入捕获与边沿检测

适用场景

  1. 01控制电机或 LED 亮度
  2. 02测量输入脉冲宽度
  3. 03在无 FreeRTOS 时实现毫秒计时
  4. 04用定时器触发周期采样

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/timers-pwm-baremetal确认已加载。

详细介绍

定时器与 PWM(裸机)

用途

配置 MCU 定时器以输出 PWM、捕获输入信号并进行周期调度:设置预分频器和 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. Agent 用法
/timers-pwm-baremetal 1 kHz 25% duty PWM on TIM2 channel 1

常见问题

症状原因解决方法
频率错误APB 定时器时钟翻倍检查 RM 中定时器时钟 x2 规则
无 PWM 输出未启用 CCER/CCMR启用通道输出
滴答抖动SysTick 被覆盖为 SysTick 指定唯一所有者

相关技能

  • skills/baremetal/gpio-baremetal — 定时器引脚 AF
  • skills/embedded/freertos — 用 RTOS 滴答替代 SysTick
  • skills/baremetal/adc-dac-baremetal — 使用定时器 TRGO 触发 ADC

评论

支持 Markdown