基于Stm32CubeMX下Mpu6050模拟IIC的Dmp的移植

基于Stm32CubeMX下Mpu6050模拟IIC的Dmp的移植

一、问题背景

以前熟悉的是在标准库下移植Mpu6050的DMP,获取航向角等等。现在要HAL库下移植MPU6050的DMP库。先分析一下,如果要移植Mpu6050的DMP,从底层到应用层大概分为这几个步骤:1. 底层IIC驱动编写。2. Mpu6050初始化及配置函数层。 3. 硬件驱动程序通过I2C与传感器通信。4. Dmp应用层。

首先要熟悉在标准库下的移植,那么下面的问题只是一些避免入坑的注意事项。

二、面临的问题及解决方法

  1. HAL库下模拟IIC微妙级别的延时如何实现?

    手写一个阻塞式微妙延时函数,可以用示波器测出,或者拿硬件仿真测试出。比如我的如下:

    /*
    	* @name   I2C_Delay
    	* @brief  I2C延时
    	* @param  None
    	* @retval None      
    */
    static void I2C_Delay_us(uint8_t us)
    {
    	uint8_t i = 0;
    	//通过示波器测量进行校准
    	while(us--)
    	{
    		for(i=0;i<7;i++);
    	}
    }
    

    mpuiic.c程序中修改如下图所示:

    image-20210923011645148

    1. IIC引脚的配置

      image-20210923011836662

原先的MPU_IIC_Init()就不需要了,可以把函数内部内容删除,函数名保留着。CubeMX代替了以前基于标准库的配置操作。

但是,mpuiic.h需要修改与引脚有关的设置。比如我用的是PE8、PE9.

image-20210923012106972

  1. 宏定义
    业务在HAL库下,毫秒延时可以用HAL_Delay()实现。
    image-20210923012551316
    很多地方的数据类型用了u8、u16等,可以添加如下宏定义在头文件。
typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;
  1. 各级头文件包含关系

    总:

    image-20210923012335696

三、结论

经测试,是可以正确读出数据的。这里是基于大家熟练移植标准库下的Mpu6050的Dmp库,在HAL库下的移植。祝好运。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值