在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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 通用定時器的幾種配置方式

            STM32 通用定時器的幾種配置方式

            作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏


            static void Time_IN_PWM_GPIO_Config(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;

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

            RCC_APB2PeriphClockCmd(TIMx_IN_GPIO_RCC,ENABLE);

            GPIO_InitStructure.GPIO_Pin =TIMx_IN_Pin;
            GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //浮空輸入模式
            GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

            GPIO_Init(TIMx_IN_Port, &GPIO_InitStructure);
            }



            static void Time_IN_PWM_Config(void)
            {
            #if 0
            TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
            #endif
            TIM_ICInitTypeDef TIM_ICInitStructure;

            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx,ENABLE); //開啟時鐘
            TIM_DeInit(TIM2);
            #if 0

            TIM_TimeBaseInitStructure.TIM_Prescaler =(100-1); //時鐘分頻系數(shù)
            TIM_TimeBaseInitStructure.TIM_Period =(1000-1); //自動重裝寄存器 PWM頻率:72M/100/1000=720Hz
            TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上計數(shù)模式
            TIM_TimeBaseInitStructure.TIM_ClockDivision =0; //時鐘分頻,這里不涉及
            #ifdef Time1
            TIM_TimeBaseInitStructure.TIM_RepetitionCounter; //This parameter is valid only for TIM1 and TIM8
            #endif

            TIM_TimeBaseInit(TIMx,&TIM_TimeBaseInitStructure); //配置參數(shù)
            TIM_ClearITPendingBit(TIMx,TIM_IT_Update); //清除中斷標(biāo)示位
            #endif


            TIM_ICInitStructure.TIM_Channel =TIM_Channel_2;
            TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Rising; //上升沿有效
            TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;//TIM Input 1, 2, 3 or 4 is selected to be
            // connected to IC1, IC2, IC3 or IC4, respectively */
            TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1; //無預(yù)分頻
            TIM_ICInitStructure.TIM_ICFilter =0x0; //無濾波

            TIM_ICInit(TIMx,&TIM_ICInitStructure); //初始化PWM輸入模式//參見函數(shù)體與參考手冊關(guān)于PWMI說明
            TIM_PWMIConfig(TIMx,&TIM_ICInitStructure);

            TIM_SelectInputTrigger(TIMx, TIM_TS_TI2FP2); //選擇TI2FP2作為TIMx輸入觸發(fā) 一個信號來之后 啟動定時器開始計數(shù)

            TIM_SelectSlaveMode(TIMx, TIM_SlaveMode_Reset); //選擇從模式控制器為復(fù)位模式,選中的TRGI上升沿重新初始化計數(shù)器
            //從模式控制器連接到TI1FP1 TI2FP2 只要兩者有效為設(shè)置的電平,就會復(fù)位計數(shù)器 參見TIME結(jié)構(gòu)圖

            TIM_SelectMasterSlaveMode(TIMx, TIM_MasterSlaveMode_Enable); //使能主從模式 ??????????????????

            TIM_Cmd(TIMx, ENABLE);

            TIM_ITConfig(TIMx, TIM_IT_CC2, ENABLE);
            }



            void Time_IN_PWM_Init(void)
            {
            Time_IN_PWM_GPIO_Config();
            Time_NVIC_Config();
            Time_IN_PWM_Config(); //定時器配置
            }

            5、單脈沖模式

            #include"stm32f10x.h"
            #include"time.h"



            static Time_NVIC_Config(void)
            {
            NVIC_InitTypeDef NVIC_InitStructure;

            NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

            NVIC_InitStructure.NVIC_IRQChannel = TIMx_IRQn;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

            NVIC_Init(&NVIC_InitStructure);
            }



            static Time_SinglePluse_IN_GPIO_Config(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;

            RCC_APB2PeriphClockCmd(TIMx_IN_GPIO_RCC,ENABLE);

            GPIO_InitStructure.GPIO_Pin =TIMx_IN_Pin;
            GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //浮空輸入模式
            GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

            GPIO_Init(TIMx_IN_Port, &GPIO_InitStructure);
            }



            static Time_SinglePluse_OUT_GPIO_Config(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;

            RCC_APB2PeriphClockCmd(TIMx_OUT_GPIO_RCC,ENABLE);

            GPIO_InitStructure.GPIO_Pin =TIMx_OUT_Pin;
            GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP; //推免復(fù)用輸出
            GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

            GPIO_Init(TIMx_OUT_Port, &GPIO_InitStructure);
            }



            static void Time_SinglePluse_Config(void)
            {
            TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
            TIM_ICInitTypeDef TIM_ICInitStructure;
            TIM_OCInitTypeDef TIM_OCInitStructure;

            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx,ENABLE); //開啟時鐘
            TIM_DeInit(TIM2);


            TIM_TimeBaseInitStructure.TIM_Prescaler =1; //時鐘分頻系數(shù)
            TIM_TimeBaseInitStructure.TIM_Period =65535; //自動重裝寄存器
            TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上計數(shù)模式
            TIM_TimeBaseInitStructure.TIM_ClockDivision =0; //時鐘分頻,這里不涉及
            #ifdef Time1
            TIM_TimeBaseInitStructure.TIM_RepetitionCounter; //This parameter is valid only for TIM1 and TIM8
            #endif

            TIM_TimeBaseInit(TIMx,&TIM_TimeBaseInitStructure); //配置參數(shù)
            TIM_ClearITPendingBit(TIMx,TIM_IT_Update); //清除中斷標(biāo)示位


            TIM_ICStructInit(&TIM_ICInitStructure);

            TIM_ICInitStructure.TIM_Channel =TIM_Channel_2; //通道2為輸入
            TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Rising; //上升沿有效
            TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;//TIM Input 1, 2, 3 or 4 is selected to be
            // connected to IC1, IC2, IC3 or IC4, respectively*/
            TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1; //無預(yù)分頻
            TIM_ICInitStructure.TIM_ICFilter =0x0; //無濾波

            TIM_ICInit(TIMx,&TIM_ICInitStructure); //初始化輸入模式

            TIM_SelectOnePulseMode(TIMx,TIM_OPMode_Single); //選擇單脈沖模式 這樣 下一次更新時間是停止計數(shù)器

            TIM_SelectInputTrigger(TIMx, TIM_TS_TI2FP2); //選擇TI2FP2作為TIMx輸入觸發(fā) 一個信號來之后 啟動定時器開始計數(shù)

            TIM_SelectSlaveMode(TIMx, TIM_SlaveMode_Trigger); //選擇從模式控制器為觸發(fā)模式 其連接到了TI2FP2 讓從模式控制器啟動計數(shù)器


            TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM2; //輸出模式選擇為PWM模式2 用PWM2 向上計數(shù)時,CNT
            TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;//使能通道
            #ifdef Time1
            TIM_OCInitStructure.TIM_OutputNState =;
            #endif
            TIM_OCInitStructure.TIM_Pulse =12345; //CCRx里面存放的值
            TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High; //OCREF與OC實際輸出相同

            #ifdef Time1
            TIM_OCInitStructure.TIM_OCNPolarity =;
            TIM_OCInitStructure.TIM_OCIdleState =;
            TIM_OCInitStructure.TIM_OCNIdleState =;
            #endif
            TIM_OC1Init(TIMx,&TIM_OCInitStructure); //使用通道1作為單脈沖的輸出通道


            //TIM_Cmd(TIMx, ENABLE); //使用TI2FP1來觸發(fā)定時器,不需要軟件啟動定時器
            }



            void Time_SinglePluse_Init(void)
            {
            Time_SinglePluse_IN_GPIO_Config(); //配置time2的通道2為輸入
            Time_SinglePluse_OUT_GPIO_Config(); //配置time2的通道1為輸出
            Time_NVIC_Config(); //可以不用
            Time_SinglePluse_Config(); //定時器配置
            }

            6、定時器聯(lián)級

            #include"stm32f10x.h"
            #include"time.h"



            static Time_NVIC_Config(void)
            {
            NVIC_InitTypeDef NVIC_InitStructure;

            NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

            NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

            NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

            NVIC_Init(&NVIC_InitStructure);
            }



            static Time_Connect_GPIO_Config(void)
            {
            GPIO_InitTypeDef GPIO_InitStructure;

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);

            GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_6;//time2 ch1 pin.0 time3 cha1 pin.6
            GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP; //推免復(fù)用輸出
            GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
            GPIO_Init(GPIOA,&GPIO_InitStructure);

            GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6; //time4 ch1 pin.6
            GPIO_Init(GPIOB,&GPIO_InitStructure);
            }



            static void Time_Connect_Config(void)
            {
            TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
            TIM_OCInitTypeDef TIM_OCInitStructure;

            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4,ENABLE);
            TIM_DeInit(TIM2);
            TIM_DeInit(TIM3);
            TIM_DeInit(TIM4);



            TIM_TimeBaseInitStructure.TIM_Prescaler =0; //時鐘分頻系數(shù)
            TIM_TimeBaseInitStructure.TIM_Period =99; //自動重裝寄存器
            TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上計數(shù)模式
            TIM_TimeBaseInitStructure.TIM_ClockDivision =0; //時鐘分頻,這里不涉及
            #ifdef Time1 //或者Time8
            TIM_TimeBaseInitStructure.TIM_RepetitionCounter; //This parameter is valid only for TIM1 and TIM8
            #endif

            TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); //配置參數(shù)
            TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中斷標(biāo)示位


            TIM_TimeBaseInitStructure.TIM_Period =5;
            TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
            TIM_ClearITPendingBit(TIM3,TIM_IT_Update);


            TIM_TimeBaseInitStructure.TIM_Period =5;
            TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
            TIM_ClearITPendingBit(TIM4,TIM_IT_Update);


            TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM1; //輸出模式選擇為PWM模式2 用PWM2 向上計數(shù)時,CNT
            TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;//使能通道
            TIM_OCInitStructure.TIM_Pulse =49; //CCRx里面存放的值
            TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High; //OCREF與OC實際輸出相同

            TIM_OC1Init(TIM2,&TIM_OCInitStructure); //使用通道1作為單脈沖的輸出通道

            TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //使能主從模式

            TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); //選擇Time2的更新事件作為觸發(fā)輸出



            TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
            TIM_OCInitStructure.TIM_Pulse = 3;

            TIM_OC1Init(TIM3, &TIM_OCInitStructure);

            TIM_OC1Init(TIM4, &TIM_OCInitStructure);


            TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated); //從模式的輸入觸發(fā)選擇為門控模式
            TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1); //從模式觸發(fā)源選擇為內(nèi)部觸發(fā)1?????????????為什么是內(nèi)部觸發(fā)1 不是0 2 3
            //原因:ITR0 ITR1 ITR2 ITR3 對應(yīng)主模式的TIM2 TIM3 TIM4 TIM5


            TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Gated);
            TIM_SelectInputTrigger(TIM4, TIM_TS_ITR1);

            TIM_Cmd(TIM2, ENABLE);
            TIM_Cmd(TIM3, ENABLE);
            TIM_Cmd(TIM4, ENABLE);
            }



            void Time_Connect_Init(void)
            {
            Time_Connect_GPIO_Config();
            Time_NVIC_Config(); //可以不用
            Time_Connect_Config(); //定時器配置
            }

            以上,結(jié)束。


            上一頁 1 2 下一頁

            關(guān)鍵詞: STM32通用定時器配置方

            評論


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

            關(guān)閉