打印

定时器溢出和4个比较通道能实现5个不同时间的中断么?

[复制链接]
2906|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hackthree|  楼主 | 2011-2-11 14:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
还是定时器的问题,前几天提出的那个问题,没人回答,自己捣鼓了几天,发现,貌似是定时器TIM2的溢出和4个比较通道不能得出不同时间的中断。。无论怎么定义,那四个比较通道的中断时间都取决于TIM2 的溢出中断时间,很费解。。
下面贴上我的TIM配置函数:(系统时钟用的20M)
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
u16 CCR1_Val = 1000;//定时器计数值1
u16 CCR2_Val = 800; //定时器计数值2
u16 CCR3_Val = 500; //定时器计数值3
u16 CCR4_Val = 100;  //定时器计数值4

/* TIM2 clock enable */
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* 基础设置*/


TIM_TimeBaseStructure.TIM_Period = 10000;   //计数值 ,系统时钟用的20M,所以溢出是1S。。  
TIM_TimeBaseStructure.TIM_Prescaler = 2000-1;     //预分频,此值+1为分频的除数
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   //
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

/* 比较通道1*/
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive;        //输出比较非主动模式
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;  
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //极性为正
   
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);    //禁止OC1重装载,其实可以省掉这句,因为默认是4路都不重装的.

/*比较通道2 */        
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;  

TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);

/* 比较通道3 */         
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;  

TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);

/* 比较通道4 */      
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;  

TIM_OC4Init(TIM2, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable);

/*使能预装载*/
TIM_ARRPreloadConfig(TIM2, ENABLE);
/*预先清除所有中断位*/
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update);
/* 4个通道和溢出都配置中断*/
TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update, ENABLE);


/* 允许TIM2开始计数 */
TIM_Cmd(TIM2, ENABLE);
}

中断处理函数里面,每个比较通道里放的是以个自加1计数的函数,按理说,每个计数的速度应该不一样,可是实际调试却是每个都是1秒一跳变。。
这是为什么?

初学STM32,还请各位指教。。
沙发
32446975| | 2011-2-24 21:25 | 只看该作者
4个比较匹配是不一样,但是定时器的计数周期是一样的。

使用特权

评论回复
板凳
airwill| | 2011-2-24 22:17 | 只看该作者
你可能没有理解比较匹配的实质吧.
定时器只有一个计数器, 四个比较器跟计数器比较, 相等时产生中断.
所以比较匹配中断和溢出中断的频率是一样的.只是相位上的差别.

使用特权

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

本版积分规则

1

主题

220

帖子

1

粉丝