stm32配置SPI(读取ICM20602陀螺仪数据)

1、和前面一样配置一个C8T6的工程,然后开启SPI,配置成全双工模式,然后这里注意SPI通讯速率,这个陀螺仪最大是10MHz,然后这个SPI2挂在36MHz的时钟上,所以设置4分频,时钟变成了9MHz,在这个陀螺仪接受范围内。
在这里插入图片描述
SPI2使用的时钟:
stm32配置SPI(读取ICM20602陀螺仪数据)_第1张图片
可以适当修改这里的频率从而得到合适的SPI速率
stm32配置SPI(读取ICM20602陀螺仪数据)_第2张图片
2、配置片选引脚,这个模块上集成了3个传感器,这里用普通IO配置他们的片选引脚
stm32配置SPI(读取ICM20602陀螺仪数据)_第3张图片
记住修改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);
}

你可能感兴趣的:(#,stm32)