OpenEdv-开源电子网

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

GY-91 MPU9250+BMP280 十轴传感器STM32f103

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-2-25
在线时间
2 小时
发表于 2016-12-21 15:12:03 | 显示全部楼层 |阅读模式
    最近在弄四轴, 淘宝上买的GY-91 MPU9250+BMP280 十轴传感器,在开源电子网上找到了MPU9250部分程序,发现百度上没有BMP280在STM32上的程序,所以自己写了BMP280部分。程序送上。

BST-BMP280-DS001-11.pdf

1.42 MB, 下载次数: 2317

数据手册

GY-91 MPU9250 BMP280 十轴传感器STM32f103.zip

616.73 KB, 下载次数: 2443

程序

PS-MPU-9250A-01.pdf

655.2 KB, 下载次数: 789

数据手册

RM-MPU-9250A-00.pdf

508.01 KB, 下载次数: 875

数据手册

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2021-6-16
在线时间
10 小时
发表于 2021-6-18 11:58:41 | 显示全部楼层
本帖最后由 ah秘峰 于 2021-6-18 12:00 编辑

我遇到了巨坑,陀螺仪初始化过不去,细查发现器件ID读取错误,下面是部分代码和串口数据(代码取自原子哥的MPU9250例程)陀螺仪初始化代码截取
        MPU_Write_Byte(MPU9250_ADDR,MPU_INTBP_CFG_REG,0X82);//INT引脚低电平有效,开启bypass模式,可以直接读取磁力计
        res=MPU_Read_Byte(MPU9250_ADDR,MPU_DEVICE_ID_REG);  //读取MPU6500的ID
        usart1_send_char(0XBB);
        usart1_send_char(res);
        usart1_send_char(0XBB);
    if(res==MPU6500_ID1 || res==MPU6500_ID2) //器件ID正确
    {
        MPU_Write_Byte(MPU9250_ADDR,MPU_PWR_MGMT1_REG,0X01);          //设置CLKSEL,PLL X轴为参考
        MPU_Write_Byte(MPU9250_ADDR,MPU_PWR_MGMT2_REG,0X00);          //加速度与陀螺仪都工作
                    MPU_Set_Rate(50);                                                               //设置采样率为50Hz   
    }//else return 1;

    res=MPU_Read_Byte(AK8963_ADDR,MAG_WIA);                            //读取AK8963 ID   
        
        usart1_send_char(0XCC);
        usart1_send_char(res);
        usart1_send_char(0XCC);
    if(res==AK8963_ID)
    {
        MPU_Write_Byte(AK8963_ADDR,MAG_CNTL1,0X11);                //设置AK8963为单次测量模式
    }else return 2;

串口读取的数据为BB 70 BB CC FF CC AA 02 AA
读取的器件ID陀螺仪为0x70,地磁计为0xff,
弄了一整天,就是过不了,最后换了一种MPU9250模块,秒过!!!!
最后联系了卖家,卖家给退款退货了,坑死我了!!!!
回复 支持 1 反对 0

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-2-25
在线时间
2 小时
 楼主| 发表于 2016-12-21 15:12:04 | 显示全部楼层
第一次发帖,好紧张>_< ,会不会被打啊。
回复 支持 反对

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-21 15:25:37 | 显示全部楼层
鼓励下.......
shop60994719.taobao.com
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2016-7-10
在线时间
29 小时
发表于 2016-12-21 16:31:51 | 显示全部楼层
楼主我想问一下,我最近在用gy-25角度读取模块读取角度,它的读取范围是-180-180度,我用4位段式液晶将读取的角度显示出来,不显示符号位,保留一位小数,读取0-180度时能正确显示出来,但是读取-180-0度时显示就不正确了,-180度显示480左右的数字,接近0时显示的是656左右的数字,这是什么问题?  gy-25模块通过串口直接与电脑相连,在上位机软件上面能显示-180-180度
回复 支持 反对

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2017-4-16 17:07:35 | 显示全部楼层
楼主,我用您提供的BMP280驱动试了一下,数据一致返回为0,请问是我操作失误还是怎么回事,求楼主指导!
我的模块如下图所示:
主函数
[mw_shl_code=c,true]while(1)
        {
                BMP280_ReadPressureTemperature(&bmp280_press,&bmp280_temp);//bmp280获取气压值和温度
                printf("bmp280_press:%d\r\n",bmp280_press);
                printf("bmp280_temp :%d\r\n\r\n",bmp280_temp);//比mpu9250的温度更准
                delay_ms(1000);

                i++;
                delay_ms(10);
                if(i==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        i=0;
                }                  
        }[/mw_shl_code]
QQ截图20170416165858.png
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-2-25
在线时间
2 小时
 楼主| 发表于 2017-4-18 11:34:49 | 显示全部楼层
MrXiong 发表于 2017-4-16 17:07
楼主,我用您提供的BMP280驱动试了一下,数据一致返回为0,请问是我操作失误还是怎么回事,求楼主指导!
...

确定IIC总线正确连接上BMP280,可以用IIC发送启示信号,看是否有应答,没有的话检查硬件连接是否正常。芯片接口选择是否对了。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-2-25
在线时间
2 小时
 楼主| 发表于 2017-4-18 11:37:54 | 显示全部楼层
