max31865是一个SPI芯片 用STM32读取温度的步骤分为3步。
第一步:初始化STM32 的SPI
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
第二步:配置max31865芯片,分为2线制和3线制
spi_config(0xD1);//3线制配置,0xC1为2线制配置
void spi_config(uint8_t cmd)
{
CS_ENABLE; //使能SPI
SPI1_ReadWriteByte(0x80); //配置指令
SPI1_ReadWriteByte(cmd); //配置参数
CS_DISABLE;
}
uint8_t SPI1_ReadWriteByte(uint8_t cmd)
{
uint8_t RxData;
HAL_SPI_TransmitReceive(&hspi1, &cmd, &RxData, 1, 1000);
return RxData;
}
第三步:发送读温度的命令读取温度的MSB和LSB,然后组合出温度。
uint8_t Temp_H,Temp_L;
uint16_t Temp_Hex;
float Temp_Float;//最终摄氏温度
while (1)
{
Temp_H=0;
Temp_L=0;
Temp_Hex=0;
CS_ENABLE;
SPI1_ReadWriteByte(0x01); //读MSB命令
Temp_H=SPI1_ReadWriteByte(0xFF);
Temp_L=SPI1_ReadWriteByte(0xFF);
CS_DISABLE;
Temp_Hex=((Temp_H<<8)|Temp_L)>>1;
Temp_Float = (((Temp_Hex*430.0)/32768)-100)/0.385055;
}
cf3b0e40a434865832f66983b2bab7d0