關(guān)鍵字:回調(diào)函數(shù),HAL庫
目錄預覽
1.前言
2.實驗
3.使用實例
4.小結(jié)
01 前言
有客戶反饋,使用STM32F4的TIM2結(jié)合DMA,產(chǎn)生的PWM波形不符合預期,但是相同的配置使用在TIM3上,得到的PWM波形就是符合預期的。其代碼和配置都是從F1移植過來的,在F1上使用TIM2是沒有問題的,對于F4的TIM2發(fā)生的問題,客戶一直沒有找到根本原因。
02
實驗
根據(jù)客戶的反饋,我們進行了實驗。
硬件: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)生了非預期的結(jié)果。在調(diào)試界面我們也能看到,當問題發(fā)生時,TIM2的CCR1竟然比ARR的值要大,或者出現(xiàn)異常值,所以出現(xiàn)異常波形。
根本原因在于,對于大部分STM32系列,主設(shè)備基于AHB外設(shè)進行尋址是不支持byte/half-word傳輸?shù)模偩€會強制將數(shù)據(jù)轉(zhuǎn)化為32bit傳送到總線上,這就是為什么我們看到CCR1的高半字和低半字的值是相同的原因。
當我們將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)容請點擊“閱讀原文”下載原文檔。
原文標題:應用筆記 | STM32使用DMA產(chǎn)生PWM時波形異常分析
文章出處:【微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
單片機
+關(guān)注
關(guān)注
6040文章
44592瀏覽量
636893 -
PWM
+關(guān)注
關(guān)注
114文章
5195瀏覽量
214357 -
STM32
+關(guān)注
關(guān)注
2270文章
10915瀏覽量
356754
原文標題:應用筆記 | STM32使用DMA產(chǎn)生PWM時波形異常分析
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論