硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5281|回复: 11
收起左侧

[有问必答] STM32F407 定时器1 PWM 输出问题

[复制链接]

4

主题

22

回帖

34

积分

新手上路

积分
34
发表于 2020-3-13 15:47:11 | 显示全部楼层 |阅读模式
最近调试STM32F407 多路PWM输出,现在遇到一个问题:
我的工程中要输出18路PWM,其中定时器1我用CH1,CH2,CH3,CH4,同样设置只有CH4输出,CH1,CH2,CH3都没有输出,其他定时器的输出也正常;
CH1,CH2,CH3,硬件电路没有问题,初始化程序如下:
void PwmAInit(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;

  uint16_t usPeriod;
  uint16_t usPrescaler;
  uint32_t uiTIMxCLK;

  char i;


  RCC_APB2PeriphClockCmd(bsp_GetRCCofTIM(TIM1), ENABLE);//打开定时器时钟
  RCC_APB2PeriphClockCmd(bsp_GetRCCofTIM(TIM8), ENABLE);
  RCC_APB2PeriphClockCmd(bsp_GetRCCofTIM(TIM9), ENABLE);

  RCC_APB1PeriphClockCmd(bsp_GetRCCofTIM(TIM4), ENABLE);
  RCC_APB1PeriphClockCmd(bsp_GetRCCofTIM(TIM5), ENABLE);
  RCC_APB1PeriphClockCmd(bsp_GetRCCofTIM(TIM12), ENABLE);


    uiTIMxCLK = SystemCoreClock;


   if((PWMFREG_DEF/1000)>0)//1k---10k
  {
    usPrescaler= 8 ;
    usPeriod =21000000/PWMFREG_DEF ;   
  }
  else if((PWMFREG_DEF/100)>0)//100-1k
  {
    usPrescaler= 168;
    usPeriod =1000000/PWMFREG_DEF ;  
  }
  else if((PWMFREG_DEF/10)>0)//10--100
  {
    usPrescaler= 1680 ;
    usPeriod =100000/PWMFREG_DEF ;  
  }
  else //0-10
  {
    usPrescaler= 16800 ;
    usPeriod =10000/PWMFREG_DEF ;   
  }


   for(i=0;i< MAXCH ;i++)//设置 IO,周期,占空比
  {
    SetPwmGpio(i);
    PWM_ARR[i]= usPeriod ;
    pud[i]=0;
  }

  /* Time base configuration */

        TIM_TimeBaseStructure.TIM_Period = usPeriod-1;  //设置定时器
        TIM_TimeBaseStructure.TIM_Prescaler = usPrescaler-1;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
        TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
        TIM_TimeBaseInit(TIM9, &TIM_TimeBaseStructure);

       TIM_TimeBaseStructure.TIM_Period = usPeriod-1;
       TIM_TimeBaseStructure.TIM_Prescaler = usPrescaler/2-1;
       TIM_TimeBaseStructure.TIM_ClockDivision = 0;
       TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
        TIM_TimeBaseInit(TIM12, &TIM_TimeBaseStructure);

        /* PWM1 Mode configuration: Channel1 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //设置PWM
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = pud[0] ; //(usPeriod +1)/ 2;// 占空比
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

                TIM_OC1Init(TIM9, &TIM_OCInitStructure);
                TIM_OC1PreloadConfig(TIM9, TIM_OCPreload_Enable);
                TIM_OC2Init(TIM9, &TIM_OCInitStructure);
                TIM_OC2PreloadConfig(TIM9, TIM_OCPreload_Enable);

                TIM_OC1Init(TIM1, &TIM_OCInitStructure);
                TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
                TIM_OC2Init(TIM1, &TIM_OCInitStructure);
                TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
                TIM_OC3Init(TIM1, &TIM_OCInitStructure);
                TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
                TIM_OC4Init(TIM1, &TIM_OCInitStructure);
                TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);

                TIM_OC1Init(TIM12, &TIM_OCInitStructure);
                TIM_OC1PreloadConfig(TIM12, TIM_OCPreload_Enable);
                TIM_OC2Init(TIM12, &TIM_OCInitStructure);
                TIM_OC2PreloadConfig(TIM12, TIM_OCPreload_Enable);

                TIM_OC1Init(TIM5, &TIM_OCInitStructure);
                TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);
                TIM_OC2Init(TIM5, &TIM_OCInitStructure);
                TIM_OC2PreloadConfig(TIM5, TIM_OCPreload_Enable);
                TIM_OC3Init(TIM5, &TIM_OCInitStructure);
                TIM_OC3PreloadConfig(TIM5, TIM_OCPreload_Enable);

                TIM_OC1Init(TIM4, &TIM_OCInitStructure);
                TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
                TIM_OC2Init(TIM4, &TIM_OCInitStructure);
                TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
                TIM_OC3Init(TIM4, &TIM_OCInitStructure);
                TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
                TIM_OC4Init(TIM4, &TIM_OCInitStructure);
                TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);

                TIM_OC1Init(TIM8, &TIM_OCInitStructure);
                TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);
                TIM_OC2Init(TIM8, &TIM_OCInitStructure);
                TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
                TIM_OC3Init(TIM8, &TIM_OCInitStructure);
                TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);
                TIM_OC4Init(TIM8, &TIM_OCInitStructure);
                TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);

                TIM_ARRPreloadConfig(TIM9, ENABLE);
                TIM_Cmd(TIM9, ENABLE);
                TIM_ARRPreloadConfig(TIM1, ENABLE);
                TIM_Cmd(TIM1, ENABLE);
                TIM_ARRPreloadConfig(TIM12, ENABLE);
                TIM_Cmd(TIM12, ENABLE);
                TIM_ARRPreloadConfig(TIM5, ENABLE);
                TIM_Cmd(TIM5, ENABLE);
                TIM_ARRPreloadConfig(TIM4, ENABLE);
                TIM_Cmd(TIM4, ENABLE);
                TIM_ARRPreloadConfig(TIM8, ENABLE);
                TIM_Cmd(TIM8, ENABLE);


                TIM_CtrlPWMOutputs(TIM1, ENABLE);
                TIM_CtrlPWMOutputs(TIM8, ENABLE);
       
}

求各位大侠帮忙指点,谢谢!


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2020-3-13 16:06:27 | 显示全部楼层
引脚配置没问题吧,发出来看下,仅看你的这些代码,没发现什么问题。
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2020-3-13 17:27:05 | 显示全部楼层


const PWMTYPE pwmconfig[MAXCH]={
  {GPIOE,GPIO_Pin_5,TIM9,PWMCH1},  //PWM1
  {GPIOE,GPIO_Pin_6,TIM9,PWMCH2},  //PWM2
  {GPIOE,GPIO_Pin_9,TIM1,PWMCH1},  //PWM3
  {GPIOE,GPIO_Pin_11,TIM1,PWMCH2},  //PWM4
  {GPIOE,GPIO_Pin_13,TIM1,PWMCH3},  //PWM5
  {GPIOE,GPIO_Pin_14,TIM1,PWMCH4},  //PWM6
  {GPIOH,GPIO_Pin_6,TIM12,PWMCH1},  //PWM7
  {GPIOH,GPIO_Pin_9,TIM12,PWMCH2},  //PWM8
  {GPIOH,GPIO_Pin_10,TIM5,PWMCH1},  //PWM9
  {GPIOH,GPIO_Pin_11,TIM5,PWMCH2},  //PWM10
  {GPIOH,GPIO_Pin_12,TIM5,PWMCH3},  //PWM11
  {GPIOD,GPIO_Pin_12,TIM4,PWMCH1},  //PWM12
  {GPIOD,GPIO_Pin_13,TIM4,PWMCH2},  //PWM13
  {GPIOD,GPIO_Pin_14,TIM4,PWMCH3},  //PWM14
  {GPIOD,GPIO_Pin_15,TIM4,PWMCH4},  //PWM15
  {GPIOC,GPIO_Pin_6,TIM8,PWMCH1},  //PWM16
  {GPIOC,GPIO_Pin_7,TIM8,PWMCH2},  //PWM17
  {GPIOC,GPIO_Pin_8,TIM8,PWMCH3},  //PWM18
  {GPIOI,GPIO_Pin_2,TIM8,PWMCH4}  //PWM19
  //{GPIOE,GPIO_Pin_6,TIM9,PWMCH2},  //PWM20
};


void SetPwmGpio(char ch)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
   PWMTYPE SetGpioreg;
   SetGpioreg = pwmconfig[ch] ;
  /* 配置GPIO */
        GPIO_InitStructure.GPIO_Pin = SetGpioreg.pin;        /* 带入的形参 */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        GPIO_Init(SetGpioreg.IOPORT, &GPIO_InitStructure);
        
        GPIO_PinAFConfig(SetGpioreg.IOPORT,bsp_GetPinSource( SetGpioreg.pin), bsp_GetAFofTIM(SetGpioreg.TIMx));
         
}
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2020-3-13 17:28:12 | 显示全部楼层
const PWMTYPE pwmconfig[MAXCH]={
  {GPIOE,GPIO_Pin_5,TIM9,PWMCH1},  //PWM1
  {GPIOE,GPIO_Pin_6,TIM9,PWMCH2},  //PWM2
  {GPIOE,GPIO_Pin_9,TIM1,PWMCH1},  //PWM3
  {GPIOE,GPIO_Pin_11,TIM1,PWMCH2},  //PWM4
  {GPIOE,GPIO_Pin_13,TIM1,PWMCH3},  //PWM5
  {GPIOE,GPIO_Pin_14,TIM1,PWMCH4},  //PWM6
  {GPIOH,GPIO_Pin_6,TIM12,PWMCH1},  //PWM7
  {GPIOH,GPIO_Pin_9,TIM12,PWMCH2},  //PWM8
  {GPIOH,GPIO_Pin_10,TIM5,PWMCH1},  //PWM9
  {GPIOH,GPIO_Pin_11,TIM5,PWMCH2},  //PWM10
  {GPIOH,GPIO_Pin_12,TIM5,PWMCH3},  //PWM11
  {GPIOD,GPIO_Pin_12,TIM4,PWMCH1},  //PWM12
  {GPIOD,GPIO_Pin_13,TIM4,PWMCH2},  //PWM13
  {GPIOD,GPIO_Pin_14,TIM4,PWMCH3},  //PWM14
  {GPIOD,GPIO_Pin_15,TIM4,PWMCH4},  //PWM15
  {GPIOC,GPIO_Pin_6,TIM8,PWMCH1},  //PWM16
  {GPIOC,GPIO_Pin_7,TIM8,PWMCH2},  //PWM17
  {GPIOC,GPIO_Pin_8,TIM8,PWMCH3},  //PWM18
  {GPIOI,GPIO_Pin_2,TIM8,PWMCH4}  //PWM19
  //{GPIOE,GPIO_Pin_6,TIM9,PWMCH2},  //PWM20
};

