为什么我用定时器8的前4个通道输出4路pwm波,用逻辑分析仪测得4路pwm波的频率和占空比全是乱码

2019-08-16 18:42发布


//这是初始化程序
void TIM8_PWM_Init(u16 Period)//高级定时器
{
        GPIO_InitTypeDef GPIO_InitStruct;//定义GPIO_Init初始化结构体
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定义TIM_TimeBaseInit的初始化结构体
        TIM_OCInitTypeDef TIM_OCInitStruct;//定义TIM_OC1234Init初始化的结构体变量
       

       
        //开启TIM8时钟,配置PC6 7 8 9为复用输出
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);       

        //使能GPIO外设时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
       
        //设置该引脚为复用输出功能,输出 TIM8 CH1234 的PWM脉冲波形
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStruct);
       
       
       
       
       
        //设置TIM8的ARR和PSC
        TIM_TimeBaseInitStruct.TIM_ClockDivision=0;//设置时钟分割(?)
        TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
        TIM_TimeBaseInitStruct.TIM_Period=Period;
        TIM_TimeBaseInitStruct.TIM_Prescaler=71;
        TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStruct);//在tim.h里1055行
       
        //设置 TIM8_CH1234 的PWM模式及通道方向,使能TIM8的CH1输出
        TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//PWM1模式
        TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCPolarity_High;//输出极性为高
        TIM_OCInitStruct.TIM_Pulse=0;//CRRx的值
        TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能       
        TIM_OC1Init(TIM8,&TIM_OCInitStruct);
       
        TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//PWM1模式
        TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCPolarity_High;//输出极性为高
        TIM_OCInitStruct.TIM_Pulse=0;//CRRx的值
        TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能       
        TIM_OC2Init(TIM8,&TIM_OCInitStruct);
       
        TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//PWM1模式
        TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCPolarity_High;//输出极性为高
        TIM_OCInitStruct.TIM_Pulse=0;//CRRx的值
        TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能       
        TIM_OC3Init(TIM8,&TIM_OCInitStruct);
       
        TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//PWM1模式
        TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCPolarity_High;//输出极性为高
        TIM_OCInitStruct.TIM_Pulse=0;//CRRx的值
        TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能       
        TIM_OC4Init(TIM8,&TIM_OCInitStruct);

       
       
        //CH1234预装载使能
        TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);
        TIM_OC4PreloadConfig(TIM8,TIM_OCPreload_Enable);
       
       
       
        //使能TIMx的预装载寄存器
        TIM_ARRPreloadConfig(TIM8,ENABLE);
       
        //使能TIM8
        TIM_Cmd(TIM8,ENABLE);//使能TIM8
       
        //高级定时器-接着弄-设置MOE输出,使能PWM输出
        TIM_CtrlPWMOutputs(TIM8,ENABLE);//tim.h的1068行
}

如果不是初始化错了,有可能是其他什么原因呢?

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