renyaq 发表于 2023-2-26 16:30

中心对齐波形出不来

TIM1 PWM
源代码:
{
    TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;                           //基本结构体变量定义
    TIM_OCInitTypeDefTIM_OCInitStructure;                     //输出结构体变量定义
    TIM_BDTRInitTypeDefTIM_BDTRInitStructure;                                 //死区刹车结构体变量定义

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

    // PA8 9 10 PB 13 14 15 复用
    {
      GPIO_InitTypeDef GPIO_InitStructure;

      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9| GPIO_Pin_10;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_Init(GPIOA,&GPIO_InitStructure);

      __bic(BIT_16(8)|BIT_16(9)|BIT_16(10), GPIOA->ODR);//缺省输出

      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
      GPIO_Init(GPIOB,&GPIO_InitStructure);
      __bis(BIT_16(13)|BIT_16(14)|BIT_16(15), GPIOB->ODR);//缺省输出
    }

    TIM_DeInit(TIM1);

    TIM_TimeBaseStructure.TIM_Prescaler = 0;                                           //TIM基本初始化
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned2;//中央对齐计数模式
    TIM_TimeBaseStructure.TIM_Period = 128*2;                                           //PWM 16K
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                  //TIM输出通道初始化
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;                  
    TIM_OCInitStructure.TIM_Pulse =128;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;         
    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;         

    TIM_OC1Init(TIM1,&TIM_OCInitStructure);

    TIM_OCInitStructure.TIM_Pulse =128/2;
    TIM_OC2Init(TIM1,&TIM_OCInitStructure);

    TIM_OCInitStructure.TIM_Pulse =128/2*3;
    TIM_OC3Init(TIM1,&TIM_OCInitStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                  //TIM输出通道4初始化,用来触发AD注入采样
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;                  
    TIM_OCInitStructure.TIM_Pulse =128;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;         

    TIM_OC4Init(TIM1,&TIM_OCInitStructure);

    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;      //死区刹车初始化
    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
    TIM_BDTRInitStructure.TIM_DeadTime = 4;
    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;         //如打开,开机无输出且状态紊乱????
    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;

    TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);

    TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能捕获比较寄存器预装载(通道1)

    TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道2)

    TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);         //使能捕获比较寄存器预装载(通道3)

    TIM_SelectInputTrigger(TIM1, TIM_TS_ITR2);      //输入触发源选择TIM3   

    //TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);//从模式选择 触发         

    TIM_CtrlPWMOutputs(TIM1,ENABLE);

    TIM_Cmd(TIM1,ENABLE);
}

renyaq 发表于 2023-2-26 16:37

输出波形PA8,PA9

wyjie 发表于 2023-2-26 16:39

寄存器呢

renyaq 发表于 2023-2-26 16:41

TIM1寄存器状态

zhanglli 发表于 2023-2-26 16:44


贴个对的代码出来看看。

songqian17 发表于 2023-2-26 16:48

ST各个系列固件库里都有例程,稍微改改计数器模式为中心对齐模式就可以自己验证了。

wyjie 发表于 2023-2-26 16:49

其他对齐方式就可以出波形吗
页: [1]
查看完整版本: 中心对齐波形出不来