file-type

STM32F4 TIM2+DMA PWM异常:解决32位计数器与DMA配置问题

PDF文件

下载需积分: 5 | 350KB | 更新于2024-08-03 | 200 浏览量 | 0 下载量 举报 收藏
download 立即下载
"该应用笔记主要讨论了在STM32微控制器中,使用TIM2结合DMA产生PWM波形时遇到的问题及其解决方案。客户在将从STM32F1移植的代码应用于STM32F4的TIM2时,发现PWM波形异常,而在TIM3上则正常工作。" 在STM32微控制器系列中,TIM2和TIM3常用于生成PWM信号,它们都支持DMA(直接存储器访问)来自动更新定时器的捕获/比较寄存器(CCR)。然而,STM32F4的TIM2具有32位计数器,而TIM3具有16位计数器。问题的核心在于,当客户使用halfword(16位)长度的DMA配置时,对于TIM2的32位计数器,这种配置并不适用。 在实验部分,使用了STM32F401RE-NUCLEO开发板,通过STM32CubeMX配置了TIM2和TIM3的相同参数,并使用DMA传输相同数据。实验结果显示,TIM2输出的PWM不正确,而TIM3的输出正常。进一步分析发现,TIM2的CCR1值可能超出ARR(自动重载寄存器)值,导致波形异常。 问题的根本原因在于,尽管TIM2的计数器为32位,但配置的DMA传输长度为halfword(16位),这在AHB总线上产生了问题。由于AHB总线不支持byte或half-word写传输,它会将数据强制转换为32位进行传输。因此,CCR1的高位和低位被设置为相同的值,导致PWM波形失真。 为了解决这个问题,应用笔记建议将TIM2的DMA配置更改为word(32位)长度,并相应地调整内存数组的大小。经过这样的修改,实验结果显示PWM波形恢复正常。 总结来说,当使用具有32位计数器的TIM模块(如STM32F4中的TIM2)并通过DMA生成PWM时,务必确保DMA配置与计数器宽度匹配,即使用32位传输长度。在STM32F1系列中,由于不存在32位计数器的定时器,客户在移植代码时可能未考虑到这个差异,从而导致在STM32F4上遇到问题。在进行跨平台的代码移植时,理解不同型号MCU的硬件特性至关重要,以避免类似问题的发生。

相关推荐