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