OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6020|回复: 11

移植原子哥407板子上的MPU6050程序到MINI板子上DMP初始化出错,求教。

[复制链接]

5

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-1-10
在线时间
19 小时
发表于 2015-1-24 14:34:05 | 显示全部楼层 |阅读模式
5金钱
 我把MPU6050的程序一直到了MINI板子上,mpu_dmp_init()这一步出错,返回值是8,IIC正常,aacx,aacy,aacz,gyrox,gyroy,gyroz值都能读出来了,求大神指教。

MPU6050.rar

2.39 MB, 下载次数: 231

最佳答案

查看完整内容[请看2#楼]

业余爱好者,硬件IIC终于成功了,之前也是自检不过,可以说明自检不过很有可能是读写时序问题。可能之后也就不做了,但还是分享出来吧,谢谢各位的分享[mw_shl_code=c,true]void Init_I2C1(){ GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE ); GPIO_InitStructure.GPIO_Pin = GP ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-8-24
在线时间
0 小时
发表于 2015-1-24 14:34:06 | 显示全部楼层
业余爱好者,硬件IIC终于成功了,之前也是自检不过,可以说明自检不过很有可能是读写时序问题。可能之后也就不做了,但还是分享出来吧,谢谢各位的分享[mw_shl_code=c,true]void Init_I2C1(){
        GPIO_InitTypeDef GPIO_InitStructure;
        I2C_InitTypeDef I2C_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE );
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;                                 //配置串口接收端口挂接到9端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;                           //复用功能输出OD
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                   //配置端口速度为50M                                  
  GPIO_Init(GPIOB, &GPIO_InitStructure);                                           //根据参数初始化GPIOB寄存器       
       
        I2C_DeInit(I2C1);
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
  I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
  I2C_InitStructure.I2C_OwnAddress1 = 0x00;
  I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
  I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  I2C_InitStructure.I2C_ClockSpeed = 50000;
  I2C_Init(I2C1, &I2C_InitStructure);
  I2C_Cmd(I2C1, ENABLE);       
}

u8 MPU_Write_Byte(u8 reg,u8 data){
        u16 i;
        I2C_GenerateSTART(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_Send7bitAddress(I2C1,((MPU_ADDR<<1)|0),I2C_Direction_Transmitter);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_SendData(I2C1,reg);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_SendData(I2C1,data);
        I2C_GenerateSTOP(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }

        return 0;
}

u8 MPU_Read_Byte(u8 reg){
        u8 reg_data;
        u16 i=0;
        while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_GenerateSTART(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_Send7bitAddress(I2C1,((MPU_ADDR<<1)|0),I2C_Direction_Transmitter);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_SendData(I2C1,reg);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_GenerateSTART(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_Send7bitAddress(I2C1,((MPU_ADDR<<1)|0),I2C_Direction_Receiver);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_AcknowledgeConfig(I2C1,DISABLE);
        I2C_GenerateSTOP(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        reg_data = I2C_ReceiveData(I2C1);
        return reg_data;       
}

u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf){
        u8 n;
  u16 i;       
        I2C_GenerateSTART(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_Send7bitAddress(I2C1,((MPU_ADDR<<1)|0),I2C_Direction_Transmitter);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_SendData(I2C1,reg);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        for(n=0;n<len;n++){
                I2C_SendData(I2C1,buf[n]);
                i=0;
                while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)&&(i<2100)){
                  i++;
                  if(i>2000)
                          return 1;
                        if(n>=(len-1))
                                I2C_GenerateSTOP(I2C1,ENABLE);
          }
        }   
           
        return 0;       
}

u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf){
  u16 i;       
        i=0;
        while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_GenerateSTART(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_Send7bitAddress(I2C1,((addr<<1)|0),I2C_Direction_Transmitter);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_SendData(I2C1,reg);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_GenerateSTART(I2C1,ENABLE);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_Send7bitAddress(I2C1,((addr<<1)|0),I2C_Direction_Receiver);
        i=0;
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)&&(i<2100)){
                i++;
                if(i>2000)
                        return 1;
        }
        I2C_AcknowledgeConfig(I2C1,ENABLE);
        while(len){
                i=0;
                while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)&&(i<2100)){
                  i++;
                  if(i>2000)
                          return 1;
          }      
                if(len<=2){
                         I2C_AcknowledgeConfig(I2C1,DISABLE);
             I2C_GenerateSTOP(I2C1,ENABLE);
           }
                *buf = I2C_ReceiveData(I2C1);        //读数据,发送ACK                       
           len--;
           buf++;                 
        }   
        return 0;       
}
[/mw_shl_code]
回复

使用道具 举报

5

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-1-10
在线时间
19 小时
 楼主| 发表于 2015-1-24 21:06:32 | 显示全部楼层
默默自顶、、、
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-24 22:52:33 | 显示全部楼层
帮顶....
回复

使用道具 举报

5

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2015-1-10
在线时间
19 小时
 楼主| 发表于 2015-1-25 20:23:39 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,407板子上MPU6050程序中mpu_dmp_init()返回值8代表的是什么。。。?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-25 23:24:32 | 显示全部楼层
回复【4楼】Director_Liu:
---------------------------------
看代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-8-24
在线时间
0 小时
发表于 2016-8-24 11:13:34 | 显示全部楼层
注释没改
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2016-11-16
在线时间
14 小时
发表于 2016-11-17 18:14:12 | 显示全部楼层
原子哥厉害
回复

使用道具 举报

8

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
428
金钱
428
注册时间
2015-4-24
在线时间
85 小时
发表于 2016-11-17 20:22:09 | 显示全部楼层

原子哥,能帮我看一个问题吗,移植的是您精英版的例子,谢谢http://www.openedv.com/thread-88617-1-1.html
回复

使用道具 举报

9

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2017-12-12
在线时间
19 小时
发表于 2017-12-25 10:13:39 | 显示全部楼层
本帖最后由 123精灵123 于 2017-12-25 10:15 编辑

我可以问一下,//初始化IIC void MPU_IIC_Init(void)
{                                          
           GPIO_InitTypeDef  GPIO_InitStructure;      
           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//先使能外设IO PORTC时钟      
           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;         // 端口配置   
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 //推挽输出  
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz  
          GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIO      
           GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);                                                 //PB10,PB11 输出高         
  }


回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2017-9-28
在线时间
8 小时
发表于 2018-1-28 15:50:35 | 显示全部楼层
哇,好烦,我自己都从MSP430移植到TM4了,这从TM4向K60移植竟然出问题了,自检不通过,我想问下原子哥这个IIC速率大概能允许的是多少
回复

使用道具 举报

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
发表于 2018-10-15 16:48:00 | 显示全部楼层
飞飞君 发表于 2018-1-28 15:50
**** 作者被禁止或删除 内容自动屏蔽 ****

大佬 我现在在做TM4的I2C读9250 现在dmp卡在了加载固件失败那里 能问下你当初有没有遇到这个问题啊 怎么解决的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表