OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2378|回复: 1

tim5 捕获中断的问题

[复制链接]

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2016-5-23
在线时间
118 小时
发表于 2016-5-27 15:03:31 | 显示全部楼层 |阅读模式
1金钱
定时器配置如下
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的值都不会变化,求大师指点。
不管怎么调整预分频系数TIM5_CCR1H和TIM5_CCR1L的值都不会变化本来应该随着预分频系数的提高值会变小才对,可是我不论怎么调整预分频系数捕获到的值都是相同的,这是怎么回事儿。

最佳答案

查看完整内容[请看2#楼]

估计你的输入捕获都没工作吧。。。你确定这个L和H的值,是外部脉冲的么
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2016-5-27 15:03:32 | 显示全部楼层
估计你的输入捕获都没工作吧。。。你确定这个L和H的值,是外部脉冲的么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-9-29 04:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表