STM32 TIM1 三相桥互补输出,带死区设置(欢迎拍砖)
发布: 2008-9-11 16:28 | 作者: nomoneyiv | 来源: StmFans思蜕盟 OPELC 自由电子联盟
void TIM1_Configuration( void )
{
/* TIM1 Peripheral Configuration */
TIM1_DeInit();
/* Time Base configuration */
TIM1_TimeBaseStructure.TIM1_Prescaler = 0;
TIM1_TimeBaseStructure.TIM1_CounterMode = TIM1_CounterMode_Up;
TIM1_TimeBaseStructure.TIM1_Period = (pluse_period - 1);
TIM1_TimeBaseStructure.TIM1_ClockDivision = 0;
TIM1_TimeBaseStructure.TIM1_RepetitionCounter = 0;
TIM1_TimeBaseInit(&TIM1_TimeBaseStructure);
/* Channel 1, 2, 3 Configuration in PWM mode */
TIM1_OCInitStructure.TIM1_OCMode = TIM1_OCMode_PWM2;
TIM1_OCInitStructure.TIM1_OutputState = TIM1_OutputState_Disable;
TIM1_OCInitStructure.TIM1_OutputNState = TIM1_OutputNState_Disable;
TIM1_OCInitStructure.TIM1_Pulse = CCR1_Val;
TIM1_OCInitStructure.TIM1_OCPolarity = TIM1_OCPolarity_Low;
TIM1_OCInitStructure.TIM1_OCNPolarity = TIM1_OCNPolarity_High;
TIM1_OCInitStructure.TIM1_OCIdleState = TIM1_OCIdleState_Set;
TIM1_OCInitStructure.TIM1_OCNIdleState = TIM1_OCIdleState_Reset;
TIM1_OC1Init(&TIM1_OCInitStructure);
TIM1_OCInitStructure.TIM1_Pulse = CCR2_Val;
TIM1_OC2Init(&TIM1_OCInitStructure);
TIM1_OCInitStructure.TIM1_Pulse = CCR3_Val;
TIM1_OC3Init(&TIM1_OCInitStructure);
/* Automatic Output enable, Break, dead time and lock configuration*/
TIM1_BDTRInitStructure.TIM1_OSSRState = TIM1_OSSRState_Enable;
TIM1_BDTRInitStructure.TIM1_OSSIState = TIM1_OSSIState_Enable;
TIM1_BDTRInitStructure.TIM1_LOCKLevel = TIM1_LOCKLevel_1;
TIM1_BDTRInitStructure.TIM1_DeadTime = 0x1f;
TIM1_BDTRInitStructure.TIM1_Break = TIM1_Break_Disable;
TIM1_BDTRInitStructure.TIM1_BreakPolarity = TIM1_BreakPolarity_High;
TIM1_BDTRInitStructure.TIM1_AutomaticOutput = TIM1_AutomaticOutput_Enable;
TIM1_BDTRConfig(&TIM1_BDTRInitStructure);
/* TIM1 counter enable */
TIM1_Cmd(ENABLE);
TIM1_ITConfig(TIM1_IT_Update, ENABLE);
/* Main Output Enable */
TIM1_CtrlPWMOutputs(DISABLE);
TIM1_CtrlPWMOutputs(ENABLE);
}
{
/* TIM1 Peripheral Configuration */
TIM1_DeInit();
/* Time Base configuration */
TIM1_TimeBaseStructure.TIM1_Prescaler = 0;
TIM1_TimeBaseStructure.TIM1_CounterMode = TIM1_CounterMode_Up;
TIM1_TimeBaseStructure.TIM1_Period = (pluse_period - 1);
TIM1_TimeBaseStructure.TIM1_ClockDivision = 0;
TIM1_TimeBaseStructure.TIM1_RepetitionCounter = 0;
TIM1_TimeBaseInit(&TIM1_TimeBaseStructure);
/* Channel 1, 2, 3 Configuration in PWM mode */
TIM1_OCInitStructure.TIM1_OCMode = TIM1_OCMode_PWM2;
TIM1_OCInitStructure.TIM1_OutputState = TIM1_OutputState_Disable;
TIM1_OCInitStructure.TIM1_OutputNState = TIM1_OutputNState_Disable;
TIM1_OCInitStructure.TIM1_Pulse = CCR1_Val;
TIM1_OCInitStructure.TIM1_OCPolarity = TIM1_OCPolarity_Low;
TIM1_OCInitStructure.TIM1_OCNPolarity = TIM1_OCNPolarity_High;
TIM1_OCInitStructure.TIM1_OCIdleState = TIM1_OCIdleState_Set;
TIM1_OCInitStructure.TIM1_OCNIdleState = TIM1_OCIdleState_Reset;
TIM1_OC1Init(&TIM1_OCInitStructure);
TIM1_OCInitStructure.TIM1_Pulse = CCR2_Val;
TIM1_OC2Init(&TIM1_OCInitStructure);
TIM1_OCInitStructure.TIM1_Pulse = CCR3_Val;
TIM1_OC3Init(&TIM1_OCInitStructure);
/* Automatic Output enable, Break, dead time and lock configuration*/
TIM1_BDTRInitStructure.TIM1_OSSRState = TIM1_OSSRState_Enable;
TIM1_BDTRInitStructure.TIM1_OSSIState = TIM1_OSSIState_Enable;
TIM1_BDTRInitStructure.TIM1_LOCKLevel = TIM1_LOCKLevel_1;
TIM1_BDTRInitStructure.TIM1_DeadTime = 0x1f;
TIM1_BDTRInitStructure.TIM1_Break = TIM1_Break_Disable;
TIM1_BDTRInitStructure.TIM1_BreakPolarity = TIM1_BreakPolarity_High;
TIM1_BDTRInitStructure.TIM1_AutomaticOutput = TIM1_AutomaticOutput_Enable;
TIM1_BDTRConfig(&TIM1_BDTRInitStructure);
/* TIM1 counter enable */
TIM1_Cmd(ENABLE);
TIM1_ITConfig(TIM1_IT_Update, ENABLE);
/* Main Output Enable */
TIM1_CtrlPWMOutputs(DISABLE);
TIM1_CtrlPWMOutputs(ENABLE);
}

