在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 定時(shí)器的4通道計(jì)數(shù)器應(yīng)用

            STM32 定時(shí)器的4通道計(jì)數(shù)器應(yīng)用

            作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
            通用定時(shí)器確實(shí)比較強(qiáng)悍,功能極多我也比較暈

            此為在不牽扯PWM與DMA下像C51那樣計(jì)數(shù)點(diǎn)燈。

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

            當(dāng)然你要配置一些IO口作為點(diǎn)燈用這里就不詳細(xì)說(shuō)了。

            就如

            #defineLED2_ONGPIO_ResetBits(GPIOD,GPIO_Pin_7)
            #define LED2_OFFGPIO_SetBits(GPIOD,GPIO_Pin_7)

            這樣的。

            然后啟用通用定時(shí)器2設(shè)置它的中斷等3.0的庫(kù);

            //Timer2中斷*//

            void NVIC_Configuration(void)
            {
            NVIC_InitTypeDef NVIC_InitStructure;
            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
            NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//TIM2全局中斷3.0的
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
            NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
            NVIC_Init(&NVIC_InitStructure);

            }

            //TIM2 clock enable

            TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

            TIM_OCInitTypeDefTIM_OCInitStructure;

            TIM_TimeBaseStructure.TIM_Period =8000;//計(jì)數(shù)值
            TIM_TimeBaseStructure.TIM_Prescaler =7200-1;//預(yù)分頻,此值+1為分頻的除數(shù)
            TIM_TimeBaseStructure.TIM_ClockDivision =0x0; //設(shè)置時(shí)鐘分割
            TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上計(jì)數(shù)


            **********************************************************************************************
            TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

            TIM_ClockDivision,設(shè)置時(shí)鐘分割

            它就是RCC控制寄存器1(TIMx_CR1)的位9:8(CKD),具體含義如下:

            CKD[1:0]:時(shí)鐘分頻因子
            定義在定時(shí)器時(shí)鐘(CK_INT)頻率與數(shù)字濾波器(ETR,TIx)使用的采樣頻率之間的分頻比例。
            0x00:tDTS = 1 xtCK_INT
            0x01:tDTS = 2 xtCK_INT
            0x10:tDTS = 4 xtCK_INT

            TIM_TimeBaseStructure中應(yīng)該還有一個(gè)更新報(bào)告uint8_t TIM_RepetitionCounter;不管他也行。

            72M/7200=10K分頻后的結(jié)果就是,定時(shí)器速度為10K.計(jì)數(shù)器為向上計(jì)數(shù),8000溢出,所以溢出時(shí)間就是
            8000/10K=0.8秒.而捕獲的比較值則為:
            u16 CCR1_Val = 4000;
            u16 CCR2_Val = 2000;
            u16 CCR3_Val = 1000;
            u16 CCR4_Val = 500;
            也就是說(shuō),在定時(shí)器開(kāi)始計(jì)數(shù)后,第一通道的中斷發(fā)生在4000/10k=0.4秒,第二通道是0.2,第三
            通道是0.1,第四是0.05*/

            ************************************************************************************************


            //比較設(shè)置*/

            TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_Inactive;//輸出比較非主動(dòng)模式

            TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;//極性為正

            //比較通道1*/
            TIM_OCInitStructure.TIM_Pulse =CCR1_Val;//就是4000裝入捕獲比較寄存器的脈沖值

            TIM_OC1Init(TIM2,&TIM_OCInitStructure);//寫入配置
            TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);//禁止OC1重裝載,其實(shí)可以省掉這句,因?yàn)槟?/p>

            //4路都不重裝的.

            ********************************************************************************************

            typedef struct
            {
            uint16_t TIM_OCMode;//選擇定時(shí)器模式比較多有的功能也比較相似
            uint16_t TIM_OutputState;//使能通道 為了和2.0兼容吧我不管他
            uint16_tTIM_OutputNState;//失能??
            uint16_tTIM_Pulse;//待裝入捕獲比較寄存器的脈沖值
            uint16_t TIM_OCPolarity;//輸出極性
            uint16_t TIM_OCNPolarity;//???
            uint16_tTIM_OCIdleState;//???
            uint16_t TIM_OCNIdleState;//???不懂得不管用默認(rèn)就好
            } TIM_OCInitTypeDef;

            ********************************************************************************************

            //比較通道2 /
            TIM_OCInitStructure.TIM_Pulse =CCR2_Val;

            TIM_OC2Init(TIM2,&TIM_OCInitStructure);
            TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);

            //比較通道3 /
            TIM_OCInitStructure.TIM_Pulse =CCR3_Val;

            TIM_OC3Init(TIM2,&TIM_OCInitStructure);
            TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);

            //比較通道4 /
            TIM_OCInitStructure.TIM_Pulse =CCR4_Val;

            TIM_OC4Init(TIM2,&TIM_OCInitStructure);
            TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);

            //使能預(yù)裝載/
            TIM_ARRPreloadConfig(TIM2,ENABLE);//這個(gè)歷程中沒(méi)有軟件修改寄存器所以沒(méi)他也行
            //預(yù)先清除所有中斷位防止一啟用就有中斷從九九那抄的/
            TIM_ClearITPendingBit(TIM2, TIM_IT_CC1 |TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update);

            //4個(gè)通道和溢出都配置中斷/
            TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 |TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update, ENABLE);
            //允許TIM2開(kāi)始計(jì)數(shù)/
            TIM_Cmd(TIM2, ENABLE);

            服務(wù)中斷函數(shù)比較簡(jiǎn)單直接抄來(lái)

            void TIM2_IRQHandler(void)
            {
            if (TIM_GetITStatus(TIM2, TIM_IT_CC1) !=RESET)
            {
            //必須清空標(biāo)志位/*/
            TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);

            //點(diǎn)亮LED5 一定要是中文的 不然中間的 內(nèi)容就不見(jiàn)了 本想大家移植到自己的作品中方便 看來(lái)SINA不可這樣用



            評(píng)論


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

            關(guān)閉