前言:前阵子电赛买了个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,在这个陀螺仪接受范围内。
2、配置片选引脚,这个模块上集成了3个传感器,这里用普通IO配置他们的片选引脚
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文件里面封装一下一些接下来要使用到的函数
4、写三个传感器模块的相关通讯协议获取传感器数据,标准化数据
5、写入代码看看效果
这是陀螺仪在静止状态下的输出,可以看到数据还是非常稳定的,其中加速度计有静漂,这个我们后期可以通过补偿来解决。
下一步做姿态融合看看具体效果。