金牌会员
 
- 积分
- 1032
- 金钱
- 1032
- 注册时间
- 2017-7-26
- 在线时间
- 275 小时
|
本帖最后由 a3748622 于 2019-12-4 14:32 编辑
我用的是F407移植原子F429的MPU9250实验,
自己买的MPU9250小模块使用。
移植过程中也出现了一些问题,分享一下:
1、程序卡死在自检“res=run_self_test();”
一开始串口总是不输出数据,后面我发现把模块水平放置就可以了。。。。。
不然的话自检 不能通过
2、自检通过后,发现串口还是不能输出数据,debug发现,程序卡死在FIFO的读取哪里
- if (fifo_count > (st.hw->max_fifo >> 1)) {
- /* FIFO is 50% full, better check overflow bit. */
- if (i2c_read(st.hw->addr, st.reg->int_status, 1, tmp))
- return -1;
- if (tmp[0] & BIT_FIFO_OVERFLOW) {
- mpu_reset_fifo();
- return -2;
- }
- }
复制代码 这段代码是用来检测FIFO是否已满,如果MPU9250FIFO已满,则重启FIFO,然后再读取。那么为什么我一开始不能输出数据呢?因为我把单片机获取MPU9250数据,然后输出到串口的时间调为1S。。。。
如下代码:
- if(mpu_mpl_get_data(&pitch,&roll,&yaw)==0)
- {
-
- temp=MPU_Get_Temperature();
- MPU_Get_Accelerometer(&arr[0],&arr[1],&arr[2]);
- MPU_Get_Gyroscope(&arr[3],&arr[4],&arr[5]);
- mpu6050_send_data(arr[0],arr[1],arr[2],arr[3],arr[4],arr[5]);
- usart1_report_imu((int)(roll*100),(int)(pitch*100),(int)(yaw*100),0,0);
- }
- HAL_Delay(1000);
复制代码 造成的结果是重启一次,然后FIFO在1S内满了,然后又重启。。。无限循环。。。
如何解决呢?我把工程发上来大家自己看吧。。。。
3、原子哥程序的小问题,导致匿名地面站飞控状态不能更新。
串口终于能成功输出数据了,但是却发现加速度陀螺仪数据能接收,但是飞控状态,float pitch,roll,yaw;
却不能更新。
检查代码发现如下问题:
- void usart1_niming_report(uint8_t fun,uint8_t*data,uint8_t len)
- {
- uint8_t send_buf[32];
- uint8_t i;
- if(len>28)return;
- send_buf[len+4]=0; //原本这里是len+3
- send_buf[0]=0XAA;
- send_buf[1]=0XAA;
- send_buf[2]=fun;
- send_buf[3]=len;
- for(i=0;i<len;i++)send_buf[4+i]=data[i];
- for(i=0;i<len+4;i++)send_buf[len+4]+=send_buf[i];
- //for(i=0;i<len+5;i++)usart1_send_char(send_buf[i]);
- HAL_UART_Transmit(&huart1, send_buf, len+5, 50);
- }
复制代码
如上修改后,很棒,尽情玩耍吧。
|
|