初级会员
- 积分
- 65
- 金钱
- 65
- 注册时间
- 2014-10-27
- 在线时间
- 0 小时
|
楼主 |
发表于 2015-1-28 12:42:52
|
显示全部楼层
回复【3楼】八度空间:
---------------------------------
void Tim4_Pwm_In_Irq(void)
{
static u16 temp_cnt1,temp_cnt1_2, temp_cnt2,temp_cnt2_2, temp_cnt3,temp_cnt3_2, temp_cnt4,temp_cnt4_2;
if(TIM4->SR & TIM_IT_CC1) //是否已被捕获至TIM4_CCR1//if(TIM_GetITStatus(TIM2, TIM_IT_CC1) == SET)
{
u16 ccr1 = TIM4->CCR1; //记录上一次输入捕获1事件传输的计数器值
TIM4->SR &= ~TIM_FLAG_CC1OF; //捕获1重复捕获标记清零
if(GPIOB->IDR & GPIO_Pin_6) //PB6为高电平
{
temp_cnt1 = ccr1; //记录低电平跳变为高电平时刻
TIM4->CCER |= (1<<1); //捕获发生在IC1下降沿
}
else
{
temp_cnt1_2 = ccr1; //记录高电平跳变为低电平时刻
TIM4->CCER &= ~(1<<1); //捕获发生在IC1上升沿
if(temp_cnt1_2>=temp_cnt1)
Rc_Pwm_In[0] = temp_cnt1_2-temp_cnt1;
else
Rc_Pwm_In[0] = 0xffff-temp_cnt1+temp_cnt1_2;
}
}
if(TIM4->SR & TIM_IT_CC2) //是否已被捕获至TIM4_CCR2
{
u16 ccr2 = TIM4->CCR2; //记录上一次输入捕获2事件传输的计数器值
if(GPIOB->IDR & GPIO_Pin_7) //PB7为高电平
{
temp_cnt2 = ccr2;
TIM4->CCER |= (1<<5); //捕获发生在IC2下降沿
}
else
{
temp_cnt2_2 = ccr2;
TIM4->CCER &= ~(1<<5); //捕获发生在IC2上升沿
if(temp_cnt2_2>=temp_cnt2)
Rc_Pwm_In[1] = temp_cnt2_2-temp_cnt2;
else
Rc_Pwm_In[1] = 0xffff-temp_cnt2+temp_cnt2_2;
}
}
if(TIM4->SR & TIM_IT_CC3) //是否已被捕获至TIM4_CCR3
{
u16 ccr3 = TIM4->CCR3; //记录上一次输入捕获3事件传输的计数器值
if(GPIOB->IDR & GPIO_Pin_8) //PB8为高电平
{
temp_cnt3 = ccr3;
TIM4->CCER |= (1<<9); //捕获发生在IC3下降沿
}
else
{
temp_cnt3_2 = ccr3;
TIM4->CCER &= ~(1<<9); //捕获发生在IC3上升沿
if(temp_cnt3_2>=temp_cnt3)
Rc_Pwm_In[2] = temp_cnt3_2-temp_cnt3;
else
Rc_Pwm_In[2] = 0xffff-temp_cnt3+temp_cnt3_2;
}
}
if(TIM4->SR & TIM_IT_CC4) //是否已被捕获至TIM4_CCR4
{
u16 ccr4 = TIM4->CCR4; //记录上一次输入捕获4事件传输的计数器值
if(GPIOB->IDR & GPIO_Pin_9) //PB9为高电平
{
temp_cnt4 = ccr4;
TIM4->CCER |= (1<<13); //捕获发生在IC4下降沿
}
else
{
temp_cnt4_2 = ccr4;
TIM4->CCER &= ~(1<<13); //捕获发生在IC4上升沿
if(temp_cnt4_2>=temp_cnt4)
Rc_Pwm_In[3] = temp_cnt4_2-temp_cnt4;
else
Rc_Pwm_In[3] = 0xffff-temp_cnt4+temp_cnt4_2;
Rc_DataAnl();
}
}
}
就是这样一个函数里,最后一条语句用到的函数Rc_DataAnl();
static void Rc_DataAnl(void)
{
Rc_Data.THROTTLE = Rc_Pwm_In[1]; //油门
Rc_Data.YAW = Rc_Pwm_In[0];
Rc_Data.ROLL = Rc_Pwm_In[3];
Rc_Data.PITCH = Rc_Pwm_In[2];
}
Rc_Data.THROTTLE
Rc_Data.YAW
Rc_Data.ROLL
Rc_Data.PITCH
这几个参数没太看懂 |
|