關鍵字:回調函數,HAL庫
目錄預覽
1.前言
2.實驗
3.使用實例
4.小結
01 前言
有客戶反饋,使用STM32F4的TIM2結合DMA,產生的PWM波形不符合預期,但是相同的配置使用在TIM3上,得到的PWM波形就是符合預期的。其代碼和配置都是從F1移植過來的,在F1上使用TIM2是沒有問題的,對于F4的TIM2發生的問題,客戶一直沒有找到根本原因。
02
實驗
根據客戶的反饋,我們進行了實驗。
硬件:STM32F401RE-NUCLEO
在STM32CubeMX中,將TIM2和TIM3所有參數均做相同的配置,其中配置DMA兩端均為halfword長度。
生成代碼,并定義兩個數組如下圖所示:
在主函數中開啟Timer。
我們可以發現,實驗結果如客戶反饋的,TIM2輸出的PWM是不正確的,TIM3輸出的PWM是正確的。
03 分析
我們的實驗中,TIM2和TIM3的配置是完全一樣的,即使傳輸相同的數據,得到的PWM波形也是不同的。為此我們比較了TIM2和TIM3的硬件屬性,可以很容易查看出,TIM2的計數器是32bit的,而TIM3的計數器是16bit的。
我想我們已經知道答案了,TIM2的計數器是32bit的,但是我們配置的DMA是halfword長度,這在AHB總線上解析數據時產生了非預期的結果。在調試界面我們也能看到,當問題發生時,TIM2的CCR1竟然比ARR的值要大,或者出現異常值,所以出現異常波形。
根本原因在于,對于大部分STM32系列,主設備基于AHB外設進行尋址是不支持byte/half-word傳輸的,總線會強制將數據轉化為32bit傳送到總線上,這就是為什么我們看到CCR1的高半字和低半字的值是相同的原因。
當我們將TIM2的DMA外設端修改為word長度,并將內存數組定義為32bit,再次實驗,可以發現PWM的波形就是正常的了:
04 小結
因為F103上沒有32bit計數器的Timer,所以客戶在F103上并沒有出現類似的問題。在使用DMA訪問經過AHB轉APB的橋接外設時,我們要注意DMA對外設的訪問寬度配置問題。
完整內容請點擊“閱讀原文”下載原文檔。
原文標題:應用筆記 | STM32使用DMA產生PWM時波形異常分析
文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
-
單片機
+關注
關注
6043文章
44617瀏覽量
638197 -
PWM
+關注
關注
114文章
5197瀏覽量
214751 -
STM32
+關注
關注
2272文章
10923瀏覽量
357404
原文標題:應用筆記 | STM32使用DMA產生PWM時波形異常分析
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論