中级会员
 
- 积分
- 346
- 金钱
- 346
- 注册时间
- 2013-12-20
- 在线时间
- 94 小时
|

楼主 |
发表于 2014-5-30 12:58:01
|
显示全部楼层
有知道的指导下我吧
void timer_initPWM(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseStructure;
TIM_OCInitTypeDef TIM_OcStructure;
TIM_BDTRInitTypeDef TIM_BdtrStructure;
NVIC_InitTypeDef NVICInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
//Kommutierungsinterrupt im NVIC eintragen
NVICInitStructure.NVIC_IRQChannel = TIM1_TRG_COM_IRQn;
NVICInitStructure.NVIC_IRQChannelPreemptionPriority = TIM1_PRE_EMPTION_PRIORITY;
NVICInitStructure.NVIC_IRQChannelSubPriority = TIM1_SUB_PRIORITY;
NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVICInitStructure);
//TMR1 刷新中断
NVICInitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
NVICInitStructure.NVIC_IRQChannelPreemptionPriority = TIM1_PRE_EMPTION_PRIORITY;
NVICInitStructure.NVIC_IRQChannelSubPriority = TIM1_SUB_PRIORITY;
NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVICInitStructure);
//Deinitializes the TIM1 peripheral registers to their default reset values
TIM_DeInit(TIM1);
//(TIM1CLK = SYSCLK = 72MHz) => MAX_PWM_VALUE=3600 => f_PWM=20kHz (unsymmetrische PWM)(50us)
TIM_BaseStructure.TIM_Period = MAX_PWM_VALUE; //自动装载值,累计次数
TIM_BaseStructure.TIM_Prescaler = 0;
TIM_BaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_BaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned2; //TIM1中央对齐模式2
TIM_BaseStructure.TIM_RepetitionCounter = 1;
TIM_TimeBaseInit(TIM1, &TIM_BaseStructure);
//Einstellungen f黵 Kanal 1, 2 und 3 (alle gleich)
TIM_OcStructure.TIM_OCMode = TIM_OCMode_Timing; //TMR1 输出比较时间模式
TIM_OcStructure.TIM_OutputState = TIM_OutputState_Enable; //使能输出比较状态
TIM_OcStructure.TIM_OutputNState = TIM_OutputNState_Enable; //使能输出比较N状态
TIM_OcStructure.TIM_Pulse = 1000; //待装入捕获比较寄存器的脉冲值
TIM_OcStructure.TIM_OCPolarity = TIM_OCPolarity_High; //TMR1输出比较极性高
TIM_OcStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //TMR1输出比较N极性高
TIM_OcStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //当MOE=0设置TIM1输出比较空闲状态
TIM_OcStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set; //当MOE=0设置TIM1输出比较N空闲状态
TIM_OC1Init(TIM1, &TIM_OcStructure);
TIM_OC2Init(TIM1, &TIM_OcStructure);
TIM_OC3Init(TIM1, &TIM_OcStructure);
//Einstellungen f黵 Totzeit und automatische Ausgabe der PWMs
TIM_BdtrStructure.TIM_OSSRState = TIM_OSSRState_Enable; //使能TIM1 OSSR状态
TIM_BdtrStructure.TIM_OSSIState = TIM_OSSIState_Enable; //使能TIM1 OSSI状态
TIM_BdtrStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; //不锁任何位
TIM_BdtrStructure.TIM_DeadTime = 1; //输出打开和关闭状态之间的延时,死区时间
TIM_BdtrStructure.TIM_Break = TIM_Break_Disable; //失能TIM1刹车输入
TIM_BdtrStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; //TIM1刹车输入管脚极性高
TIM_BdtrStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; //自动输出功能使能
TIM_BDTRConfig(TIM1, &TIM_BdtrStructure);
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); //使能刷新中断
TIM_ITConfig(TIM1, TIM_IT_COM, ENABLE); //使能比较
TIM_CCPreloadControl(TIM1, ENABLE); //使能TMR1捕获比较控制位
//TIM1 aktivieren
TIM_Cmd(TIM1, ENABLE); //使能TMR1
//PWM-Ausg鋘ge aktivieren
TIM_CtrlPWMOutputs(TIM1, ENABLE); //使能TIM1的主输出
}
|
|