打印
[STM8]

请问版主stm8定时器的问题

[复制链接]
3151|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myzcp123|  楼主 | 2010-7-28 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次使时STM8看了参考手册但看得一头雾水,因此还是问一问来得直接,
问题一;
使用TIM2或3的定时器输入捕获测量一个方波的高电平宽度,我现在搞得比较复杂,我的方法是:先捕获上升沿中断后再改为捕获下降沿,想看看有没有其它方法,具体代码如下:
(IAR,HSE-8M)
void TIM2SetupInitCCAPModel()//将TIM2设置为输入捕获模式
{   TIM2_PrescalerConfig(TIM2_PRESCALER_8,TIM2_PSCRELOADMODE_IMMEDIATE );
  TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING ,//在上升沿开始计数,中断后在改为下降沿开始捕获
           TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);  //TIM2_ICPSC_DIV1这里这个分频是输入到PD4信号分频
  TIM2_ITConfig(TIM2_IT_CC1, ENABLE);
  TIM2_Cmd(ENABLE);
  TIM2_ClearFlag(TIM2_FLAG_CC1);
}
#pragma vector = ITC_IRQ_TIM2_CAPCOM + 2 //这里有个小小疑问为什么这里要+2呢?
__interrupt void CCAPOnTIM2(void)
{
  if(0 == ICValue1)
  {
    ICValue1 = TIM2_GetCapture1();
    TIM2_ClearFlag(TIM2_FLAG_CC1);
    TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_FALLING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
  }
  else
  {
    ICValue2 = TIM2_GetCapture1();
    TIM2_ClearFlag(TIM2_FLAG_CC1);   
//    sprintf(strBuffer,"V1:%u, V2:%u, %uUs\r\n",ICValue1,ICValue2,ICValue2-ICValue1);
//   SendStr2Uart1(strBuffer);
    TIM2_ICInit(TIM2_CHANNEL_1, TIM2_ICPOLARITY_RISING, TIM2_ICSELECTION_DIRECTTI, TIM2_ICPSC_DIV1, 0x00);
    ICValue1 = 0;
    ICValue2 = 0;   
  }
}

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

本版积分规则

2

主题

7

帖子

0

粉丝