新人小白,想做四轴,初学stm32.
3月15号在淘宝上买了一块6050模块,今天刚刚用stm32读到数据。其中也遇到了很多问题,现在在这里贴出来跟大家分享一下成功读出来的过程。
先贴一张图吧javascript:;
以前一直在学习51现在转到stm32感觉区别还是挺大的.
下面梳理一下自己遇到过的关于读6050数据的问题:
1. 卖家给的51程序成功读取到6050数据,stm32未成功,网上下载了很多程序也未成功读取(可能自己不会修改某些参数)。
2. stm32模拟IIC管脚问题。
3. 6050初始化问题。
4. IIC读取到数据不正确遇到过问题。1).数据全部为ff 2).数据全部为-1 3).数据有规律的成周期性的循环 4).读取6050 0x75地址 数值为 ff或0或不确定的值(反正不是0x68)
自己的处理过程:
1.先用51成功的读到了6050数据(证明6050是好的),看别人的程序的大体框架(细看有些地方也看不懂......)。
2.首先是配置问题————输出用推挽输出,输入用上拉输入(总线外部未接上拉电阻),端口时钟,IO口初始化,SDA端口不停地切换输入输出模式。
其次是模拟IIC协议—————基础(后来由于读不到正确的数据,把以前的资料拿出来看了很多遍......)
3.6050初始化,有很多寄存器,也没有细细研究。但是我在一点里提到,虽然网上很多stm32读6050程序未能成功运行,但是他们的初始化程序大致相同。所以我就直接粘过来用了......(以后再细细研究)
4.IIC读数据不正确:
过程很坎坷......今天礼拜日没课,所以昨晚干到3点多也未能读到正确数据........
总结一下论坛里遇到过此问题后的处理方法吧:
1).IIC模拟不正确 //包括电平持续时间,应答的发出,数据读取逻辑顺序
2).模拟正确后没有初始化
3).IIC初始化和6050初始化的时间间隔,需要延迟一段时间
4).软件复位6050。论坛里有人提到过是在PWR_MGMT_1(地址0x6b)寄存器中的bit7 DEVICE_RESET位 置1复位 。
自己处理方法:
1).保证自己的IIC是对的。先用24C02成功读写数据
2).保证6050的器件地址0xd0无误后,用IIC读取6050的WHO_IM_I寄存器(地址0x75),默认值为0x68。成功读到0x68=104后就成功了一大半。
3).(得寸进尺)读到0x68后,初始化6050再尝试去读取它x轴上的加速度 (MPU6050_RA_ACCEL_XOUT_H 0x3B)<<8|(MPU6050_RA_ACCEL_XOUT_L 0x3C)
//高八位与低八位合成十六位数据(可省略此步)
4).上面成功后就可以批量的去读取 加速度:X, Y, Z 陀螺仪:X ,Y ,Z 温度:temp 然后再用串口发送就好了
再贴一张自己调试的时候用到的24c02的图片
最后奉上自己读写成功的程序,还没整理比较乱......
IIC用的刘洋老师的 板子用的是原子的MINI STM32 芯片STM32F103 IIC_SDA.PB11 IIC_SCL.PB10 修改IIC端口时只需在IIC.h文件中修改相应的宏定义即可
6050寄存器中文手册论坛里有人上传大家可以去搜索一下。转载
|