打印
[STM8]

STM8S103K3 输入捕获问题

[复制链接]
3503|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
void Timer1Config(void)
{
TIM1_DeInit();
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_DOWN, 10000, 0);
TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI,  TIM1_ICPSC_DIV8, 0x0);
TIM1_ITConfig(TIM1_IT_CC1, ENABLE);

TIM1_ClearFlag(TIM1_FLAG_CC1);
TIM1_Cmd(ENABLE);
}

这里是我的初始化函数。

#ifdef _COSMIC_
@far @interrupt void TIM1_CAP_COM_IRQHandler(void)
#else /* _RAISONANCE_ */
void TIM1_CAP_COM_IRQHandler(void) interrupt 12
#endif /* _COSMIC_ */
{   
u8 DataCnt  = SetZero;
u16 TempVale = SetZero;

if (TIM1_GetITStatus(TIM1_IT_CC1))
{
  TIM1_ClearFlag(TIM1_FLAG_CC1);
  
  tab = ta/10;
  ta++;
  switch(tab)
  {
   case 0:  
    a[tabc++] = TIM1_GetCapture1();;
   break;
   case 1:
    if (ta==11)
     tabc = 0;
    b[tabc++] = TIM1_GetCapture1();;
   break;
   case 2:
    if (ta==21)
     tabc = 0;
    c[tabc++] = TIM1_GetCapture1();;
   break;
   case 3:
    if (ta==31)
     tabc = 0;
    d[tabc++] = TIM1_GetCapture1();;
    nop();
   break;
   case 4:
    if (ta==41)
     tabc = 0;
    e[tabc++] = TIM1_GetCapture1();;
   break;
   case 5:
    if (ta==51)
     tabc = 0;
    f[tabc++] = TIM1_GetCapture1();;
   break;
   default:
    tab = 0;
    ta = 0;
    tabc = 0;
   break;
  }
}

这里是我的中断服务函数。

我捕获的脉冲是周期1KHZ的方波(信号发生器出来的)

但是在程序抓出来确是2000,我认为正确应该是1000才对;

1.JPG (54.5 KB )

1.JPG
沙发
win2000_li|  楼主 | 2010-8-2 17:37 | 只看该作者
这是怎么回事呢???

请大家指点一二。。。。。。。

使用特权

评论回复
板凳
win2000_li|  楼主 | 2010-8-2 17:42 | 只看该作者
定时器1 CH1通道做为输入捕获,周期为10000,向下计数, 定时器分频为8,滤波为0,

是上升沿捕获!

使用特权

评论回复
地板
CrazyST| | 2010-8-2 18:35 | 只看该作者
是每次都是2000还是先出现2000然后改为1000?

使用特权

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

本版积分规则

142

主题

718

帖子

1

粉丝