初中生
最后登录1970-1-1
在线时间 小时
注册时间2021-1-5
|
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%交替出现
|
|