[mw_shl_code=c,true] TIM3_PWM_Init(899,0); //不分频。PWM频率=72000/(899+1)=80Khz
TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数
while(1)
{
delay_ms(10);
TIM_SetCompare2(TIM3,450);
if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=65536;//溢出时间总和
// printf("TEXT:%d us\r\n",temp);
temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
// printf("TEXT:%d us\r\n",TIM5CH1_CAPTURE_VAL);
printf("HIGH:%d us\r\n",temp);//打印总的高点平时间
TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
}
}
}[/mw_shl_code]
[mw_shl_code=c,true]这是我从例程的代码修改过来的,我把PWM波的占空比修改为50%,那么按照计算高电平时间应该就是1/80000*2=6.25us[/mw_shl_code]
[mw_shl_code=c,true]用软件仿真结果也是这样:
高电平6Us[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]但是当我把PWM接到PB5的时候,用串口调试助手来显示,就变成了4us
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]如果我把代码中注释掉的这两句又放回去进去
[mw_shl_code=c,true]printf("TEXT:%d us\r\n",temp);[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]printf("TEXT:%d us\r\n",TIM5CH1_CAPTURE_VAL);[/mw_shl_code]
那结果又变成了
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]这我就不懂了,为什么用输入捕获PWM波的结果和计算的不一样,不是应该是6us吗?[/mw_shl_code]
[mw_shl_code=c,true]还有 为什么插入那两句话后结果就有时是3us,有时是4us?[/mw_shl_code]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]