完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电路板应用中出现问题,STM8S105,运用定时器的通道1和通道4,设置成为下降沿输入捕获,定时器周期1.5ms。但目前出现问题,通道1可以进入中断,通道4却不可以。输入信号为脉冲信号,周期6ms,占空比75%。输出为溢出中断,完成一定功能。怀疑是不是两通道相互有影响?1.5ms周期过短?还是其他?大神们求助。
void Init_tiM1(void) { TIM1_CR1=0x00; //关闭定时器 TIM1_IER=0x00; //关闭中断 TIM1_PSCRH=0x00; //将16M晶振预分频为1M,计数器精度1us TIM1_PSCRL=0x0f; TIM1_CCMR1=0x31; //CC1通道输入,IC1映射在TI1FP1,采样频率N=4 TIM1_CCMR4=0x31; //CC4通道输入,IC1映射在TI3FP4,采样频率N=4 TIM1_CCER1=0x03; //OC1下降沿捕捉,捕获使能;OC2输出到对应引脚,高电平有效 TIM1_CCER2=0x30; //OC4下降沿捕捉,捕获使能;OC3输出到对应引脚,高电平有效 TIM1_ARRH=0x05; //设置自动重装载寄存器(十进制6000) TIM1_ARRL=0xdc; TIM1_CNTRH=0x00; //设置计数器寄存器(十进制0) TIM1_CNTRL=0x00; TIM1_BKR=0x80; //OC,OCN使能 TIM1_EGR=0x13; //产生更新事件 TIM1_IER=0x13; //允许捕获比较1,2,3,4中断,允许更新中断 TIM1_CR1=0x01; //开启定时器 } @far @interrupt void TIM1_CC_IRQHandler(void) { //******一路的捕捉控制 输入为TIM1_CH1,PC1 ****** if((TIM1_SR1&0x02)==0x02) //判断是否为TIM1_CH1捕获 { CurrentT1Value1=TIM1_CCR1H; CurrentT1Value1=CurrentT1Value1<<8; CurrentT1Value1+=TIM1_CCR1L; TIM1_SR1&=0xfd; //清除中断标志 TIM1_SR2&=0xfd; //清除中断标志 m3++; //进入中断次数 if((TIM1_CCER1&0x02)==0x02) //再次判断捕获发生在下降沿 { if((PC_IDR&0x02)==0x02) //滤掉小毛刺 { return; } TIM1_CCER1&=0xfd; //捕捉发生在TI1F的高电平或上升沿 FallingValue1=CurrentT1Value1; //记下一路第一次捕捉下降沿值 } else //上升沿 { if((PC_IDR&0x02)==0x00) //滤掉小毛刺 { return; } TIM1_CCER1|=0x03; //下降沿捕获 RisingValue1=CurrentT1Value1;//记下一路第一次捕捉上升沿值 Pulse1=RisingValue1-FallingValue1; } } return; //******二路的捕捉控制 输入TIM1_CH4,PD7 if((TIM1_SR1&0x10)==0x10) //判断是否为TIM1_CH4捕获 { CurrentT1Value2=TIM1_CCR4H; CurrentT1Value2=CurrentT1Value2<<8; CurrentT1Value2+=TIM1_CCR4L; TIM1_SR1&=0xef; //清除中断标志 输入清除 TIM1_SR2&=0xef; //清除中断标志 输入清除 m2++; if((TIM1_CCER2&0x20)==0x20) //再次判断捕获发生在下降沿 { if((PD_IDR&0x80)==0x80) //滤掉小毛刺 { return; } TIM1_CCER2&=0xdf; //捕捉发生在TI1F的高电平或上升沿 FallingValue2=CurrentT1Value2; //记下二缸捕捉下降沿值 } else //上升沿 { if((PD_IDR&0x80)==0x00) //滤掉小毛刺 { return; } TIM1_CCER2|=0x30; //下降沿捕获 RisingValue2=CurrentT1Value2; //记下二路捕捉上升沿值 Pulse2=RisingValue2-FallingValue2; } } return; } return; } //TIM1溢出中断 @far @Interrupt void TIM1_OVF_IRQHandler(void) { v++; //另有用 TIM1_SR1&=0xfe; //清除溢出标志位 return; }
|
|
相关推荐
1个回答
|
|
回帖奖励 +1 分积分
解决了吗?我在使用PD7中断时也遇到了问题
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:01 , Processed in 0.677644 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号