在等大牛解答下 急~~~~~ PWM主从模式

2019-08-17 05:43发布

void Motor_Init(u16 TIM2per, u16 TIM4per, u16 TIM4Compare1)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  TIM_OCInitTypeDef TIM_OCInitStruct;
  GPIO_InitTypeDef GPIO_InitStruct;
        //TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        //TIM_OCInitTypeDef  TIM_OCInitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//ê1Äü¶¨ê±Æ÷2μÄê±Öó
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//ê1Äü¶¨ê±Æ÷3μÄê±Öó
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ê1ÄüGPIOAê±Öó
       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ê1Äü¸′óÃIOê±Öó


GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6;//PA0
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStruct);
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;//PA0
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStruct);

  //TIM21¤×÷Ôúμ¥Âö3åÏÂ
  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//ûóDê±¼ä·Ö¸ô
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//ÏòéϼÆêyÄ£ê½
  TIM_TimeBaseInitStruct.TIM_Prescaler = 7200-1;//ԤװÆμêy£¬Ã¿100US¼Æêyò»′Î
  TIM_TimeBaseInitStruct.TIM_Period = TIM2per;//ÖØ×°Öμ
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);

  TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//éèÖÃTIM2Ôúμ¥Âö3åģ꽣¬ÇòêÇμ¥ò»μÄÂö3壬ÔúÏÂò»¸ö¸üDÂê¼tí£Ö1
  TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);//ê1Äü¶¨ê±Æ÷2μÄí¨μà1ԤװÔؼÄ′æÆ÷
  TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref);

  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//&#212;ù&#207;òé&#207;&#188;&#198;êyê±£&#172;ò&#187;μ&#169;TIMx_CNT<TIMx_CCR1ê±í¨μà1&#206;a&#206;TD§μ&#231;&#198;&#189;£&#172;·&#241;&#212;ò&#206;aóDD§μ&#231;&#198;&#189;
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1ê&#228;3&#246;ê1&#196;ü
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//óDD§μ&#231;&#198;&#189;&#206;a&#184;&#223;
  TIM_OCInitStruct.TIM_Pulse = 1;//±è&#189;&#207;2&#182;&#187;&#241;1μ&#196;&#212;¤×°&#212;&#216;&#214;μ
  TIM_OC1Init(TIM2,&TIM_OCInitStruct);

  TIM_Cmd(TIM2,DISABLE);//&#207;è2&#187;ê1&#196;üTIM2


  //TIM1¤×÷&#212;ú′ó&#196;£ê&#189;μ&#196;&#195;&#197;&#191;&#216;&#214;&#198;&#207;&#194;μ&#196WMê&#228;3&#246;&#196;£ê&#189;
  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//&#195;&#187;óDê&#194;&#188;t·&#214;&#184;&#238;
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
  TIM_TimeBaseInitStruct.TIM_Prescaler = 720-1;//&#212;¤·&#214;&#198;μ&#214;μ£&#172;10us&#188;&#198;êyò&#187;′&#206;
  TIM_TimeBaseInitStruct.TIM_Period = TIM4per;//&#214;&#216;×°&#214;μ
  TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);

  TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Gated);//TIM3&#206;a&#195;&#197;&#191;&#216;&#196;£ê&#189;
  TIM_SelectMasterSlaveMode(TIM4,TIM_MasterSlaveMode_Enable);//ê1&#196;üTIM3μ&#196;&#214;÷′ó&#196;£ê&#189;
  TIM_SelectInputTrigger(TIM4,TIM_TS_ITR1);//&#196;ú2&#191;′¥·¢£&#172;′óTIM2′¥·¢

  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//&#212;ú&#207;òé&#207;&#188;&#198;êyê±£&#172;ò&#187;μ&#169;TIMxCNT<TIMx_CCR1ê±í¨μà1&#206;a&#206;TD§μ&#231;&#198;&#189;£&#172;·&#241;&#212;ò&#206;aóDD§μ&#231;&#198;&#189;
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1ê&#228;3&#246;ê1&#196;ü
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//óDD§μ&#231;&#198;&#189;&#206;a&#184;&#223;
  TIM_OCInitStruct.TIM_Pulse = TIM4Compare1;//±è&#189;&#207;2&#182;&#187;&#241;1μ&#196;&#212;¤×°&#212;&#216;&#214;μ
  TIM_OC1Init(TIM4,&TIM_OCInitStruct);

  TIM_Cmd(TIM4,ENABLE);//ê1&#196;üTIM3
}

//éè&#214;&#195WMê&#228;3&#246;
//Cycle:&#206;a&#214;ü&#198;ú£&#172;μ¥&#206;&#187;(us£&#169;
//Pulse_Num:&#206;a&#194;&#246;3&#229;&#184;&#246;êy£¨D&#161;óú3200£&#169;
void TIM2_TIM4_PWM(u16 Cycle, u16 Pulse_Num)
{
  u16 TIM4per = 0;
  u32 Time = 0;
  //&#184;&#196;±&#228;TIM3μ&#196;&#214;&#216;×°&#214;μ&#184;&#196;±&#228;&#194;&#246;3&#229;&#198;μ&#194;ê&#213;aà&#239;éè&#214;&#195;&#194;&#246;3&#229;&#213;&#188;&#191;&#213;±è&#206;a50%
  //&#184;&#196;±&#228;TIM2μ&#196;&#212;¤·&#214;&#198;μ&#198;÷oí&#214;&#216;×°&#214;μ&#184;&#196;±&#228;&#194;&#246;3&#229;&#184;&#246;êy

  Time = Cycle * Pulse_Num;
  Time /= 100;              //&#212;¤·&#214;&#198;μ7200£&#172;100us&#188;&#198;êyò&#187;′&#206;
  TIM4per = Cycle/10;       //&#212;¤·&#214;&#198;μ720£&#172;10us&#188;&#198;êyò&#187;′&#206;

  TIM_SetAutoreload(TIM2, Time+1);//éè&#214;&#195;TIM2μ&#196;&#214;&#216;×°&#214;μ
  TIM_SetAutoreload(TIM4, TIM4per-1);//éè&#214;&#195;TIM3μ&#196;&#214;&#216;×°&#214;μ
  TIM_SetCompare1(TIM4,TIM4per/2);//&#213;&#188;&#191;&#213;±è50%
  TIM_Cmd(TIM2,ENABLE);//ê1&#196;üTIM2
}


把TIM4改成TIM3可以出现脉冲 为什么改成TIM4从定时器没反应  主定时器TIM2有     这是为什么

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。