@[TOC]STM32初始化MPU6050低功耗 中断唤醒
STM32初始化MPU6050低功耗 中断唤醒
代码如下: 已亲自测试(2021.2.4) (以下代码 采样率是20Hz)
低功耗中断唤醒 记得连MPU6050的INT引脚到MCU
// An highlighted block
void Motion_Interrupt_Init(void) //运动中断
{
// uint8_t res = 0;
extern I2C_HandleTypeDef hi2c2;
HAL_I2C_Init(&hi2c2);
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x80); //0X6B(107) 恢复成默认值
HAL_Delay(100);//延时
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x00); //0X6B(107)
MPU_Write_Byte(MPU_PWR_MGMT2_REG,0x00); //0X6C(108)
//高通滤波器复位
MPU_Write_Byte(MPU_ACCEL_CFG_REG,0x00); //0X1C(28) //0x10(+-4g)
//设置低通滤波器 256Hz带宽
MPU_Write_Byte(MPU_CFG_REG,0x00); //0X1A(26)
//设置运动持续时间
MPU_Write_Byte(MPU_MOTION_DUR,0x01); //0X20(32) 0x01 (猜想:0x01:1ms)
// //INT引脚/旁路使能配置
MPU_Write_Byte(MPU_INTBP_CFG_REG,0x50); //0X37(55) 高电平触发50us 不访问从IIC总线
//设置运动阈值
MPU_Write_Byte(MPU_MOTION_DET_REG,0x05); //0X1F(31) 运动阈值1~255 1
//延时至少1ms 采集样本
HAL_Delay(5);//延时
// //运动检测控制寄存器
// MPU_Write_Byte(MPU_MDETECT_CTRL_REG,0x30); //0x69(105) 不清楚为什么这么配置
//设置高通滤波器 保持设置
MPU_Write_Byte(MPU_ACCEL_CFG_REG,0x07); //0X1C(28)
//设置运动中断使能
MPU_Write_Byte(MPU_INT_EN_REG,0x40); //0X38(56)
//设置唤醒频率
MPU_Write_Byte(MPU_PWR_MGMT2_REG,0x87); //0X6C(108) 采样率0xC7(40Hz) 0x87(20Hz) 0x47(5Hz) 0x07
//启用循环模式(低功耗模式)
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x28); //0X6B(107) OK
}