完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这几个参数是什么意思呢
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]; 求助求助!!! |
|
相关推荐
10个回答
|
|
四轴的油门,伏仰,翻滚,偏航。
|
|
|
|
看结构体定义,你这样放上来是让人猜的,这样没啥意义,知道吗,哈哈
|
|
|
|
我可以这样问你么,A,B,C,D,E这几个东东代表啥,你能回答么?
|
|
|
|
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 这几个参数没太看懂 |
|
|
|
奥,结构体定义是这样的
typedef struct int16_rcget { int16_t ROLL; int16_t ITCH; int16_t THROTTLE; int16_t YAW; int16_t AUX1; int16_t AUX2; int16_t AUX3; int16_t AUX4; int16_t AUX5; int16_t AUX6; }T_RC_Data; |
|
|
|
应该是遥控器解码 然后复制给油门 俯仰 等
|
|
|
|
三楼的代码中TIM4->SR &= ~TIM_FLAG_CC1OF;//捕获1重复捕获标记清零
这条语句为什么只在 if(TIM4->SR & TIM_IT_CC1)//是否已被捕获至TIM4_CCR1 这条语句成立后有呢? if(TIM4->SR & TIM_IT_CC2)//是否已被捕获至TIM4_CCR2 if(TIM4->SR & TIM_IT_CC2)//是否已被捕获至TIM4_CCR3 if(TIM4->SR & TIM_IT_CC2)//是否已被捕获至TIM4_CCR4 这几种情况下都没有 |
|
|
|
三楼的代码中TIM4->SR &= ~TIM_FLAG_CC1OF;//捕获1重复捕获标记清零
这条语句为什么只在 if(TIM4->SR & TIM_IT_CC1)//是否已被捕获至TIM4_CCR1 这条语句成立后有呢? if(TIM4->SR & TIM_IT_CC2)//是否已被捕获至TIM4_CCR2 if(TIM4->SR & TIM_IT_CC2)//是否已被捕获至TIM4_CCR3 if(TIM4->SR & TIM_IT_CC2)//是否已被捕获至TIM4_CCR4 这几种情况下都没有 |
|
|
|
这句看起来没用,因为只要通道一产生中断,这句就会执行到,而重复捕获标志CCxOF只有发生至少两个连续捕获时才会置1。这段代码是放在定时器中断里解码遥控接收器的4路PWM信号的吧?
|
|
|
|
嗯,原来是这样
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4443 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
315浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
301浏览 2评论
314浏览 2评论
319浏览 2评论
356浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 11:12 , Processed in 0.991054 second(s), Total 67, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号