CubeMX配置SPI读取ICM20602陀螺仪数据

前言:前阵子电赛买了个ICM系列陀螺仪,数据比MPU系列稳定,但是没有DMP模块,只能读到原始AD值然后做转换算法输出六轴数据,现在想用HAL库配置下SPI读取下相关数据。

软件:

STM32CubeMX V5.3.0  

固件库版本:
STM32Cube FW_F1 V1.8.0

硬件:

STM32F103C8T6

ICM20602陀螺仪模块

正文:

1、和前面一样配置一个C8T6的工程,然后开启SPI,配置成全双工模式,然后这里注意SPI通讯速率,这个陀螺仪最大是10MHz,然后这个SPI2挂在36MHz的时钟上,所以设置4分频,时钟变成了9MHz,在这个陀螺仪接受范围内。

 

CubeMX配置SPI读取ICM20602陀螺仪数据_第1张图片

2、配置片选引脚,这个模块上集成了3个传感器,这里用普通IO配置他们的片选引脚

CubeMX配置SPI读取ICM20602陀螺仪数据_第2张图片

3、生成代码,添加陀螺仪通讯协议

在HAL库里面SPI接口发送和接收数据主要调用以下三个函数:

HAL_StatusTypeDef  HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);//发送数据
HAL_StatusTypeDef  HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);//接收数据
HAL_StatusTypeDef  HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);//接收数据

在spi.c文件里面封装一下一些接下来要使用到的函数

CubeMX配置SPI读取ICM20602陀螺仪数据_第3张图片

4、写三个传感器模块的相关通讯协议获取传感器数据,标准化数据

 

5、写入代码看看效果

CubeMX配置SPI读取ICM20602陀螺仪数据_第4张图片

这是陀螺仪在静止状态下的输出,可以看到数据还是非常稳定的,其中加速度计有静漂,这个我们后期可以通过补偿来解决。

下一步做姿态融合看看具体效果。

你可能感兴趣的:(STM32)