引言
MindSDK為MM32使用星辰處理器內(nèi)核的系列微控制器,實現(xiàn)了一組TIM樣例工程,MindSDK中的TIM模塊對應(yīng)硬件定時器TIM外設(shè)。本文通過講解TIM模塊的樣例工程,介紹TIM模塊的功能和用法。關(guān)于TIM模塊對應(yīng)的驅(qū)動程序,以及TIM外設(shè)模塊硬件的實現(xiàn)細節(jié),可具體查閱MindSDK工程的源文件,以及MM32微控制器(例如MM32F5270)的用戶手冊。
樣例工程
MindSDK中為TIM驅(qū)動設(shè)計的樣例工程包括:
tim_basic
tim_one_time_run
tim_output_compare_pwm
tim_input_capture
tim_external_trigger_input
tim_slave_mode
tim_slave_mode_encoder
tim_comp_output_compare_pwm
其中,tim_basic、tim_one_time_run、tim_output_compare_pwm、tim_input_capture和tim_external_trigger_input分別演示了定時器最典型的功能,包括定時、輸出比較、輸入捕捉,以及對外部脈沖進行計數(shù)等。另外,還有一些不大典型,用在特殊應(yīng)用場景的功能,例如,使用“從機”模式干預(yù)常規(guī)的定時器計數(shù),通過硬件實現(xiàn)互補的PWM輸出(常用于電機控制應(yīng)用中控制驅(qū)動橋)。
tim_basic
tim_basic描述了使用TIM模塊最基本的方式,周期定時器。在樣例工程中,通過TIM_Init()函數(shù),配置一個選定的TIM外設(shè)模塊的計數(shù)引擎,為連續(xù)計數(shù)模式TIM_PeriodMode_Continuous,并指定計數(shù)周期為APP_TIM_UPDATE_PERIOD。然后,啟用選定TIM外設(shè)模塊對應(yīng)的NVIC中斷。最后,通過調(diào)用TIM_Start()驅(qū)動函數(shù),啟動定時器開始計數(shù)。
每當定時器計數(shù)到達預(yù)設(shè)的計數(shù)周期值后,計數(shù)值折返為0,重新開始計數(shù)。同時,TIM會觸發(fā)NVIC中斷,tim_basic樣例工程中為TIM中斷實現(xiàn)的服務(wù)程序中,實現(xiàn)了通過串口發(fā)送字符*的操作。
最終程序運行時,可以在PC機上的串口通信終端看到以指定周期輸出的字符*,驗證定時器中斷被周期觸發(fā)。
tim_one_time_run
tim_one_time_run相對于tim_basic樣例工程實現(xiàn)周期觸發(fā)定時器中斷服務(wù),實現(xiàn)了每次啟動定時器后,僅觸發(fā)一次中斷的用法。
其實現(xiàn)原理,是在tim_basic配置定時器周期運行的基礎(chǔ)之上,修改初始化配置.PeriodMode的值為TIM_PeriodMode_OneTimeRun。之后,每次通過TIM_Start()函數(shù)啟動定時器后,定時器僅計數(shù)一個周期后,觸發(fā)中斷,然后停止計數(shù)。
實際運行程序時,用戶在串口調(diào)試終端中每次輸入任意字符,程序均會調(diào)用一次TIM_Start()函數(shù),延時指定計數(shù)周期后,在定時器中斷服務(wù)程序中打印字符*到串口終端界面。
tim_output_compare_pwm
tim_output_compare_pwm實現(xiàn)的是一個通過輸出比較功能產(chǎn)生PWM輸出信號的樣例工程。
其實現(xiàn)原理,是在tim_basic基礎(chǔ)之上,額外通過驅(qū)動函數(shù)TIM_EnableOutputCompare(),啟動并配置給定通道BOARD_TIM_CHANNEL為輸出比較功能。其中,指定通道的配置屬性.PinPolarity的值為TIM_PinPolarity_Rising,.RefOutMode值為TIM_OutputCompareRefOut_FallingEdgeOnMatch,設(shè)定同通道綁定的硬件引腳信號在計數(shù)初始的階段為高電平,當計數(shù)值達到通道數(shù)據(jù)寄存器中設(shè)定的匹配值時,輸出下降沿信號,輸出低電平。
實際運行程序時,用戶通過TIM_Init()函數(shù)配置定時器的基本定時單元,對應(yīng)的計數(shù)周期即為輸出PWM信號波形的周期,啟用輸出比較的指定通道綁定的引腳即為輸出PWM信號的引腳,通過TIM_PutChannelValue()函數(shù)設(shè)定輸出波形在整個周期下降沿的位置,進而調(diào)整PWM輸出信號波形的占空比。通道引腳在每次定時器周期的開始輸出為高電平,在周期內(nèi)設(shè)定的匹配值的位置產(chǎn)生下降沿,轉(zhuǎn)而輸出低電平,再計數(shù)周期結(jié)束折返為0時,恢復(fù)為高電平。如此周而復(fù)始,實現(xiàn)輸出PWM信號波形。
tim_input_capture
tim_intput_capture實現(xiàn)的是一個使用定時器為外部輸入的觸發(fā)信號記錄時刻的樣例工程。
其實現(xiàn)原理,是在tim_basic基礎(chǔ)之上,額外通過驅(qū)動函數(shù)TIM_EnableInputCapture(),啟動并配置給定通道BOARD_TIM_CHANNEL為輸入捕獲功能。其中,指定給定通道的捕獲輸入信號極性.PinPolarity的值為TIM_PinPolarity_Falling,表示在該給定通道綁定的引腳上出現(xiàn)下降沿信號時,觸發(fā)捕獲事件。此時,捕獲計數(shù)器當前的計數(shù)值到給定通道的通道數(shù)據(jù)寄存器中,這個值就可以作為該捕獲事件的時刻記錄。
實際運行程序時,用戶通過TIM_Init()函數(shù)配置定時器的基本定時單元,此時定時器的計數(shù)周期,就是可能捕獲時刻值的有效范圍。然后在電路上使用一個按鍵接入到指定通道綁定的引腳上,模擬產(chǎn)生下降沿觸發(fā)信號。當按下按鍵時,觸發(fā)信號到來,觸發(fā)程序中的通道事件中斷服務(wù)程序,在其中可以通過TIM_GetChannelValue()函數(shù)讀取本次輸入捕獲事件發(fā)生時的計數(shù)時刻。
tim_external_trigger_input
相對于tim_basic中,使用芯片內(nèi)部的時鐘源脈沖進行計數(shù),tim_external_trigger_input樣例工程可以對用戶指定引腳上的脈沖進行計數(shù),計數(shù)的脈沖來自于芯片外部的信號源。
其實現(xiàn)原理,是在tim_basic基礎(chǔ)上,額外通過驅(qū)動函數(shù)TIM_EnableExtTriggerIn(),配置啟用外部對外部輸入的脈沖信號進行計數(shù)的功能,固定從TIM外設(shè)模塊的ETR引腳捕獲來自外部的脈沖信號。每次捕獲到一個脈沖信號,等同于使用芯片內(nèi)部時鐘源的脈沖,計數(shù)器自增計數(shù)。此時,還可以基于這個新的時鐘源,使用周期計數(shù)中斷等功能。
實際運行程序時,用戶可以將一個按鍵接入到指定TIM外設(shè)模塊的ETR引腳上,用手動按按鍵產(chǎn)生脈沖信號。在程序中指定定時器的計數(shù)周期APP_TIM_UPDATE_PERIOD值為2,意味著每輸入兩次脈沖,就會觸發(fā)一次定時器周期中斷。
tim_slave_mode
tim_slave_mode實現(xiàn)的是一個使用從機TIM從機模式的樣例工程。實際上,這里的“從機”同從屬關(guān)系的的“從”是沒關(guān)系的,而是可以理解為更豐富的可由用戶控制的工作模式。
tim_slave_mode工程,在tim_basic基礎(chǔ)上,額外通過驅(qū)動函數(shù)TIM_EnableSlaveMode(),配置了其中一種“從機”模式:使用ETR作為控制信號(下降沿)的引腳TIM_SlaveIn_Alt7,當控制信號到來時,選擇暫停計數(shù)TIM_SlaveResp_Alt5。
實際運行程序時,用戶可以將一個按鍵接入到指定TIM外設(shè)模塊的ETR引腳上,用手動按按鍵產(chǎn)生電平控制信號。當按下按鍵時,控制定時器暫停計數(shù),松開按鍵時,定時器恢復(fù)計數(shù)。正常計數(shù)到一整個周期時,會產(chǎn)生中斷。如此,當按下按鍵時,會影響定時器中斷的周期。
tim_slave_mode_encoder
tim_slave_mode_encoder工程基于tim_input_capture工程,通過額外調(diào)用TIM_EnableSlaveMode()并傳入一組特定的配置,啟用了一種特殊的“從機”模式,從而實現(xiàn)了編碼器的功能。
tim_comp_output_compare_pwm
tim_comp_output_compare_pwm基于tim_output_compare_pwm工程,通過額外的驅(qū)動函數(shù)TIM_EnableCompOutput(),實現(xiàn)了PWM信號的互補輸出,這意味著當使用正常的輸出比較通道輸出PWM信號時,還開啟了硬件設(shè)計的,使用對應(yīng)的另一個通道,輸出電平極性剛好相反的PWM信號。
來源:靈動MM32MCU
免責聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理
審核編輯 黃宇
-
Tim
+關(guān)注
關(guān)注
0文章
81瀏覽量
17971 -
SDK
+關(guān)注
關(guān)注
3文章
1047瀏覽量
46318
發(fā)布評論請先 登錄
相關(guān)推薦
深蕾半導(dǎo)體開發(fā)者中心上線多個AI Demo樣例
![深蕾半導(dǎo)體開發(fā)者中心上線多個AI Demo<b class='flag-5'>樣</b><b class='flag-5'>例</b>](https://file1.elecfans.com/web3/M00/05/8D/wKgZO2eAu52AG2vOAAKeHYXggC4864.png)
STM32G030 TIM14,TIM16,TIM17無法觸發(fā)ADC采樣的原因?
基于RL78/G16 FPB的觸摸樣例工程創(chuàng)建演示流程
![基于RL78/G16 FPB的觸摸<b class='flag-5'>樣</b><b class='flag-5'>例</b>工程創(chuàng)建演示流程](https://file1.elecfans.com/web2/M00/E8/85/wKgaomZMPF2AWt2yAAATHKmlTVM243.jpg)
STM8S007C8的TIM2如何配置才能輸出單脈沖?
TIM1_BRK_TIM15_IRQHandler是什么中斷?。?/a>
STM207F TIM10和TIM9不能主從連接嗎?
STM32F030 TIM間同步,TIM14如何觸發(fā)TIM3呢?
stm32f10x高級定時器TIM1和通用定時器TIM2~TIM4如何同步作用?
stm32f030c8的tim6及tim15沒有響應(yīng)是為什么?
求一種基于STM32G4芯片TIM+SPI+DMA應(yīng)用設(shè)計方案
![求一種基于STM32G4芯片<b class='flag-5'>TIM</b>+SPI+DMA應(yīng)用設(shè)計方案](https://file1.elecfans.com/web2/M00/C4/AB/wKgZomX2XNKANz1IAAAtT97kpGs520.png)
評論