void SetPwmGpio(char ch)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
   PWMTYPE SetGpioreg;
   SetGpioreg = pwmconfig[ch] ;
  /* 配置GPIO */
        GPIO_InitStructure.GPIO_Pin = SetGpioreg.pin;        /* 带入的形参 */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        GPIO_Init(SetGpioreg.IOPORT, &GPIO_InitStructure);
        
        GPIO_PinAFConfig(SetGpioreg.IOPORT,bsp_GetPinSource( SetGpioreg.pin), bsp_GetAFofTIM(SetGpioreg.TIMx));
         
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2020-3-13 17:44:22 | 显示全部楼层
没问题,试试单独测试TIM1的CH1,CH2或者CH3是否正常。
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2020-3-16 14:38:46 | 显示全部楼层

我按下面这样初始化后4路都有输出,但CH4的占空比却与CH1,CH2,CH3 是反的,例如 CH1,CH2,CH3占空比数据增大,占空比也是增大的;CH4占空比数据增大,占空比却是减小的。
void TIM1_PWM_Init(u16 arr,u16 psc)
{     
    GPIO_InitTypeDef  GPIO_InitStructure;        
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
     
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);    //TIM1时钟使能  
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);   //使能PORTA时钟
        
     GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);  //GPIOA8复用为定时器1
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1);        //GPIOA9复用为定时器1
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_TIM1);        //GPIOA10复用为定时器1
        GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_TIM1);        //GPIOA11复用为定时器1        
     
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_11;          //GPIOA8,GPIOA9,GPIOA10,GPIOA11
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;       //复用功能
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP ;//GPIO_OType_PP;     //推挽复用输出
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//GPIO_PuPd_NOPULL;   //不上下拉
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
    GPIO_Init(GPIOE,&GPIO_InitStructure);              //初始化PA8,PA9,PA10,PA11
     
        TIM_TimeBaseStructure.TIM_Prescaler = psc;                                     //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;            //向上计数模式
        TIM_TimeBaseStructure.TIM_Period = arr;                                //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;        
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);                           //初始化定时器1
               
    //初始化TIM1 Channel1,2,3,4 PWM模式        
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                             //选择定时器模式:TIM脉冲宽度调制模式2
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;          //比较输出使能
    TIM_OCInitStructure.TIM_Pulse = arr;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                  //输出极性高

        TIM_OC1Init(TIM1, &TIM_OCInitStructure);    //根据T指定的参数初始化外设OC1
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);        //根据T指定的参数初始化外设OC2
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);    //根据T指定的参数初始化外设OC3
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);         //根据T指定的参数初始化外设OC4
        
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);   //使能TIM1在CCR1上的预装载寄存器
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);        //使能TIM1在CCR2上的预装载寄存器
        TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);        //使能TIM1在CCR3上的预装载寄存器
        TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);        //使能TIM1在CCR4上的预装载寄存器
        
        TIM_ARRPreloadConfig(TIM1,ENABLE);                        //ARPE使能
        TIM_CtrlPWMOutputs(TIM1,ENABLE);                         //使能TIM1的PWM输出
        TIM_Cmd(TIM1,ENABLE);                                                //使能TIM1                        
}

