|
用TIM1输出400Hz的PWM,TIM_Period设置为1000 ,在主程序中每隔4ms,CCR2的值自加1。但是输出的PWM占空比并不是每隔4ms左右更新一次,而是隔0.5s更新一次。
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- uint16_t PrescalerValue = 0;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
-
- PrescalerValue = (uint16_t) (SystemCoreClock / 250000) - 1; //Ô¤·ÖƵϵÊý 400 000
- TIM_TimeBaseStructure.TIM_Period = 999; //¼ÆÊýÉÏÏß
- TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; //pwmʱÖÓ·ÖƵ
- TIM_TimeBaseStructure.TIM_ClockDivision = 0;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊý
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
-
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_Pulse = 249; //³õʼռ¿Õ±È1ms
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- TIM_OC2Init(TIM1, &TIM_OCInitStructure);
- TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
- TIM_OC3Init(TIM1, &TIM_OCInitStructure);
- TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
-
- TIM_ARRPreloadConfig(TIM1, ENABLE);
- TIM_Cmd(TIM1, ENABLE);
- TIM_CtrlPWMOutputs(TIM1,ENABLE);
复制代码
主程序
- while(1)
- {
- TIM1->CCR2++;
- if(TIM1->CCR2==999)
- {
- TIM1->CCR2=0;
- }
- delay_ms(4);
- }
复制代码
这段程序用TIM4输出时是正常的。不知道大家是否遇到过这种情况,恳请会的朋友可以指点下 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|