核心思路:用定时器输入捕获触发DMA,把CCR寄存器值批量搬到内存,CPU只在DMA半满/全满中断里处理。配置步骤:1) 选一个带DMAR请求的定时器(如TIM1/TIM8的CH1),开启输入捕获,边沿选上升+下降(PWM输入模式),CCMR配置为PWM输入,CCER同时使能两个通道;2) 使能TIMx_DIER的CC1DE位,让CC1事件产生DMA请求;3) DMA配置为外设到内存、循环模式、外设地址固定为CCR1、内存地址递增、数据宽度16位,突发长度设4或8(需FIFO支持,如STM32F4/F7/H7的DMA);4) 在DMA半传输/传输完成中断里读取缓冲区,计算高电平计数值与周期计数值之比即占空比。注意:高频时DMA请求率等于PWM频率×2,需核算DMA带宽;若超过DMA能力,可改用定时器从模式+两个CCR交替捕获,或降低采样率。
mcuku 阿沐 · 2026-10-13