在實際產(chǎn)品開發(fā)中有時可能需要實現(xiàn)一些指定個數(shù)脈沖的輸出,這里介紹幾種基于定時器的實現(xiàn)方式。
1、 利用RCR寄存器結(jié)合單脈沖模式;
2、 利用DMA實時修改CCR寄存器的模式;
3、 利用定時器主從模式;
4、 利用中斷對脈沖實現(xiàn)計數(shù)模式;
一、利用RCR結(jié)合單脈沖模式
這種方式僅限于帶RCR寄存器的高級定時器,配合單脈沖模式,實現(xiàn)起來非常方便。
基本原理:計數(shù)器發(fā)生RCR+1個溢出動作后觸發(fā)更新事件,在單脈沖模式下,定時器發(fā)生更新事件時將停止計數(shù)并實現(xiàn)指定個數(shù)的脈沖輸出。
參考配置:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);//TIM1通道1輸出一串脈沖。
二、利用DMA實時修改CCR寄存器的模式;
基本原理:基于定時器事件觸發(fā)DMA從而動態(tài)修改CCR寄存器的值最終實現(xiàn)指定個數(shù)的脈沖輸出。
下面示例使用定時器更新事件觸發(fā)DMA,輸出10個脈寬各不一樣的脈沖.
uint16_tDataforCCr[]={25,43,18,65,27,44,66,38,76,11,00};
參考配置:
TIM_CCxChannelCmd(htim3.Instance, TIM_CHANNEL_1,TIM_CCx_ENABLE);
__HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);
__HAL_TIM_ENABLE_DMA(&htim3, TIM_DMA_UPDATE);
HAL_DMA_Start(&hdma_tim3_up,(uint32_t)DataforCCr, (uint32_t)&htim3.Instance->CCR1, 11);
__HAL_TIM_ENABLE(&htim3);
TIM3->EGR = TIM_EGR_UG;
眼尖的人可能發(fā)現(xiàn)上圖中最后有個額外的尖脈沖,那是因為這里是基于更新事件觸發(fā)DMA,DMA傳輸新數(shù)據(jù)過來時有點延遲導(dǎo)致下一個PWM脈沖已經(jīng)發(fā)生作用。這時,我們可以調(diào)整觸發(fā)事件,比方這里將觸發(fā)事件調(diào)整為比較事件,并開啟預(yù)裝功能即可以消除這個問題。上面測試過程是關(guān)閉了CCR寄存器的預(yù)裝功能的。
該方式可以做到非常靈活精準(zhǔn),但要多用個DMA外設(shè)。
三、利用定時器主從模式
基本原理:利用兩個定時器級聯(lián)成主從模式,一個定時器輸出門控信號,控制另外一個定時器的計數(shù)工作。
下面TIM4工作在主模式,其OC輸出作為觸發(fā)信號給到TIM8,TIM8工作在門控模式。
TIM_CCxChannelCmd(htim4.Instance, TIM_CHANNEL_1,TIM_CCx_ENABLE);
__HAL_TIM_ENABLE(&htim4);
TIM_CCxChannelCmd(htim8.Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);
__HAL_TIM_MOE_ENABLE(&htim8);
__HAL_TIM_ENABLE(&htim8);
此模式實現(xiàn)起來簡單快捷,但當(dāng)門控信號時鐘與從定時器時鐘缺乏同步關(guān)系時,輸出脈沖個數(shù)可能有偏差,尤其結(jié)尾的電平可能搖擺不定。
四、利用定時器中斷模式
基本原理:基于定時器更新事件或比較事件對脈沖個數(shù)進行實時計數(shù),到達指
定數(shù)據(jù)后通過修改CCR或ARR寄存器的值來停止后續(xù)PWM的輸出。具體操
作需結(jié)合PWM輸出模式和最后希望停止輸出時的電平來對CCR進行賦值。
比如:輸出10個脈沖,最后電平停留在高電平。我們可以基于比較事件來對脈沖進行,并開啟CCR寄存器的預(yù)裝功能。若選用PWM1模式,極性選擇為高有效,向上計數(shù)模式時,則在第10個比較中斷里修改CCR=ARR+n[n大于等于1];若選用PWM2模式,極性選擇為高有效,則在第10個比較中斷里修改CCR=00。
該模式實現(xiàn)起來較為簡單,只需對定時器有些基本的了解即可,無需涉及定時器更多知識及DMA方面的應(yīng)用等。
上面大體介紹了利用STM32定時器實現(xiàn)指定個數(shù)脈沖輸出的四種模式,各有特色,供君參考。我們實際應(yīng)用中可以靈活采用。
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120365 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
356010 -
定時器
+關(guān)注
關(guān)注
23文章
3248瀏覽量
114800 -
脈沖輸出
+關(guān)注
關(guān)注
0文章
18瀏覽量
10770
原文標(biāo)題:使用定時器輸出指定個數(shù)脈沖的幾種方式
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論