本帖最后由 TZ技术 于 2017-6-17 19:17 编辑
使用STM8S003F3P6定时器捕获,无法进入捕获中断
[mw_shl_code=c,true]#pragma vector=14
__interrupt void TIM2_CAP_COM_IRQHandler(void)
{
uint16_t data;
if(TIM2_SR1&0x04) //捕获2发生捕获事件
{
TIM2_SR1&=(0<<2);//清除捕获中断标志位
TIM2_SR2&=0<<2 ; // 清除重复捕获标志
data=(TIM2_CCR2H<<8)+TIM2_CCR2L;
printf("通道2发送捕获中断
");
}
}
//定时器2.输入捕获初始化代码
//输入捕获计数频率: Fmaster/(2^psc)
//输入捕获最大值:arr
//psc:分配系数,0~15;分频系数为:2^psc,最大为2^15=32768分频
//arr:自动重装载值,0~65535
void capture_init(u8 psc,u16 arr)
{
CLK_PCKENR1|=1<<5; //开启TIM2时钟
PD_DDR&=(0<<3);//设置为输入模式
PD_CR1|=1<<3;//设置为上拉输入
PD_CR2&=(0<<3);//不使用中断
TIM2_PSCR=psc; //2^psc次方分频
TIM2_ARRH=(arr>>8); //必须先设置ARR的高字节
TIM2_ARRL=arr;//再设置低字节
TIM2_CCER1 &=0<<4;//禁止输入捕获通道2
TIM2_CCMR2|=0x01;//CC2映射在TI2FP2上,无预分频,无滤波,Fmaster采样.
TIM2_CCER1|=1<<5;//IC2上升沿
TIM2_CCER1|=1<<4;//IC2输入捕获使能,
TIM2_SR1 &=0<<2; // 清除捕获标志
TIM2_SR2 &=0<<2 ; // 清除重复捕获标志
TIM2_CR1|=1<<7; //预装载使能
TIM2_IER|=1<<2; //通道2,通道1,捕获中断使能
TIM2_CR1|=1<<0;//使能TIM2
}
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>