[STM8] 请问版主stm8定时器的问题

[复制链接]
3907|0
 楼主| myzcp123 发表于 2010-7-28 11:47 | 显示全部楼层 |阅读模式
第一次使时STM8看了参考手册但看得一头雾水,因此还是问一问来得直接,
问题一;
使用TIM2或3的定时器输入捕获测量一个方波的高电平宽度,我现在搞得比较复杂,我的方法是:先捕获上升沿中断后再改为捕获下降沿,想看看有没有其它方法,具体代码如下:
  1. (IAR,HSE-8M)
  2. void TIM2SetupInitCCAPModel()//将TIM2设置为输入捕获模式
  3. {   TIM2_PrescalerConfig(TIM2_PRESCALER_8,TIM2_PSCRELOADMODE_IMMEDIATE );
  4.   TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING ,//在上升沿开始计数,中断后在改为下降沿开始捕获
  5.            TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);  //TIM2_ICPSC_DIV1这里这个分频是输入到PD4信号分频
  6.   TIM2_ITConfig(TIM2_IT_CC1, ENABLE);
  7.   TIM2_Cmd(ENABLE);
  8.   TIM2_ClearFlag(TIM2_FLAG_CC1);
  9. }
  10. #pragma vector = ITC_IRQ_TIM2_CAPCOM + 2 //这里有个小小疑问为什么这里要+2呢?
  11. __interrupt void CCAPOnTIM2(void)
  12. {
  13.   if(0 == ICValue1)
  14.   {
  15.     ICValue1 = TIM2_GetCapture1();
  16.     TIM2_ClearFlag(TIM2_FLAG_CC1);
  17.     TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_FALLING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
  18.   }
  19.   else
  20.   {
  21.     ICValue2 = TIM2_GetCapture1();
  22.     TIM2_ClearFlag(TIM2_FLAG_CC1);   
  23. //    sprintf(strBuffer,"V1:%u, V2:%u, %uUs\r\n",ICValue1,ICValue2,ICValue2-ICValue1);
  24. //   SendStr2Uart1(strBuffer);
  25.     TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
  26.     ICValue1 = 0;
  27.     ICValue2 = 0;   
  28.   }
  29. }

问题二;
  怎么设置把TIM为计数器即计算外部方波的个数?
问题三;
   TIM2->CCR1H与 TIM2->CCR1L;里所捕获到的值怎么才能让它归零?
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部