<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 通用定時器的幾種配置方式

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

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


          static void Time_IN_PWM_GPIO_Config(void)
          {
          GPIO_InitTypeDef GPIO_InitStructure;

          本文引用地址:http://www.ex-cimer.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); //清除中斷標示位
          #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; //無預分頻
          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); //選擇從模式控制器為復位模式,選中的TRGI上升沿重新初始化計數(shù)器
          //從模式控制器連接到TI1FP1 TI2FP2 只要兩者有效為設置的電平,就會復位計數(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; //推免復用輸出
          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); //清除中斷標示位


          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; //無預分頻
          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; //推免復用輸出
          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); //清除中斷標示位


          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 對應主模式的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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();