關(guān)鍵字:回調(diào)函數(shù),HAL庫(kù)
目錄預(yù)覽
1.前言
2.實(shí)驗(yàn)
3.使用實(shí)例
4.小結(jié)
01 前言
有客戶反饋,使用STM32F4的TIM2結(jié)合DMA,產(chǎn)生的PWM波形不符合預(yù)期,但是相同的配置使用在TIM3上,得到的PWM波形就是符合預(yù)期的。其代碼和配置都是從F1移植過來的,在F1上使用TIM2是沒有問題的,對(duì)于F4的TIM2發(fā)生的問題,客戶一直沒有找到根本原因。
02
實(shí)驗(yàn)
根據(jù)客戶的反饋,我們進(jìn)行了實(shí)驗(yàn)。
硬件:STM32F401RE-NUCLEO
在STM32CubeMX中,將TIM2和TIM3所有參數(shù)均做相同的配置,其中配置DMA兩端均為halfword長(zhǎng)度。
生成代碼,并定義兩個(gè)數(shù)組如下圖所示:
在主函數(shù)中開啟Timer。
我們可以發(fā)現(xiàn),實(shí)驗(yàn)結(jié)果如客戶反饋的,TIM2輸出的PWM是不正確的,TIM3輸出的PWM是正確的。
03 分析
我們的實(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)問題發(fā)生時(shí),TIM2的CCR1竟然比ARR的值要大,或者出現(xiàn)異常值,所以出現(xiàn)異常波形。
根本原因在于,對(duì)于大部分STM32系列,主設(shè)備基于AHB外設(shè)進(jìn)行尋址是不支持byte/half-word傳輸?shù)模偩€會(huì)強(qiáng)制將數(shù)據(jù)轉(zhuǎn)化為32bit傳送到總線上,這就是為什么我們看到CCR1的高半字和低半字的值是相同的原因。
當(dāng)我們將TIM2的DMA外設(shè)端修改為word長(zhǎng)度,并將內(nèi)存數(shù)組定義為32bit,再次實(shí)驗(yàn),可以發(fā)現(xiàn)PWM的波形就是正常的了:
04 小結(jié)
因?yàn)镕103上沒有32bit計(jì)數(shù)器的Timer,所以客戶在F103上并沒有出現(xiàn)類似的問題。在使用DMA訪問經(jīng)過AHB轉(zhuǎn)APB的橋接外設(shè)時(shí),我們要注意DMA對(duì)外設(shè)的訪問寬度配置問題。
完整內(nèi)容請(qǐng)點(diǎn)擊“閱讀原文”下載原文檔。
原文標(biāo)題:應(yīng)用筆記 | STM32使用DMA產(chǎn)生PWM時(shí)波形異常分析
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
單片機(jī)
+關(guān)注
關(guān)注
6023文章
44378瀏覽量
628606 -
PWM
+關(guān)注
關(guān)注
114文章
5059瀏覽量
212258 -
STM32
+關(guān)注
關(guān)注
2258文章
10828瀏覽量
352546
原文標(biāo)題:應(yīng)用筆記 | STM32使用DMA產(chǎn)生PWM時(shí)波形異常分析
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論