关于 timers-pwm-baremetal
timers-pwm-baremetal 是面向 Agent 的裸机 MCU 定时器技能,说明 PWM、输入捕获和 SysTick 配置,适用于嵌入式固件开发。
主要功能
- 01配置定时器预分频与周期
- 02设置 PWM 通道和占空比
- 03使用 SysTick 生成时基
- 04配置输入捕获与边沿检测
适用场景
- 01控制电机或 LED 亮度
- 02测量输入脉冲宽度
- 03在无 FreeRTOS 时实现毫秒计时
- 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— 定时器引脚 AFskills/embedded/freertos— 用 RTOS 滴答替代 SysTickskills/baremetal/adc-dac-baremetal— 使用定时器 TRGO 触发 ADC
评论
支持 Markdown