新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32通用定時器庫函數(shù)設(shè)置

        STM32通用定時器庫函數(shù)設(shè)置

        作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
        通用定時器

        STM32的通用定時器為:TIM2、TIM3、TIM4和TIM5

        本文引用地址:http://www.104case.com/article/201611/318502.htm

        在使用通用定時器時利用庫函數(shù)直接設(shè)置定時器如下:

        1.使能定時器TIM_X的時鐘:(X=2、3、4、5)

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMX,ENABLE);

        2.計算要定時的時間,根據(jù)定時時間來設(shè)定分頻數(shù)和最大計數(shù)值(以向上計數(shù)為例子),其中計算關(guān)系如下:

        系統(tǒng)時鐘(一般為72MHZ)=定時器分頻數(shù) *計數(shù)值

        假如分頻數(shù)為7200,則定時器時鐘為:72MHZ/7200=10KHZ,定時器每次計數(shù)時間間隔為1/10000秒,假如定時1秒,則要計數(shù)10000次,因此計數(shù)器的最大計數(shù)值為9999,因為計數(shù)器從零開始計數(shù)。

        3.將計算好的分頻數(shù)和計數(shù)值分別賦值以上面定時為例,如下:

        /自動重裝的計數(shù)值

        TIM_TimeBaseStructure.TIM_Period = (10000 - 1);

        //這個就是預(yù)分頻系數(shù)

        TIM_TimeBaseStructure.TIM_Prescaler =7200 ;

        //數(shù)字濾波器,定時的時候不涉及此功能,為零即

        TIM_TimeBaseStructure.TIM_ClockDivision = 0;

        //計數(shù)模式選擇,此處設(shè)置為向上模式

        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounteMode_Up;

        //定時基本設(shè)置((X=2、3、4、5))

        TIM_TimeBaseInit(TIMX, &TIM_TimeBaseStructure);

        //清除定時器X的中斷溢出標(biāo)識

        TIM_ClearITPendingBit(TIMX,TIM_IT_Update);

        //開定時器X溢出中斷

        TIM_ITConfig(TIM5,TIM_IT_Update, ENABLE);

        //計數(shù)器使能,開始工作

        TIM_Cmd(TIM5, ENABLE);

        到此通用定時器的定時功能配置完成,以上配置代碼可寫入

        void TIMX_Init(void)函數(shù)中,函數(shù)名自己可變。別忘了在函數(shù)中的第一句寫入:TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

        4.中斷配置,這個按照下面的函數(shù)即可

        void NVIC_Configuration(void)//定時器中斷配置

        {

        NVIC_InitTypeDefNVIC_InitStructure;

        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000);

        NVIC_InitStructure.NVIC_IRQChannel= TIM5_IRQn;

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;

        NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1;

        NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;

        NVIC_Init(&NVIC_InitStructure);

        }

        5. 在stm32f10x_it.c添加定時器TIMX的中斷函數(shù):

        voidTIM5_IRQHandler(void)

        {

        //如果定時器產(chǎn)生了中斷(X=2、3、4、5)

        if (TIM_GetITStatus(TIMX,TIM_IT_Update) != RESET)

        {

        //這是你要完成的事情和相關(guān)判斷,自己去寫

        }

        //完成事情和判斷后,清除中斷

        TIM_ClearITPendingBit(TIM5,TIM_IT_Update);

        }

        }

        到此,定時器定時中斷功能實現(xiàn)了



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 沙雅县| 曲松县| 扎赉特旗| 哈密市| 武邑县| 宾川县| 桃园县| 句容市| 甘孜县| 赤峰市| 古丈县| 宁德市| 汉寿县| 资中县| 宜宾市| 疏勒县| 沾益县| 柳江县| 岳阳市| 监利县| 庆云县| 磐石市| 丰台区| 始兴县| 铁力市| 尉犁县| 宜宾县| 垣曲县| 万全县| 双柏县| 凉城县| 韶关市| 贡觉县| 巴彦淖尔市| 涞水县| 郧西县| 通江县| 横山县| 松桃| 辽阳县| 彭泽县|