STM32普通定時器實現延時函數

來源:互聯網
上載者:User

標籤:

/* SystemFrequency / 1000    1ms中斷一次 * SystemFrequency / 100000     10us中斷一次 * SystemFrequency / 1000000 1us中斷一次 */#define SYSTICKPERIOD                    0.000001#define SYSTICKFREQUENCY            (1/SYSTICKPERIOD)/**  * @brief  定時器2的初始化,,定時周期1ms  * @param  無  * @retval 無  */void TIM2_Init(void){    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;    /*AHB = 72MHz,RCC_CFGR的PPRE1 = 2,所以APB1 = 36MHz,TIM2CLK = APB1*2 = 72MHz */    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        /* Time base configuration */             TIM_TimeBaseStructure.TIM_Period = 999;    TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock/SYSTICKFREQUENCY -1;    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);        TIM_ARRPreloadConfig(TIM2, ENABLE);        /* 設定更新要求源只在計數器上溢或下溢時產生中斷 */    TIM_UpdateRequestConfig(TIM2,TIM_UpdateSource_Global);     TIM_ClearFlag(TIM2, TIM_FLAG_Update);}/**  * @brief   ms延時程式,1ms為一個單位  * @param    *        @arg nTime: Delay_ms( 10 ) 則實現的延時為 10 * 1ms = 10ms  * @retval  無  */void Delay_ms(__IO uint32_t nTime){         /* 清零計數器並使能滴答定時器 */      TIM2->CNT   = 0;      TIM_Cmd(TIM2, ENABLE);         for( ; nTime > 0 ; nTime--)    {     /* 等待一個延時單位的結束 */     while(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) != SET);     TIM_ClearFlag(TIM2, TIM_FLAG_Update);    }    TIM_Cmd(TIM2, DISABLE);}

 

STM32普通定時器實現延時函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.