初始化定时器功能配置
1 u16 CCR2_Val = 500; 2 u16 CCR3_Val = 500;//占空比,周期为1000 3 4 /*配置TIM1输出的PWM信号的模式,如周期、极性、占空比 */ 5 void TIM1_Mode_Config(void) 6 { 7 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 8 TIM_BDTRInitTypeDef TIM1_BDTRInitStruct; 9 TIM_OCInitTypeDef TIM_OCInitStructure;10 11 /* Time base configuration */12 TIM_TimeBaseStructure.TIM_Period = 1000-1; //计数周期,向上记到此数,计数值清零13 TIM_TimeBaseStructure.TIM_Prescaler = 72-1;//定时器分频系数,Ftimer = 72M/(TIM_Prescaler+1) = 1ms14 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//与死区时间分频有关15 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式16 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);17 18 /****** 配置BDTR寄存器,配置死区时间****************/19 /*20 定时器时钟 72M TIM_ClockDivision = TIM_CKD_DIV1时, Tdts = 13.89ns21 0 - 1.764us 用算法一22 1.778us - 3.505us 用算法二23 3.556us - 7.000us 用算法三 24 7.1117us - 14us 用算法四25 需要更长时间,使用TIM_ClockDivision分频26 */27 TIM1_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Disable;28 TIM1_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Disable;29 TIM1_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;30 TIM1_BDTRInitStruct.TIM_DeadTime = 205; //死区时间 72:1us 172:3us 205:5us31 TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStruct);32 33 // TIM1->BDTR |= 72; //设置死区 注:上面那种方法也可以,这种快且简单34 35 /* PWM1 Mode configuration: Channel2 */36 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//PWM2模式37 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能38 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//比较互补输出使能39 TIM_OCInitStructure.TIM_Pulse = CCR2_Val; //比较值,即占空比40 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性41 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;//互补输出极性42 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//指定空闲状态下的TIM输出比较的引脚状态。43 TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;//指定空闲状态下的TIM互补输出比较的引脚状态。44 TIM_OC2Init(TIM1, &TIM_OCInitStructure); //初始化通道二比较输出45 TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); //配置通道二,自动重装载使能46 47 48 /* PWM1 Mode configuration: Channel3 */49 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;50 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;51 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;52 TIM_OCInitStructure.TIM_Pulse = CCR3_Val;53 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;54 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;55 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;56 TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; 57 TIM_OC3Init(TIM1, &TIM_OCInitStructure);58 TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); 59 60 TIM_ARRPreloadConfig(TIM1, ENABLE);//重载装载值 ENABLE 立即生效,DISABLE 下一个比较周期生效61 62 /* TIM1 enable counter */63 TIM_Cmd(TIM1, ENABLE);//使能定时器164 65 TIM_CtrlPWMOutputs(TIM1, ENABLE);//使能PWM外围输出 66 }
|