打印
[STM32F1]

中心对齐波形出不来

[复制链接]
623|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2016-10-29 23:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TIM1 PWM
源代码:
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                           //基本结构体变量定义
    TIM_OCInitTypeDef  TIM_OCInitStructure;                     //输出结构体变量定义
    TIM_BDTRInitTypeDef  TIM_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|  楼主 | 2016-10-29 23:08 | 只看该作者
输出波形PA8,PA9

使用特权

评论回复
板凳
liuzaiy| | 2016-10-29 23:09 | 只看该作者
寄存器呢

使用特权

评论回复
地板
renyaq|  楼主 | 2016-10-29 23:10 | 只看该作者
TIM1寄存器状态

使用特权

评论回复
5
renyaq|  楼主 | 2016-10-29 23:10 | 只看该作者
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
6
gejigeji521| | 2016-10-30 11:43 | 只看该作者
把搞好的代码贴来学习学习。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