最近在用STM32F411驱动MPU6500,发现总是会发生dmp_load_motion_driver_firmware函数执行不成功,在晚上找了找发现有很多人都发现有这个问题。自己调试了几天,修改了如下几点:
1、在mpu_write_mem函数中增加延迟。
2、在实际调试中发现如果在调用dmp_load_motion_driver_firmware函数的过程中有中断相应会很容易错误,由于的我的使用了freertos操作系统,所以在开启线程后会有上下文切换,很容易造成初始化错误。所以将初始化函数全部移到线程启动之前。
3、修改了I2C引脚的驱动,将引脚上拉修改为无上拉,因为不成本身模块上就已经具备了上拉电阻。
实际测试下来基本说不会再出现错误。当然如果频繁进行操作还是会出现错误。
补充:
经过进一步调试,实际测试下来采用如下方式效果更好:
i2c busy死锁->i2c失能->i2c初始化->sda、scl配饰为输出并置高电平->sda、scl配置为i2c管教复用。关于dmp_load_motion_driver_firmware错误问题,建议将该线程优先级提高,避免被打断。