void pwmtest(void)
{
       TIM1_PWM_Init(500-1,168-1);        //168M/168=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
        TIM_SetCompare1(TIM1,250);        //修改占空比
        TIM_SetCompare2(TIM1,250);        //修改占空比   
        TIM_SetCompare3(TIM1,250);        //修改占空比
        TIM_SetCompare4(TIM1,250);        //修改占空比
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2020-3-16 14:45:26 | 显示全部楼层
louwenyan 发表于 2020-3-16 14:38
我按下面这样初始化后4路都有输出,但CH4的占空比却与CH1,CH2,CH3 是反的,例如 CH1,CH2,CH3占空比数据增 ...

这两个:

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

修改为全局变量,不要用局部变量,对于TIM1来说里面还有几个参数要配置,如果你不设置会初始化成随机值。
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2020-3-16 14:54:02 | 显示全部楼层
我改为输出极性为低时,4路输出就都正常了
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ;
回复

使用道具 举报

4

主题

22

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2020-3-16 15:55:49 | 显示全部楼层
eric2013 发表于 2020-3-16 14:45
这两个:

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

谢谢,eric2013 的帮助,真如您所说的那样,所有问题出在   TIM_OCInitStructure局部变量没有初始化上,初始化后定时器1的4个通道PWM输出就都正常了!
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2022-7-23 10:50:49 | 显示全部楼层
louwenyan 发表于 2020-3-16 15:55
谢谢,eric2013 的帮助,真如您所说的那样,所有问题出在   TIM_OCInitStructure局部变量没有初始化上, ...

请问怎么初始化呀?遇到类似问题(谢谢你)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2022-7-23 11:14:59 | 显示全部楼层
帝二蛤 发表于 2022-7-23 10:50
请问怎么初始化呀?遇到类似问题(谢谢你)

局部变量初始化的话,这么写就行。

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure = {0};
TIM_OCInitTypeDef  TIM_OCInitStructure = {0};
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2022-7-24 10:36:55 | 显示全部楼层
eric2013 发表于 2022-7-23 11:14
局部变量初始化的话,这么写就行。

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure = {0};

void TIM4_PWM_Init(u16 arr,u16 psc )
{                                                          
        //此部分需手动修改IO口设置
        GPIO_InitTypeDef GPIO_InitStructure={0};
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure={0};
        TIM_OCInitTypeDef  TIM_OCInitStructure={0};

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//TIM4时钟使能
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能PORTB时钟            

       
        // 输出比较复用引脚映射到TIM4
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4);// CH1
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4);// CH2
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_TIM4);// CH3
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_TIM4);// CH4
        //TIM4_CH1 CH2 CH3 CH4
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//GPIOB...               
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能       
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //上拉
        GPIO_Init(GPIOB, &GPIO_InitStructure);       
       
        TIM_TimeBaseStructure.TIM_Prescaler = psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_Period = arr;   //自动重装载值      
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //向上计数模式
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//        TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);//初始化定时器4
       

       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
//        TIM_OCInitStructure.TIM_Pulse = 0;//可       
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低

        TIM_OC1Init(TIM4, &TIM_OCInitStructure);//根据指定的参数初始化外设TIM4_OC1
        TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器
       
        TIM_OC2Init(TIM4, &TIM_OCInitStructure);//根据指定的参数初始化外设TIM4_OC2
        TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器
       
        TIM_OC3Init(TIM4, &TIM_OCInitStructure);//根据指定的参数初始化外设TIM4_OC3
        TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器
       
        TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器
        TIM_OC4Init(TIM4, &TIM_OCInitStructure);//根据指定的参数初始化外设TIM4_OC4       
               
        TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能
        TIM_Cmd(TIM4,ENABLE);//使能TIM4       

}
我这么写,但是没有输出
求救
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-24 08:22 , Processed in 0.286322 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表