中级会员
 
- 积分
- 488
- 金钱
- 488
- 注册时间
- 2016-9-29
- 在线时间
- 113 小时
|

楼主 |
发表于 2017-12-12 17:44:23
|
显示全部楼层
我使用定时器3进行PWM捕获的,并且把TIM3的时钟分频设置成跟产生PWM的定时器一样的分频数。以下是我的TIM3中断程序:
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_CC1) == SET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
if(ppp == 0) //变量ppp作为判断是否是第二次捕获上升沿的标志
{
IC3ReadValue1 = TIM_GetCapture1(TIM3);//记录第一次捕获上升沿的值
ppp = 1;
}
else if(ppp == 1)
{
ppp = 0;
IC3ReadValue2 = TIM_GetCapture1(TIM3);//记录第二次捕获上升沿的值
if (IC3ReadValue2 > IC3ReadValue1)
{
Capture = (IC3ReadValue2 - IC3ReadValue1);
//计算频率
TIM3Freq = (uint32_t) SystemCoreClock / Capture;
}
else if(IC3ReadValue2 < IC3ReadValue1)
{
Capture = (0xffff - IC3ReadValue1) + IC3ReadValue2;
//计算频率
TIM3Freq = (uint32_t) SystemCoreClock / Capture;
}
else Capture=0;
}
|
|