在STMCU中文社區(qū)有人咨詢了類似下面的應用問題,有部分需求如下:
1.發(fā)送12個周期為500ns的脈沖(高電平200ns,低電平300ns),每隔4us發(fā)送一次,共計三次(36個脈沖,每12個脈沖之間間隔4us)。
2.在第一步中的每段12個脈沖的上升沿時,訪問GPIO口,共計12個,三次共計36個。相關時序圖如下:

這里,我們就該問題的部分需求聊聊它的大致實現(xiàn)。先整理下需求:
連續(xù)三組12個周期為500ns的指定個數(shù)的小脈沖;
一個固定時間間隔10us(含12個脈沖本身的時間);
每個小脈沖對應1次GPIO的訪問;
顯然,我們一般會很自然地想到通過TIMER來完成,可以使用1個TIMER,也可以通過2個TIMER來完成。
如果使用1個TIMER,我們可以考慮使用更新事件對脈沖個數(shù)的統(tǒng)計及時間間隔的控制,同時基于比較事件或更新事件來觸發(fā)DMA來實行對GPIO的訪問。不過,這里每個脈沖周期為500ns,勢必會發(fā)生頻繁進入更新中斷。
如果使用2個TIMER來實現(xiàn)起來就更為方便點。2個TIMER實現(xiàn)主從級聯(lián),各自任務如下安排:
主TIMER做時間間隔的控制,每10us產(chǎn)生一次觸發(fā)事件,并開啟更新事件中斷,每發(fā)生3次更新事件即為一個大周期,后續(xù)啟動根據(jù)其它條件定,此處不表。
從ITMER工作在觸發(fā)從模式,同時選擇它的某一通道做PWM輸出,并工作在單脈沖模式,同時每個脈沖的比較事件觸發(fā)一次DMA實現(xiàn)GPIO與內(nèi)存間的傳輸。
基于上面的需求及規(guī)劃,下面簡單介紹下實現(xiàn)過程。我們選用STM32G4系列的Nucleo板【Nucleo-G431RB】來進行驗證測試。
選擇TIM1工作在從模式,輸出脈沖的比較事件觸發(fā)DMA完成對GPIO的訪問。DMA每傳輸12個數(shù)據(jù)后進入DMA傳輸完成中斷,并進行相關數(shù)據(jù)處理。令TIM3工作在主模式,它的計時周期為10us,每個周期產(chǎn)生一次更新事件作為觸發(fā)輸出并與TIM1的觸發(fā)輸入相連,作為TIM1的啟動觸發(fā)信號。
通過查看STM32G4系列參考手冊,我們可以得到如下片內(nèi)定時器互聯(lián)信號表。TIM3的TRGO信號可以作為TIM1的觸發(fā)輸入通道2的輸入信號。

下面我們使用CubeMx進行配置。先看TIM1的相關配置【定時器計數(shù)時鐘為10MHz】:



再看看看TIM3的基本配置:

完成相關初始化配置后創(chuàng)建工程,然后添加必要的用戶代碼。代碼很簡單,開啟TIM1通道的pwm輸出,使能TIM1-ch1比較事件的DMA觸發(fā)功能,調(diào)用相關DMA功能函數(shù),啟動TIM3的計數(shù)器。

其中,TIM_DMAcptPro()為DMA傳輸完成中斷的回調(diào)函數(shù),負責做相關數(shù)據(jù)的處理。TIM1的啟動靠TIM3的更新事件來觸發(fā)實現(xiàn)。
稍作編譯調(diào)試即可看到如下結果:
黃色的信號為TIM1周期的脈沖輸出,小脈沖間的間隔為4us.
藍色信號為通過DMA寫到GPIO的數(shù)據(jù),高、低電平均代表一個數(shù)據(jù)。這些只是模擬下操作過程。
顯然,當弄清實現(xiàn)原理后,基于CubeMx進行配置,整個過程實現(xiàn)起來還是比較簡單的。這里需要我們對定時器的主從級聯(lián)、定時器各類事件、比較輸出的單脈沖模式的特性及對DMA運用有些了解。上面主要演示基于定時器主從模式的實現(xiàn)過程,更多細節(jié)還得閱讀相關技術手冊。
最后提醒個地方,現(xiàn)在是TIM3的更新事件去觸發(fā)啟動TIM1,顯然第一次啟動TIM1時需等待TIM3一個計數(shù)周期,如果不希望這樣的話,我們也可以在TIM3啟動的同時啟動TIM1計數(shù),只需在啟動TIM3的同時手動產(chǎn)生個更新事件來實現(xiàn)。
編輯:jq
-
定時器
+關注
關注
23文章
3368瀏覽量
123657 -
dma
+關注
關注
3文章
582瀏覽量
105935 -
代碼
+關注
關注
30文章
4968瀏覽量
73989 -
GPIO
+關注
關注
16文章
1328瀏覽量
56231
原文標題:STM32定時器主從級聯(lián)的又一應用示例
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
LM555QML定時器:功能特性、應用及設計要點
深入解析 LM555 定時器:特性、應用與設計要點
LAT1173高精度定時器的同步功能應用筆記
LAT1183+高精度定時器中 single-shot 計數(shù)模式不工作應用筆記
CW32F030是32位的MCU為什么不提供32位的定時器?
CW32L010+定時器介紹
PWM、定時器、SysTick 區(qū)別及應用場景
SysTick系統(tǒng)滴答定時器簡介
定時器同步之并行模式
用STM32H750定時器抓最高30M信息源,定時器能不能配置成100M?
stm32H743定時器溢出的原因?怎么解決?
第十二章 SysTick——系統(tǒng)定時器
STM32定時器主從級聯(lián)的應用示例分享
評論