在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32高級控制定時器1學(xué)習(xí)

            STM32高級控制定時器1學(xué)習(xí)

            作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
            高級控制定時器(Tim1)是由一個16位的自動裝載計數(shù)器組成,它由一個可編程預(yù)分頻器驅(qū)動。

            用途在于:測量輸入信號的脈沖寬度(輸入捕獲),或者產(chǎn)生輸出波形(輸出比較,PWM,嵌入死區(qū)時間的互補(bǔ)PWM等)。

            本文引用地址:http://www.biyoush.com/article/201611/322077.htm

            使用定時器預(yù)分頻器和RCC時鐘控制預(yù)分頻器,可以實現(xiàn)脈沖寬度和波形周期從幾個微秒到幾個毫秒的調(diào)節(jié)。

            具體如下:

            16位上下,自動裝載計數(shù)器。

            16位可編程預(yù)分頻器,計數(shù)器時鐘頻率的分頻率的分頻系數(shù)為1-65535之間任意數(shù)值

            4個獨立通道:

            輸入捕獲

            輸出比較

            PWM生成

            單脈沖模式輸出

            死區(qū)時間可編程的互補(bǔ)輸出

            使用外部信號控制定時器和定時器互連的同步電路

            在指定數(shù)目的計數(shù)器周期之后更新定時器寄存器

            剎車輸入信號可以將定時器輸出信號置于復(fù)位狀態(tài)或者一個已知狀態(tài)

            如下事件發(fā)生時產(chǎn)生中斷:

            更新:計數(shù)器向上溢出或者向下溢出,計數(shù)器初始化。

            觸發(fā)事件(計數(shù)器啟動,停止,初始化)

            輸入捕獲

            輸出比較

            剎車信號輸入

            今天我們來實現(xiàn)用tim1實現(xiàn)計數(shù)器的功能:

            步驟一:進(jìn)行定時器時鐘啟動:

            void tim1_on()
            {
            //Step1.時鐘設(shè)置:啟動TIM1
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

            }

            步驟二:實現(xiàn)對定時器的配置(對其內(nèi)部寄存器進(jìn)行配置初始化)

            //Step2.TIM1模塊設(shè)置
            void TIM_Configuration(void)
            {
            TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
            //TIM_OCInitTypeDef TIM_OCInitStructure; //比較PWM的時候用。

            //TIM1 使用內(nèi)部時鐘
            //TIM_InternalClockConfig(TIM1);

            //TIM1基本設(shè)置
            //設(shè)置預(yù)分頻器分頻系數(shù)71,即APB2=72M, TIM1_CLK=72/72=1MHz
            //TIM_Period(TIM1_ARR)=1000,計數(shù)器向上計數(shù)到1000后產(chǎn)生更新事件,計數(shù)值歸零
            //向上計數(shù)模
            //TIM_RepetitionCounter(TIM1_RCR)=0,每次向上溢出都產(chǎn)生更新事件
            TIM_BaseInitStructure.TIM_Period = 1000;
            TIM_BaseInitStructure.TIM_Prescaler = 71;
            TIM_BaseInitStructure.TIM_ClockDivision = 0;
            TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
            TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
            TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);

            //清中斷,以免一啟用中斷后立即產(chǎn)生中斷
            TIM_ClearFlag(TIM1, TIM_FLAG_Update);
            //使能TIM1中斷源
            TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);

            //TIM1總開關(guān):開啟
            TIM_Cmd(TIM1, ENABLE);
            }

            根據(jù)上面的提示,我們可以看到1000*1/1MHz=1ms的時候進(jìn)入中斷一次。

            步驟三:對定時器中斷進(jìn)行優(yōu)先級別設(shè)置:

            void NVIC_Configuration(void)
            {
            #ifdef VECT_TAB_RAM

            NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
            #else

            NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
            #endif

            //Step3.中斷NVIC設(shè)置:允許中斷,設(shè)置優(yōu)先級
            NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQChannel; //更新事件
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優(yōu)先級0
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //響應(yīng)優(yōu)先級1
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //允許中斷
            NVIC_Init(&NVIC_InitStructure); //寫入設(shè)置

            }

            將這里基本設(shè)施都能好了。

            我們可以進(jìn)行中斷函數(shù)的設(shè)置,就是進(jìn)入中斷要干什么。

            tim1中斷有:

            TIM1_BRK_IRQHandler(void) //tim1的暫停中斷

            TIM1_CC_IRQHandler(void)//tim1的捕獲比較中斷

            TIM1_TRG_COM_IRQHandler(void)//tim1的觸發(fā)

            TIM1_UP_IRQHandler(void)//tim1的刷新中斷和通訊中斷。

            我們使用的是向上計數(shù)的模式,所以要進(jìn)入向上計數(shù)的中斷:

            void TIM1_UP_IRQHandler(void)
            {
            GPIO_SetBits(GPIOB, GPIO_Pin_12);
            delay_nms(100); //閃燈
            GPIO_ResetBits(GPIOC, GPIO_Pin_8);
            TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update); //清中斷

            }

            將所有的準(zhǔn)備工作的做好了,我們開始寫main函數(shù)()

            如下:


            RCC_Configuration();

            ledGPIO_init();

            //key_init();
            tim1_on();
            TIM_Configuration();
            NVIC_Configuration();

            while(1)
            {

            }

            這樣就完成了定時器1的計數(shù)器功能。



            關(guān)鍵詞: STM32高級控制定時器

            評論


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

            關(guān)閉