MrXiong 发表于 2017-4-16 17:07
楼主,我用您提供的BMP280驱动试了一下,数据一致返回为0,请问是我操作失误还是怎么回事,求楼主指导!
...

void IIC_Slave_List(void)
{
        u8 i=0,res = 0;
        for(i=0;i<255;i++)
        {
                IIC_Start();
    IIC_Send_Byte((i<<1)|0);
                res = IIC_Wait_Ack();          //等待应答
                if(res == 0)
                        printf("IIC_ADDR = %#x\r\n",i);
                IIC_Stop();
        }printf("\r\n");
}
回复 支持 反对

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2017-4-19 21:18:02 | 显示全部楼层
IIC有应答,
数据显示为:
IIC_ADDR = 0x50
IIC_ADDR = 0x76
IIC_ADDR = 0xd0
IIC_ADDR = 0xf6
如下图1,
模块链接为图二。
手册有关连接的截图为图三、图四。
经过测试,发现问题出现在[mw_shl_code=c,true]u8 BMP280_Init(void)
{
        BMP280_GPIO_Init();
        LCD_ShowNum(30,350,2,2,16);                //显示温度
        if(BMP280_Chack())return 1;//BMP280检测芯片
        else
        {
                //if(BMP280_SetSoftReset())return 2;//软件复位使用不了,使用之后用不了
    if(BMP280_CalibParam())return 3;//
                if(BMP280_SetPowerMode(BMP280_NORMAL_MODE))return 4;
                if(BMP280_SetWorkMode(BMP280_ULTRA_LOW_POWER_MODE))return 5;
                if(BMP280_SetStandbyDurn(BMP280_T_SB_0_5MS))return 6;
        }return 0;
}[/mw_shl_code]

其中:
[mw_shl_code=c,true]u8 BMP280_Chack(void)
{
        u16 time = 0;
        u8 chip_ID = 0;
        while(time<1000)
        {
                chip_ID = BMP280_Read_Byte(BMP280_CHIPID_REG);               
                LCD_ShowNum(30,370,chip_ID,2,16);                //测试行
                printf("chip_ID = %#x\r\n",chip_ID); //测试行
                if(chip_ID==0x57||chip_ID==0x58||chip_ID==0x59)break;//检测到芯片
                else time++;
                delay_ms(1);
        }
        if(time==1000)return 1;//未检测到芯片
        else
        {
                p_bmp280.chip_id = chip_ID;//记录芯片ID
                return 0;
        }
}[/mw_shl_code]
发现BMP280_Chack()函数返回为1,即未检测到芯片。这里是为什么?请楼主赐教。

图一

图一

图二

图二

图三

图三

图四

图四
回复 支持 反对

使用道具 举报

耀眼姿态 该用户已被删除
发表于 2017-5-4 10:37:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2017-5-11
在线时间
0 小时
发表于 2017-5-11 21:30:04 | 显示全部楼层
您好,请问一下,为什么例程直接下载之后没有反应。。。。我的是STM32F103RCT6
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-1-24
在线时间
8 小时
发表于 2017-11-3 14:03:06 | 显示全部楼层

鼓励下.......
鼓励下.......
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-10-16
在线时间
24 小时
发表于 2019-10-22 17:41:40 | 显示全部楼层
mark mark
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-11-6
在线时间
7 小时
发表于 2020-2-6 20:30:11 | 显示全部楼层
大神   你的qq多少  我加你问你几个问题可以吗
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-2-25
在线时间
11 小时
发表于 2020-2-28 09:36:56 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2013-8-15
在线时间
60 小时
发表于 2020-3-20 10:41:34 | 显示全部楼层
谢谢楼主分享!!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-4-24
在线时间
2 小时
发表于 2020-4-2 08:29:05 | 显示全部楼层
用您的例程 读出一直是0
不知道怎么回事
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2017-11-2
在线时间
17 小时
发表于 2020-10-9 15:45:02 | 显示全部楼层
楼主还在吗,我想知道BMP280_GPIO_Init你初始化的那几个接口是做什么用的?我咋感觉不用这个函数也可以?谢谢
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2018-11-18
在线时间
20 小时
发表于 2020-11-10 11:30:56 | 显示全部楼层
好资源
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-11-22
在线时间
2 小时
发表于 2020-11-22 18:34:42 | 显示全部楼层
赞,下载学习一下,谢谢楼主~~~
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-11-22
在线时间
3 小时
发表于 2020-12-7 22:36:49 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2014-12-1
在线时间
34 小时
发表于 2021-3-13 14:31:03 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2020-10-9
在线时间
34 小时
发表于 2021-5-16 15:22:53 | 显示全部楼层
可以交流吗?大神!我iic总线接了3个
回复 支持 反对

使用道具 举报

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2020-10-9
在线时间
34 小时
发表于 2021-5-17 15:18:59 | 显示全部楼层
MrXiong 发表于 2017-4-19 21:18
IIC有应答,
数据显示为:
IIC_ADDR = 0x50

你解决问题了吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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