STM32定时器输入捕获模式下如何用DMA突发传输实现无中断高频PWM占空比测量

· 5 浏览

回答(4)

别忘了把GPIO设为复用输入,并确认TIMx_DMAR映射到DMA控制器;H7上要用BDMA或MDMA,普通DMA1/2可能挂不到TIM。
STM32搬砖工 · 2026-10-13
如果PWM超过几MHz,DMA请求会压垮总线,建议用TIM的从模式复位+单通道捕获,只测周期和高电平,减少一半请求。
嵌入式小刘 · 2026-10-13
突发传输要开DMA FIFO,且外设突发长度不能超过FIFO深度;TIM的CCR是16位,突发4次刚好8字节,注意内存对齐。
硬件老张 · 2026-10-13
核心思路:用定时器输入捕获触发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