请教问题,使用STM8S的定时器捕获功能,不能正常进入中断?

2019-12-27 18:50发布

使用STM8S003F3P6的定时器2的捕获功能,只有复位的时候才能进入中断,是什么问题?

  1. void capture_init(u8 psc,u16 arr)
  2. {
  3.         CLK_PCKENR1|=1<<5;        //开启TIM2时钟
  4.         
  5.         PD_DDR&=~(1<<3);//设置为输入模式
  6.         PD_CR1|=1<<3;//设置为上拉输入
  7.         PD_CR2&=~(1<<3);//不使用中断
  8.       

  9.         TIM2_PSCR=psc;                //2^psc次方分频
  10.         TIM2_ARRH=arr>>8;        //必须先设置ARR的高字节
  11.         TIM2_ARRL=arr&0XFF;//再设置低字节
  12.         
  13.         TIM2_CCMR2|=1<<0;        //CC2映射在TI2FP2上
  14.         TIM2_CCMR2|=0<<2;        //无预分频,每个事件一次捕获
  15.         TIM2_CCMR2|=0<<4;        //无滤波,Fmaster采样.
  16.       
  17.         
  18.         TIM2_CCER1|=1<<5;//IC2下降沿触发
  19.         TIM2_CCER1|=1<<4;//IC2输入捕获使能,允许捕获计数器的值到捕获寄存器中
  20.        
  21.       
  22.         TIM2_CR1|=1<<7;        //预装载使能
  23.         TIM2_IER|=1<<2;        //通道2,捕获中断使能
  24.         TIM2_CR1|=1<<0;        //使能TIM2         
  25. }
  26. //中断服务函数
  27. #pragma vector=0x10
  28. __interrupt void TIM2_CAP_COM_IRQHandler(void)
  29. {
  30.   
  31.       uint16_t data;
  32.     if(TIM2_SR1&0x04)//捕获2发生捕获事件
  33.        {       
  34.           data=(TIM2_CCR2H<<8)+TIM2_CCR2L;
  35.             printf("通道2发送捕获中断 ");
  36.             TIM2_SR1&=~(1<<2);//清除捕获中断标志位
  37.        }
  38.    
  39. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
小Z
1楼-- · 2019-12-27 23:48
结贴,中断向量表有错,以及开启了相关外设的中断要记得写中断服务函数,不然会进入异常中断。

跑通的定时器捕获程序
TIM2_CH2 输入捕获.rar (418.86 KB, 下载次数: 14) 2017-6-21 15:50 上传 点击文件名下载附件
FireHe
2楼-- · 2019-12-28 02:20
 精彩回答 2  元偷偷看……

一周热门 更多>