使用STM8S003F3P6的定时器2的捕获功能,只有复位的时候才能进入中断,是什么问题?
- void capture_init(u8 psc,u16 arr)
- {
- CLK_PCKENR1|=1<<5; //开启TIM2时钟
-
- PD_DDR&=~(1<<3);//设置为输入模式
- PD_CR1|=1<<3;//设置为上拉输入
- PD_CR2&=~(1<<3);//不使用中断
-
- TIM2_PSCR=psc; //2^psc次方分频
- TIM2_ARRH=arr>>8; //必须先设置ARR的高字节
- TIM2_ARRL=arr&0XFF;//再设置低字节
-
- TIM2_CCMR2|=1<<0; //CC2映射在TI2FP2上
- TIM2_CCMR2|=0<<2; //无预分频,每个事件一次捕获
- TIM2_CCMR2|=0<<4; //无滤波,Fmaster采样.
-
-
- TIM2_CCER1|=1<<5;//IC2下降沿触发
- TIM2_CCER1|=1<<4;//IC2输入捕获使能,允许捕获计数器的值到捕获寄存器中
-
-
- TIM2_CR1|=1<<7; //预装载使能
- TIM2_IER|=1<<2; //通道2,捕获中断使能
- TIM2_CR1|=1<<0; //使能TIM2
- }
- //中断服务函数
- #pragma vector=0x10
- __interrupt void TIM2_CAP_COM_IRQHandler(void)
- {
-
- uint16_t data;
- if(TIM2_SR1&0x04)//捕获2发生捕获事件
- {
- data=(TIM2_CCR2H<<8)+TIM2_CCR2L;
- printf("通道2发送捕获中断
");
- TIM2_SR1&=~(1<<2);//清除捕获中断标志位
- }
-
- }
复制代码
跑通的定时器捕获程序
一周热门 更多>