OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4269|回复: 2

关于stm32f407定时器输入捕获问题

[复制链接]

16

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2020-3-5
在线时间
36 小时
发表于 2021-3-8 14:41:38 | 显示全部楼层 |阅读模式
10金钱
                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%交替出现

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2021-3-8 18:36:45 | 显示全部楼层
可以参考一下输入捕获的例程实验看看。
回复

使用道具 举报

16

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2020-3-5
在线时间
36 小时
 楼主| 发表于 2021-3-15 18:25:10 | 显示全部楼层
gjs13030247996 发表于 2021-3-8 18:36
可以参考一下输入捕获的例程实验看看。

CC1 通道配置为输入:
CC1NP/CC1P 位可针对触发或捕获操作选择 TI1FP1 和 TI2FP1 的有效极性。
00:非反相/上升沿触发
电路对 TIxFP1 上升沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操
作), TIxFP1 未反相(在门控模式或编码器模式下执行触发操作)。
01:反相/下降沿触发
电路对 TIxFP1 下升沿敏感(在复位模式、外部时钟模式或触发模式下执行捕获或触发操
作), TIxFP1 反相(在门控模式或编码器模式下执行触发操作)。
10:保留,不使用此配置。
11:未反相/边沿触发。
电路对 TIxFP1 上升沿和下降沿都敏感(在复位模式、外部时钟模式或触发模式下执行捕获
或触发操作), TIxFP1 未反相(在门控模式下执行触发操作)。编码器模式下不得使用此
配置。





是不是这个边沿触发不是所谓的上升沿和下降沿都触发啊?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 12:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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