可以把你手机光纤陀螺仪仪采集数据的程序发给我吗?拜托啦!谢谢你!

两路 IIC 分别测角加速度和陀螺仪的数据,但程序总跑飞 - STM32/STM8技术论坛 - 中国电子技术论坛 -
Powered by Discuz! Archiver
两路 IIC 分别测角加速度和陀螺仪的数据,但程序总跑飞
大家好,我用两路 IIC 分别测出角加速度和陀螺仪的数据,每10ms进入一次中断,中断中对数据经行处理,并通过usart发送数据。但是程序总是跑飞,原因可能是什么。下面是我中断的代码。
void TIM2_IRQHandler(void)
& && &if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
& && &{& && &
& && && && && & TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);& &
& && && && && & GetAngle();
& && &}& && && && && && && && &
void GetAngle(void)
& &LX_Val.Angle+=(LX_Val.Acc)*
& & Angle_delta=(MZ_Val.Angle-Real_angle)*Tg;
& & Real_angle+=(LX_Val.Acc+Angle_delta)*
& && && && && &
& && && &#if 1
& && &SendDate('1',LX_Val.Angle,100) ;
& && &SendDate('2',MZ_Val.Angle,100) ;
& && &SendDate('3',Real_angle,100) ;
& && && & #endif
怎么个‘跑飞’法?
变量都是在哪里定义的?
你怎样判断就是在此处跑飞的?
建议楼主给出全部的代码
一般程序跑飞是由于变量没有进行初始化就使用了可以提高keil编译时的警告等级
woodmice 发表于
怎么个‘跑飞’法?
变量都是在哪里定义的?
你怎样判断就是在此处跑飞的? ...
我程序跑飞的情况就是,陀螺仪一直读数一直不变,卡死了,不能正常工作,我的变量基本都是全局变量,因为变量大部分都是公用的,我想问下,有人说变量少使用全局变量,封装性好一点,嵌入式的需要考虑这个问题吗
z00 发表于
建议楼主给出全部的代码
一般程序跑飞是由于变量没有进行初始化就使用了可以提高keil编译时的警告等级 ...
我想请问下什么keil编译时的警告等级是指,我可以设置keil的一些选项,然后keil会对一些可能产生错误的位置更加敏感吗?
下面是我的main.c 其他的太杂,太多了,不好
#include&stm32f10x.h&
#include&usart.h&
#include&l3g4200.h&
#include&tim.h&
#include&mma7455.h&
#include&pwm_out.h&
voidSendData(unsigned char Type,float data,float Max_Value);
voidGetAngle(void);
void Init_angle(void);
unsigned char Sendbuf={0x55,0xff,0xff,0xff,float dt=0.01;& & & && && && && && && && &//中断定时长度
float Tg=0.3;& & & & & & & & & & & && && && && & //时间积累常数的倒数
float Angle_delta,Real_& & & & //
float Angle_ctr_P=10,Angle_ctr_D=0.3; //P常数和D常数
float ValFront=0,ValBack=0;& & & && &//前后转的标志
int CCR3_Val=0,CCR4_Val=0;& & & && && && &//pwm 大小控制量
MMA_Dat MX_Val={MMA_XOUT8_Addr,'X'};& && && &//加速度数据
MMA_Dat MY_Val={MMA_YOUT8_Addr,'Y'};
MMA_Dat MZ_Val={MMA_ZOUT8_Addr,'Z'};
L3G4200_Dat LX_Val={OUT_X_H,OUT_X_L,'X',0,0};//陀螺仪数据
L3G4200_Dat LY_Val={OUT_Y_H,OUT_Y_L,'Y'};
L3G4200_Dat LZ_Val={OUT_Z_H,OUT_Z_L,'Z'};
int main(void)
//uarst 配置
& & & && &Usart1_Config();
//定时器配置& & & &
& & & && &TIM2_NVIC_Configuration();
& &TIM2_Configuration();
//角加速度配置
& & & && &I2C2_GPIO_Config();
& & & && &I2C_MMA_Offset();
& & & && &
& & & &// I2C_MMA_Config();
& & & &// I2C_MMA_Cal();
//陀螺仪配置
& & & && &I2C_GPIO_Config();
& & & && &Init_L3G4200();
//电机初始化pwm
& & TIM3_PWM_Init();
& &Init_angle();
& && &START_TIME;
& & & && &while(1)& & & &
& & & && & {
& & & & & & & &
& & & && & Read_Mma(&MZ_Val);& &//读出加速度数据,并转换为角度
& & & & & && & Read_L3G4200(&LX_Val);//读出陀螺仪数据,并转化为角加速度
& & & && && &Angle_Ctr(&LX_Val);
& && && && &Motor();
& & & & & & & && & }
void Init_angle(void)
& & u8 i=100;
& & & & float temp=0;
& & & & while(i--)
& & & && &Read_Mma(&MZ_Val);
& & & && &temp+=MZ_Val.A
& & & & LX_Val.Angle=temp/100.0;
& & & & Real_angle=LX_Val.A
void GetAngle(void)
& &LX_Val.Angle+=(LX_Val.Acc)*
& & & &Angle_delta=(MZ_Val.Angle-Real_angle)*Tg;
& & & &Real_angle+=(LX_Val.Acc+Angle_delta)*
& & & &#if 1
& & & && &//SendData('1',LX_Val.Angle,100) ;
& && &SendData('1',MZ_Val.Angle,100) ;
& && &SendData('2',Real_angle,100) ;
& & & && &SendData('4',CCR3_Val/5.0,100);
& & & && &SendData('5',CCR4_Val/5.0,100);
& & & &#endif
voidSendData(unsigned char Type,float data,float Max_Value)//发送数据到上位机
& & & & int temp=0;
& & & & char i=0;
& & temp=(int)(data/Max_Value*32768.0);
& & & & Sendbuf=T
& & & & Sendbuf=(unsigned char)(temp & 0xff);& &//l
& & & & Sendbuf=(unsigned char)((temp&&8) & 0xff);//gao
& & for(i=0;i&5;i++)
& & & &USART_SendData(USART1, (uint8_t) Sendbuf); /*发送一个字符函数*/
& &/* Loop until the end of transmission */
& & & && &while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)/*等待发送完成*/
& & & && &{
& & & && &
& & & && &}
TIM2_IRQHandler 好像没有在返回前做清除中断标志位的工作?还是已经在 TIM_GetITStatus 中做了?
如果没有做,只要中断例程一返回,又会立即产生中断;
建议先不要直接用中断方式,用查询方式确定陀螺仪能正确运作,再加入中断方法,一步一步来。
woodmice 发表于
TIM2_IRQHandler 好像没有在返回前做清除中断标志位的工作?还是已经在 TIM_GetITStatus 中做了?
如果没有 ...
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
& && &{& && &
& && && && && & TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);& & //清除中断标志了
& && && && && & GetAngle();
& && &}& &
谢谢你的建议
& && && && && &
谢谢大家了,之前的问题是我陀螺仪板子上的地接触不良引起的,大家的的建议我从中又学到写些新东西
sswenxh2006
谢谢楼主分享!!!
查看完整版本:你好 AOP-7104B 视频4路视频输入 监控视频采集卡驱动你还有吗???可以发给我吗?谢谢你了_百度知道
你好 AOP-7104B 视频4路视频输入 监控视频采集卡驱动你还有吗???可以发给我吗?谢谢你了
://d.baidu?可以发给我吗.hiphotos://d;监控视频采集卡驱动你还有吗.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/wh%3D600%2C800/sign=<a href="/zhidao/pic/item/1c950a7b0baab4f2d3572c10AOP-7104B&nbsp?.baidu.视频4路视频输入&nbsp://d?谢谢你了@qq你好&/zhidao/wh%3D450%2C600/sign=ebcd7e64baaec950a7b0baab4f2d3572c10dfcfac.jpg" esrc="http.baidu.hiphotos
提问者采纳
cn技术支持.com,
其他类似问题
为您推荐:
您可能关注的推广
视频采集卡的相关知识
其他3条回答
鲁大妈没有嘛?还有驱动中国。应该有吧。
xp的话,直接进入设备管理器中去找到相应硬件,然后刷新驱动程序应该就可以了,或者到控制面板中有个添加硬件,你点一下,按照向导的去做就可以了。
我发给你把!晕
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁我也想要《离玉传》全文,拜托你发给我好吗?我的邮箱:。谢谢你了!_百度知道
我也想要《离玉传》全文,拜托你发给我好吗?我的邮箱:。谢谢你了!
提问者采纳
谢谢…~…如有问题请带着【提问地址】,百度HI联系我正在发送中,祝看文愉快,收到满意记得采纳
来自:求助得到的回答
其他类似问题
为您推荐:
离玉传的相关知识
其他1条回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请问可以发给我历届全国大学生英语竞赛C类真题及答案吗? 拜托啦,谢谢你啦o(∩_∩)o_百度知道
请问可以发给我历届全国大学生英语竞赛C类真题及答案吗? 拜托啦,谢谢你啦o(∩_∩)o
请问可以发给我历届全国大学生英语竞赛C类真题及答案吗?拜托啦,谢谢你啦o(∩_∩)o
。。忘了我的邮箱@qq额
提问者采纳
已发送~一楼的也发给你了~
提问者评价
谢谢大家!
来自团队:
其他类似问题
为您推荐:
其他2条回答
//ishare://ishare.iask.sina,听力
我也是要参加大学生英语竞赛的
我也急求近年的真题,我想我们可以交流
有兴趣请告诉我一声邮箱:
全国大学生英语竞赛的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 陀螺仪有什么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信