日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

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

靈動微MM32定時器操作指南

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

1、定時器同步

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

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

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

主/從定時器的例子

定時器例子


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


參考上圖,進(jìn)行下述操作:


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


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


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


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


注:如果 OCx 已被選中為定時器 1 的觸發(fā)輸出(MMS = 1xx),它的上升沿用于驅(qū)動定時器 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、定時器精準(zhǔn)延時

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

我們把定時器設(shè)置自動重裝載寄存器 ARR 的值為1000,設(shè)置時鐘預(yù)分頻器為47,則驅(qū)動計數(shù)器的時鐘: CK_CNT = CK_INT / (47+1)=1M,則計數(shù)器計數(shù)一次的時間等于:1/CK_CNT=1us,當(dāng)計數(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,每當(dāng)進(jìn)一次中斷的時候,讓 ucTim2Flag來記錄進(jìn)入中斷的次數(shù)。如果我們想實(shí)現(xiàn)一個 1s 的定時,我們只需要判斷time 是否等于1000 即可,1000 個 1ms 就是1s。然后把ucTim2Flag清 0,重新計數(shù),以此循環(huán)往復(fù)。

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

安陆市| 华蓥市| 鄂托克前旗| 从化市| 中阳县| 大悟县| 金湖县| 贡嘎县| 贡嘎县| 泉州市| 台东县| 新乡县| 和龙市| 育儿| 镇康县| 新密市| 岳阳县| 修武县| 女性| 内乡县| 祥云县| 临清市| 施秉县| 海盐县| 无为县| 宜宾市| 万盛区| 洛扎县| 防城港市| 靖州| 客服| 永年县| 清原| 黄大仙区| 黄陵县| 普格县| 清远市| 肥城市| 江源县| 时尚| 堆龙德庆县|