前言
有客戶反饋,使用 STM32F4 的 TIM2 結(jié)合 DMA,產(chǎn)生的 PWM 波形不符合預(yù)期,但是相同的配置使用在 TIM3 上,得到的 PWM 波形就是符合預(yù)期的。其代碼和配置都是從 F1 移植過來的,在 F1 上使用 TIM2 是沒有問題的,對于 F4 的 TIM2 發(fā)生的問題,客戶一直沒有找到根本原因。
實驗
根據(jù)客戶的反饋,我們進行了實驗。
硬件:STM32F401RE-NUCLEO
在 STM32CubeMX 中,將 TIM2 和 TIM3 所有參數(shù)均做相同的配置,其中配置 DMA 兩端均為 halfword 長度。
分析
我們的實驗中,TIM2 和 TIM3 的配置是完全一樣的,即使傳輸相同的數(shù)據(jù),得到的 PWM 波形也是不同的。為此我們比較了 TIM2 和 TIM3 的硬件屬性,可以很容易查看出,TIM2 的計數(shù)器是 32bit 的,而 TIM3 的計數(shù)器是 16bit 的。
我想我們已經(jīng)知道答案了,TIM2 的計數(shù)器是 32bit 的,但是我們配置的 DMA 是 halfword 長度,這在 AHB 總線上解析數(shù)據(jù)時產(chǎn)生了非預(yù)期的結(jié)果。在調(diào)試界面我們也能看到,當問題發(fā)生時,TIM2 的 CCR1 竟然比 ARR 的值要大,或者出現(xiàn)異常值,所以出現(xiàn)異常波形。
小結(jié)
對于 32 位計數(shù)器的 Timer,我們在使用 DMA 時,需要將 DMA 的長度配置為 32bit。因為 F103 上沒有 32bit 計數(shù)器的 Timer,所以客戶在 F103 上并沒有出現(xiàn)類似的問題,歸根結(jié)底,我們要學會類似查找問題的方法。