1、和前面一样配置一个C8T6的工程,然后开启SPI,配置成全双工模式,然后这里注意SPI通讯速率,这个陀螺仪最大是10MHz,然后这个SPI2挂在36MHz的时钟上,所以设置4分频,时钟变成了9MHz,在这个陀螺仪接受范围内。
SPI2使用的时钟:
可以适当修改这里的频率从而得到合适的SPI速率
2、配置片选引脚,这个模块上集成了3个传感器,这里用普通IO配置他们的片选引脚
记住修改PIN_LABEL,便于后期识别
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文件里面封装一下一些接下来要使用到的函数
uint8_t SPI2_ReadWriteByte(uint8_t txdata);
void SPI2_Transmit(uint8_t *ucp_Data, uint16_t us_Size);
void SPI2_Receive(uint8_t *ucp_Data, uint16_t us_Size);
uint8_t SPI2_ReadWriteByte(uint8_t txdata)
{
uint8_t rxdata=00;
HAL_SPI_TransmitReceive(&hspi2,&txdata,&rxdata,1,55);
return rxdata;
}
void SPI2_Transmit(uint8_t *ucp_Data, uint16_t us_Size)
{
HAL_SPI_Transmit(&hspi2, ucp_Data, us_Size, 55);
}
void SPI2_Receive(uint8_t *ucp_Data, uint16_t us_Size)
{
HAL_SPI_Receive(&hspi2, ucp_Data, us_Size, 55);
}