本帖最后由 zhcj66 于 2018-6-8 14:32 编辑
调试了2天了如题"STM8S103F外部触发捕获/比较寄存器更新了,但无法中断"不知道咋回事,是程序的问题还是芯片的问题
- //程序设置如下
- void TIM1_Init(void)
- {
-
- GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_IN_FL_IT);
-
- TIM1->CNTRH = 0x00;//清零计数器高8位
- TIM1->CNTRL = 0x00;//清零计数器低8位
-
- TIM1->ARRH = 0xFF; //自动重装载的值 255
- TIM1->ARRL = 0xFF; //自动重装载的值 255
- TIM1->PSCRH = 0x00;
- TIM1->PSCRL = 0xA0-1; //160分频 正好是10us
-
- TIM1->CCER2 &= ~0x01;//清零CCxE,之后才可配置CCMR
- TIM1->CCMR3 = 0x01;//IC3映射在TI3FP3;无分频;无滤波
- TIM1->CCER2 &= ~0x02;//上升沿或高电平有效
- TIM1->IER |= 0x08; //使能CC3IE中断
- TIM1->CCER2 |= 0x01;//输入捕获使能
- TIM1->CR1 = 0x01; //启动定时器
- }
- INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
- {//程序无法进入这个中断
- TIM1_ClearITPendingBit(TIM1_IT_CC3);
- }
复制代码
中断标志寄存器也置位了,可是就是无法进入中断寄存器;可以确定的是全局中断已经打开,因为定时器2正常工作着.
TIM1_IER值为0x08应该标志位置位后就可以进入中断的,可是就是进不去,在触发的时候TIM1_CCR3也有数据更新
- //TIM2捕获中断服务函数
- INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, TIM2_CAP_COM_VECTOR)
- {
- uint16_t data;
- if(TIM2->SR1&0x04)//捕获2发生捕获事件
- {
- data=(TIM2->CCR2H<<8)+TIM2->CCR2L;
- printf("进入中断下降沿
");
- TIM2->SR1&=~(1<<2);//清除通道2捕获中断标志位
- }
-
- if(TIM2->SR1&0X02){
- data=(TIM2->CCR1H<<8)+TIM2->CCR1L;
- printf("进入中断上升沿中断
");
- TIM2->SR1&=~(1<<1);//清除通道1捕获中断标志位
- }
-
- TIM2->CNTRH=0; //计数器清空
- TIM2->CNTRL=0;
-
- }
复制代码一周热门 更多>