68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> MM32/靈動微電子 >> 靈動微MM32定時器操作指南

靈動微MM32定時器操作指南

關鍵字:靈動微電子 MM32 定時器操作 作者: 來源: 發(fā)布時間:2022-06-07  瀏覽:87

1、定時器同步

在MM32L073一個定時器有4 通道 PWM 輸出,有客戶在應用中需要使用兩個定時器控制6路PWM輸出,為了使兩個定時器的PWM輸出相同的波形,所以需要兩個定時器實現(xiàn)同步功能。

所有 TIMx 定時器在內部相連,用于定時器同步或鏈接。當一個定時器處于主模式時,它可以對另一個處于從模式的定時器的計數(shù)器進行復位、啟動、停止或提供時鐘等操作。

MM32L073的每個定時器都可以由另一個定時器觸發(fā)啟動定時器一般是通過軟件設置而啟動,MM32L073的每個定時器也可以通過外部信號觸發(fā)而啟動,還可以通過另外一個定時器的某一個條件被觸發(fā)而啟動。這里所謂某一個條件可以是定時到時、定時器超時、比較成功等許多條件。這種通過一個定時器觸發(fā)另一個定時器的工作方式稱為定時器的同步,發(fā)出觸發(fā)信號的定時器工作于主模式,接受觸發(fā)信號而啟動的定時器工作于從模式。

主/從定時器的例子

定時器例子


為了實現(xiàn)兩個定時器完全同步,使用一個定時器作為另一個定時器的預分頻器?梢耘渲枚〞r器 1 作為定時器 3 的預分頻器。


參考上圖,進行下述操作:


˜配置定時器 1 為主模式,它可以在每一個更新事件 UEV 時輸出一個周期性的觸發(fā)信號。在TIM1_CR2寄存器的MMS = ‗010時,每當產(chǎn)生一個更新事件時在 TRGO1上輸出一個上升沿信號。


˜連接定時器 1 的 TRGO1 輸出至定時器 3,設置 TIM3_SMCR 寄存器的 TS = ‗000 ,配置定時器 3為使用 ITR1 作為內部觸發(fā)的從模式。


˜然后把從模式控制器置于外部時鐘模式 1(TIM3_SMCR 寄存器的 SMS = 111);這樣定時器 3即可由定時器 1 周期性的上升沿(即定時器 1 的計數(shù)器溢出)信號驅動。


˜最后,必須設置相應(TIMx_CR1 寄存器)的 CEN 位分別啟動兩個定時器。


注:如果 OCx 已被選中為定時器 1 的觸發(fā)輸出(MMS = 1xx),它的上升沿用于驅動定時器 3 的計數(shù)器。


void Tim1_Init(u16 Prescaler,u16Period)


{


TIM_TimeBaseInitTypeDefTIM_StructInit;


      


RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);


      


TIM_StructInit.TIM_Period=Period;                                                                     


TIM_StructInit.TIM_Prescaler=Prescaler;                                                               


TIM_StructInit.TIM_ClockDivision=TIM_CKD_DIV1;                                                        


TIM_StructInit.TIM_CounterMode=TIM_CounterMode_Up;                                                    


TIM_StructInit.TIM_RepetitionCounter=0;


TIM_TimeBaseInit(TIM1,&TIM_StructInit);


      


TIM_ClearFlag(TIM1,TIM_FLAG_Update);


}


 


void TIM3_Init(u16 psc,u16 arr)





TIM_TimeBaseInitTypeDefTIM_StructInit;


 


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);


      


TIM_StructInit.TIM_Period=arr;                                                                     


TIM_StructInit.TIM_Prescaler=psc;                                                               


TIM_StructInit.TIM_ClockDivision=TIM_CKD_DIV1;                                                         


TIM_StructInit.TIM_CounterMode=TIM_CounterMode_Up;                                                    


TIM_StructInit.TIM_RepetitionCounter=0;


TIM_TimeBaseInit(TIM3,&TIM_StructInit);


      


TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Enable);


TIM_SelectInputTrigger(TIM1,TIM_TS_ITR2);


TIM_SelectSlaveMode(TIM1,TIM_SlaveMode_Gated);


TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);


      


TIM3->CNT=0;


TIM1->CNT=0;


      


TIM_Cmd(TIM1, ENABLE);


delay_ms(300);      


TIM_Cmd(TIM3, ENABLE); 


delay_ms(300);


}


 2、定時器精準延時

在應用中,有的需要精準的定時功能,在客戶支持過程中,發(fā)現(xiàn)有的客戶對定時器的基本定時功能的理解有些偏差,今天將與大家一起使用定時器的基本定時功能。

我們把定時器設置自動重裝載寄存器 ARR 的值為1000,設置時鐘預分頻器為47,則驅動計數(shù)器的時鐘: CK_CNT = CK_INT / (47+1)=1M,則計數(shù)器計數(shù)一次的時間等于:1/CK_CNT=1us,當計數(shù)器計數(shù)到 ARR 的值1000 時,產(chǎn)生一次中斷,則中斷一次的時間為:1/CK_CNT*ARR=1ms。

void Tim2_UPCount_test(void)

{

TIM_TimeBaseInitTypeDefTIM_StructInit;

NVIC_InitTypeDef NVIC_StructInit; 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);   

TIM_StructInit.TIM_Period=1000;                                                 


TIM_StructInit.TIM_Prescaler=47;                                                               


TIM_StructInit.TIM_ClockDivision=TIM_CKD_DIV1;   


TIM_StructInit.TIM_CounterMode=TIM_CounterMode_Up; 

TIM_StructInit.TIM_RepetitionCounter=0;

TIM_TimeBaseInit(TIM2,&TIM_StructInit);

NVIC_StructInit.NVIC_IRQChannel=TIM2_IRQn;

NVIC_StructInit.NVIC_IRQChannelPriority=1;

NVIC_StructInit.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_StructInit);

TIM_ClearFlag(TIM2,TIM_FLAG_Update);

TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);


TIM_Cmd(TIM2, ENABLE);     

}

定時器中斷一次的時間是 1ms,我們定義一個全局變量ucTim2Flag,每當進一次中斷的時候,讓 ucTim2Flag來記錄進入中斷的次數(shù)。如果我們想實現(xiàn)一個 1s 的定時,我們只需要判斷time 是否等于1000 即可,1000 個 1ms 就是1s。然后把ucTim2Flag清 0,重新計數(shù),以此循環(huán)往復。

void TIM2_IRQHandler(void)

{

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

ucTim2Flag++;

}

編輯:ls  最后修改時間:2022-06-07

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

云安县| 彭州市| 封开县| 湖北省| 呼和浩特市| 乌拉特后旗| 且末县| 南城县| 富源县| 莱西市| 仁怀市| 九江市| 万宁市| 车致| 盘山县| 治县。| 江孜县| 高平市| 手机| 平凉市| 贵阳市| 河北区| 庆阳市| 西林县| 赤壁市| 平湖市| 四子王旗| 白朗县| 全南县| 定日县| 章丘市| 邢台县| 恩施市| 方山县| 沅陵县| 香港| 通河县| 高陵县| 衡阳市| 曲靖市| 昌平区|