一、MPU6050初始化

  1. /**************************实现函数********************************************
  2. *函数原型:        void MPU6050_initialize(void)
  3. *功  能:     初始化     MPU6050 以进入可用状态。
  4. *******************************************************************************/
  5. void MPU6050_initialize(void)
  6. {
  7. IICwriteByte(devAddr, MPU6050_RA_PWR_MGMT_1, 0x80); //PWR_MGMT_1 -- DEVICE_RESET 1
  8. delay_ms(50);
  9. IICwriteByte(devAddr, MPU6050_RA_SMPLRT_DIV, 0x00); //SMPLRT_DIV -- SMPLRT_DIV = 0 Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
  10. IICwriteByte(devAddr, MPU6050_RA_PWR_MGMT_1, 0x03); //PWR_MGMT_1 -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
  11. IICwriteByte(devAddr, MPU6050_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 0 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_PIN_CFG -- INT_LEVEL_HIGH, INT_OPEN_DIS, LATCH_INT_DIS, INT_RD_CLEAR_DIS, FSYNC_INT_LEVEL_HIGH, FSYNC_INT_DIS, I2C_BYPASS_EN, CLOCK_DIS
  12. IICwriteByte(devAddr, MPU6050_RA_CONFIG, MPU6050_DLPF_BW_42); //CONFIG -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz GYRO bandwidth = 256Hz)
  13. MPU6050_setFullScaleGyroRange(MPU6050_GYRO_FS_2000);
  14. // Accel scale 8g (4096 LSB/g)
  15. IICwriteByte(devAddr, MPU6050_RA_ACCEL_CONFIG, 2 << 3);
  16. }

初始化过程

1. 对寄存器register 107 power management 1的bit7置1复位

2. 对寄存器register 25 Sample Rate Divider,设置SMPLRT_DIV为0。(最大)

3. 对寄存器register 107 power management 1 以z轴重力计为参考系。

4. 对寄存器register 55 INT PIN/BYPASS ENABLE CONFIGURATION设置为00000010:INT脚逻辑电平为高电平,推挽输出,产生50us脉冲,读取INT_STATUS后中断清除,关闭FSYNC中断,I2C_BYPASSS_EN为1和I2C_MST_EN为0时,MCU可以直接访问I2C总线。

5. 对寄存器register 27 陀螺仪设置量程为±2000°/s

6. 对寄存器register 28 加速度计量程为±8g

2017年6月4日:为了移植DMP官方的5.1库,花了好多时间。这里对IIC的Slave地址进行总结。

网上有各种各样的地址版本,如0x68,0xD0等等。明明地址不一样,为什么他们都能用呢。



就是这里:第一个地址是b1101000,而第二个地址是b1101001。注意这是7位的二进制数,我们一般用第一个,也就是b1101000

相关的IIC信息:



所以地址需要在后面添加一位读写位,所以正确的地址应该是b1101 0000和b1101 0001。

而网上的0xD0就是b1101 0000,但是0x68却是b01101000。

所以0x68其实是7位的地址,这也就是为什么有的IIC在发送地址的时候是左移1位的。

而使用D0的地址时却是直接使用的。这就是区别。。。。。。。艹

最新文章

  1. Add&amp;Delete WindowService
  2. HDU 2222 AC自动机模板题
  3. selenium+python笔记9
  4. STM32移植UCGUI3.90笔记
  5. Linux shell入门基础(五)
  6. User has no SELECT privilege on V$SESSION
  7. C#开发人员能够可视化操作windows服务
  8. windows composer安装
  9. 【转】php缓冲 output_buffering和ob_start
  10. 如何开发一个微信小程序
  11. 项目总结一:情感分类项目(emojify)
  12. Couldn&#39;t find preset &quot;es2015&quot; relative to directory问题解决
  13. spring boot 项目 热启动
  14. [leetcode]101. Symmetric Tree对称树
  15. 【代码笔记】iOS-collectionView实现照片删除
  16. Android ADB命令?这一次我再也不死记了!【简单说】
  17. 黑客编程教程(十三)多线程DOS程序
  18. 修改jdk
  19. C++ STL 优先队列 priority_queue 详解(转)
  20. 5,临界区 之 lock

热门文章

  1. flask中间件请求流程
  2. sql server 2000安装程序配置服务器失败
  3. 【Java】SpringBoot 佛祖保佑banner.txt
  4. Eternal Victory
  5. 27 October in ss
  6. char指针类型的传值和传址
  7. smartGit的使用
  8. python- &#39; % &#39;运算符的用途(非常重要)
  9. C# 几进制 转换到几进制
  10. cross-env