野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26935|回复: 0

关于stm32f407定时器捕获的问题

[复制链接]
发表于 2021-3-8 14:42:35 | 显示全部楼层 |阅读模式
                TIMX->CCMR1=0;                                                                                                //清除寄存器
                TIMX->CCMR1|=1<<0;                                                                                            //通道1输入模式
                TIMX->CCMR1&=~(u32)(1<<1);                                                                                    //通道1输入模式(IC1映射到TI1上)
                TIMX->CCMR1|=0<<4;                                                                                            //无滤波
                TIMX->CCER|=1<<1;                                                                                             //CC1P=1,CC1NP=1,下降沿和上升沿均有效
                TIMX->CCER|=1<<3;                                                                                             //CC1P=1,CC1NP=1,下降沿和上升沿均有效
                TIMX->CCMR1|=0<<2;                                                                                            //每次跳变都能捕获到,无分频
                TIMX->CCER|=1<<0;                                                                                             //使能捕获,允许将计数器的值捕获到捕获寄存器中
                TIMX->DIER|=1<<1;                                                                                             //使能通道1中断
                TIMX->SR&=~(u32)(1<<1);                                                                                       //清除捕获中断标志
                TIMX->SR&=~(u32)(1<<9);                                                                                       //清除捕获中断标志
以上为主要配置,上升沿和下降沿都触发,然后获得占空比函数中断执行
函数如下
void SENIOR_Get_Cycle_and_Duty(TIM_TypeDef* TIMX , u8 CHX)
{
        if(num==3)
                IC1Value1=TIMX->CCR1;
        if(num==2)
                IC1Value2=TIMX->CCR1;
        if(num==1)
        {
                TIMX->CNT=0;
                IC1Value3=TIMX->CCR1;
        }
        if(num==1)
        {
                Duty1=(float)(IC1Value3-IC1Value2)*100/(float)(IC1Value3-IC1Value1);
                Cycle1=(float)1000000/(IC1Value3-IC1Value1);
                printf("占空比:%0.2f%%   频率:%0.2fHz\n",Duty1,Cycle1);
        }
        num--;
        if(num==0)
        {
                num=3;
        }
}

出现一个问题就是,例如当我占空比为40%的时候,捕获的到占空比为40%和60%交替出现

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 19:33 , Processed in 0.028474 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表