打印
[STM8]

tim5 捕获中断的问题。

[复制链接]
2079|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
28182900|  楼主 | 2016-5-24 13:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 28182900 于 2016-5-26 09:20 编辑

定时器配置如下
TIM5_CAP_Init(3,0XFFFF);

void TIM5_CAP_Init(unsigned char psc,unsigned int arr)
{
  TIM5_PSCR = 0X0E;
  TIM5_CCER1 &= 0XEE;   // 禁止输入捕获 1,2
  TIM5_CCER2 &= 0XFE;   // 禁止输入捕获 3

  TIM5_CCMR1 |= 0x01;   // ch1到ti1fp1
  TIM5_CCER1 |= 0x02;   // ch1 下降沿触发

  TIM5_CCMR3 |= 0x01;   // ch3选择 ti1fp2上
  TIM5_CCER2 |= 0x02;   // ch3 下降沿触发 ic2

  TIM5_SMCR  |= 0X04;   // 选源触发源和触发方式 复位
  TIM5_IER |= 0x0a;     // 使能中断ch1 ch3

  TIM5_CCER1 |= 0x01;   // 使能输入捕获 1
  TIM5_CCER2 |= 0X01;   // 使能输入捕获 3 1111 1101

  TIM5_CNTRH = TIM5_CNTRL = 0;
  TIM5_CR1 = 0x03;      // Enabled update request source;Counter enabled;
}


#pragma   vector = TIM5_CAPCOM_TIF_vector
__interrupt void TIM5_CAPCOM_TIF(void)
{
  static unsigned int i = 0,j = 0;

  //i = (unsigned int)(8<<TIM5_CCR3H);
  //i |= (unsigned int)(TIM5_CCR3L);

  if(TIM5_SR1 & 0x02)                 //红外
  {
    if( TIM5_CCER1 & 0x02)              //下降沿产生的中断
    {
      i = 0;
      i = ( TIM5_CCR1H << 8 );
      i |= TIM5_CCR1L;  
      //TIM5_CNTRH = TIM5_CNTRL = 0;
      TIM5_CCER1 &=~ 0x02;              //改为上升沿捕获
    }
    else                               //上升沿产生的中断
    {
      j = 0;
      j = ( TIM5_CCR1H << 8 );
      j |= TIM5_CCR1L;      
      //TIM5_CNTRH = TIM5_CNTRL = 0;
      TIM5_CCER1 |= 0x02;               //改为下降沿捕获
      //uiTenor |= TM1_CAP_FLAG;        //一段低电平时间捕获
    }
    TIM5_CNTRH = 0;
    TIM5_CNTRL = 0;
  }
  if(TIM5_SR1 & 0x08)                   //FG
  {
    if(TIM5_CCER2 & 0x02)               //下降沿产生的中断
    {
      i = ( TIM5_CCR3H << 8 );
      i |= TIM5_CCR3H;  

      TIM5_CCER2 &=~ 0x02;              //改为上升沿捕获
    }
    else                               //上升沿产生的中断  
    {
      j = (TIM5_CCR3H << 8);
      j |= TIM5_CCR3L;      

      TIM5_CCER2 |= 0x02;               //改为下降沿捕获
      //uiTenor |= TM1_CAP_FLAG;        //一段低电平时间捕获
    }
  }
}//*/


TIM5_CCR1H和TIM5_CCR1L的值读出来不对,不管怎么调整预分频系数TIM5_CCR1H和TIM5_CCR1L的值都不会变化,求大师指点。
沙发
mmuuss586| | 2016-5-24 13:52 | 只看该作者
什么问题呢?

使用特权

评论回复
评论
28182900 2016-5-24 14:27 回复TA
死活不进中断,求大师指点。 
板凳
28182900|  楼主 | 2016-5-25 08:46 | 只看该作者
本帖最后由 28182900 于 2016-5-25 10:04 编辑

可以进入捕获中断,但是ccr寄存器的值是空的,这是什么原因啊?@王奉瑾 @airwill @pa2792 @水工鸟 @不亦心  @jlass @jjjyufan @不亦心 @ytfdhb @ytfdhb  

使用特权

评论回复
地板
28182900|  楼主 | 2016-5-25 10:15 | 只看该作者
谁能给个tim5 捕获的例程啊,感激不尽啊,搞了好几天了,下周就要交的。

使用特权

评论回复
5
xmshao| | 2016-5-25 14:42 | 只看该作者
学生?

STM8固件库里有个例程 ,只是针对TIM1的。
\STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\TIM1\TIM1_Input_Capture

还有,你中断服务程序里的 i = (unsigned int)(8<<TIM5_CCR3H) + (unsigned int)(TIM5_CCR3L); 红色部分没有问题??

使用特权

评论回复
6
secretuniverse| | 2016-5-25 14:46 | 只看该作者
你的中断的那个地方设置了吗,应该是初始化有问题吧

使用特权

评论回复
7
28182900|  楼主 | 2016-5-26 09:21 | 只看该作者
本帖最后由 28182900 于 2016-5-26 09:28 编辑

现在可以进中断了,但是不管怎么调整预分频系数TIM5_CCR1H和TIM5_CCR1L的值都不会变化本来应该随着预分频系数的提高值会变小才对,可是我不论怎么调整预分频系数捕获到的值都是相同的,这是怎么回事儿。

使用特权

评论回复
8
28182900|  楼主 | 2016-5-26 10:26 | 只看该作者
还望各路大仙,路过伸以援手,不吝赐教

使用特权

评论回复
9
28182900|  楼主 | 2016-5-27 14:17 | 只看该作者

使用特权

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

本版积分规则

100

主题

1127

帖子

2

粉丝