關(guān)鍵字:回調(diào)函數(shù),HAL庫
目錄預(yù)覽
1.前言
2.實驗
3.使用實例
4.小結(jié)
01 前言
有客戶反饋,使用STM32F4的TIM2結(jié)合DMA,產(chǎn)生的PWM波形不符合預(yù)期,但是相同的配置使用在TIM3上,得到的PWM波形就是符合預(yù)期的。其代碼和配置都是從F1移植過來的,在F1上使用TIM2是沒有問題的,對于F4的TIM2發(fā)生的問題,客戶一直沒有找到根本原因。
02
實驗
根據(jù)客戶的反饋,我們進(jìn)行了實驗。
硬件:STM32F401RE-NUCLEO
在STM32CubeMX中,將TIM2和TIM3所有參數(shù)均做相同的配置,其中配置DMA兩端均為halfword長度。
生成代碼,并定義兩個數(shù)組如下圖所示:
在主函數(shù)中開啟Timer。
我們可以發(fā)現(xiàn),實驗結(jié)果如客戶反饋的,TIM2輸出的PWM是不正確的,TIM3輸出的PWM是正確的。
03 分析
我們的實驗中,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)試界面我們也能看到,當(dāng)問題發(fā)生時,TIM2的CCR1竟然比ARR的值要大,或者出現(xiàn)異常值,所以出現(xiàn)異常波形。
根本原因在于,對于大部分STM32系列,主設(shè)備基于AHB外設(shè)進(jìn)行尋址是不支持byte/half-word傳輸?shù)?,總線會強(qiáng)制將數(shù)據(jù)轉(zhuǎn)化為32bit傳送到總線上,這就是為什么我們看到CCR1的高半字和低半字的值是相同的原因。
當(dāng)我們將TIM2的DMA外設(shè)端修改為word長度,并將內(nèi)存數(shù)組定義為32bit,再次實驗,可以發(fā)現(xiàn)PWM的波形就是正常的了:
04 小結(jié)
因為F103上沒有32bit計數(shù)器的Timer,所以客戶在F103上并沒有出現(xiàn)類似的問題。在使用DMA訪問經(jīng)過AHB轉(zhuǎn)APB的橋接外設(shè)時,我們要注意DMA對外設(shè)的訪問寬度配置問題。
完整內(nèi)容請點(diǎn)擊“閱讀原文”下載原文檔。
原文標(biāo)題:應(yīng)用筆記 | STM32使用DMA產(chǎn)生PWM時波形異常分析
文章出處:【微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44960瀏覽量
648775 -
PWM
+關(guān)注
關(guān)注
116文章
5450瀏覽量
218730 -
STM32
+關(guān)注
關(guān)注
2291文章
11022瀏覽量
363417
原文標(biāo)題:應(yīng)用筆記 | STM32使用DMA產(chǎn)生PWM時波形異常分析
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
STM32多通道FFT運(yùn)算異常的原因?怎么解決?
GPDV6624C應(yīng)用筆記1.0版
搞SK6812燈珠的控制,選擇了PWM+DMA的方式,遇到的問題求解決
STM32使用外部中斷觸發(fā)ADC采樣DMA搬運(yùn)出現(xiàn)兩次進(jìn)入DMA中斷的異常情況,怎么解決?
ES32VF2264應(yīng)用筆記

AT32F423 PWC應(yīng)用筆記

評論