主题中讨论的其他器件: LM71
大家好、
我的客户使用 LM95071通过 SPI 进行温度测量。 他们发现,经过一天或两天的运行时间后,它可能会一直发送相同的两个字节,有时设备 ID 就像处于睡眠模式一样,最近它的读数是14.6degC,不会对热量作出反应。
读取函数每秒被调用一次。 我还附加了一个16个时钟脉冲的示波器快照、以获得使用的两个字节。 示波器速度较慢(50MHz)、因此时钟看起来是四舍五入的。 在第一个附件中、输出是器件 ID。 片选为绿色、LM95输出为蓝色、时钟为紫色。 第二个附件是重新启动后的正常输出、显示室温为21.21摄氏度
重新启动会始终修复它。 他使用以下代码从 STM32L431以10MHz 运行:
浮点 LM95071_GET_degC (空)
{
int16_t MSB、LSB;
int16_t 计数;
//等待传输完成
while (!LL_SPI_IsActiveFlag_TXE (LM95071_SPI_PORT)|| LL_SPI_IsActiveFlag_BSY (LM95071_SPI_PORT));//等待传输完成
while (LL_SPI_IsActiveFlag_RXNE (LM95071_SPI_PORT))
{//确保 FIFO 缓冲区为空
LL_SPI_ReceiveData8 (LM95071_SPI_PORT);//读取数据
}
LL_SPI_Disable (LM95071_SPI_PORT);//端口必须禁用才能更改相位和极性
LL_SPI_SetClockPolarity (LM95071_SPI_PORT、LL_SPI_POLARY_LOW);
LL_SPI_SetClockPhase (LM95071_SPI_PORT、LL_SPI_PHASE_2EDGE);
LL_SPI_Enable (LM95071_SPI_PORT);//启用 SPI 端口
LL_GPIO_ResetOutputPin (LM95071_CS_PORT、LM95071_CS_PIN);//将 LM95071 /CS 引脚拉至低电平
LL_SPI_TransmitData8 (LM95071_SPI_PORT、0); //虚拟 TX
LL_SPI_TransmitData8 (LM95071_SPI_PORT、0); //虚拟 TX
while (!LL_SPI_IsActiveFlag_TXE (LM95071_SPI_PORT)|| LL_SPI_IsActiveFlag_BSY (LM95071_SPI_PORT));//等待传输完成
LL_GPIO_SetOutputPin (LM95071_CS_PORT、LM95071_CS_PIN);//将 LM95071 /Cs 引脚拉高
MSB=LL_SPI_ReceiveData8 (LM95071_SPI_PORT);//读取数据
LSB = LL_SPI_ReceiveData8 (LM95071_SPI_PORT)和0xFC;//读取数据并清除2个 LSB
count=LSB+(MSB<8);//转换为二进制补码整数
return ((float) count* LM95071_degC_PER_LSB);//返回 degC
}
是否有任何可能出错的想法?