在使用 STM32 + MPU-6050 的时候,期望 STM32 进入停止模式后靠 MPU-6050 的运动检测来触发 STM32 的外部中断唤醒。却发现 INT 脚一直为高,不拉低。
根据 MPU-6050 的 datasheet
在初始化时配置了中断
1 2 3 4
| MPU_Write_Byte(MPU_INTBP_CFG_REG, 0xA0); MPU_Write_Byte(MPU_MDETECT_CTRL_REG, 0x1F); MPU_Write_Byte(MPU_MOTION_DET_REG, 0x01); MPU_Write_Byte(MPU_INT_EN_REG, 0x40);
|
结果 INT 脚却始终为高,怎么晃动都不拉低。
原来是看的 datasheet 版本太老了,新版本已经没有这个运动检测中断了。
于是只好在停止模式下用 RTC 闹钟定时检查加速度的变化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| ENTERSTOPMODE: IWDG_Feed(); dev_rtc_setAlarm(3); IWDG_Feed(); DEBUG_MSG("standby mode entered\r\n"); IWDG_Feed(); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); if (dev_rtc_isAlarm()) { IWDG_Feed(); MPU_Get_Accelerometer(&t_aacx, &t_aacy,&t_aacz); if (abs(t_aacx - aacx) > THRESHOLD_ACCELEROMETER_CHANGE || abs(t_aacy - aacy) > THRESHOLD_ACCELEROMETER_CHANGE || abs(t_aacz - aacz) > THRESHOLD_ACCELEROMETER_CHANGE) { while (1) {;} }
goto ENTERSTOPMODE; }
|