#include "LM75A.h" #include "stm32f4xx_hal.h" #include "i2c.h" #include "usart.h" /************************************************** @brif 设置设备模式 @para ConfReg:配置寄存器地址 Mode:需要配置的模式 @rev: 无 ****************************************************/ void LM75SetMode(uint8_t ConfReg,uint8_t Mode) { while(HAL_I2C_Mem_Write(&hi2c1,LM75A_ADDR,ConfReg,1,&Mode,1,100) != HAL_OK){}; //写模式寄存器 } //读取温度数据 /************************************************** @brif 读取Temp寄存器值 @para 无 @rev temp:Temp寄存器中的值(低5位无效) ****************************************************/ uint16_t LM75GetTempReg(void) { uint16_t temp; uint8_t tempReg[2]; //tempReg[0]:高八位,tempReg[1]:低八位 if(HAL_I2C_Mem_Read(&hi2c1,LM75A_ADDR,TEMP_ADDR,2,tempReg,2,100) == HAL_OK) { temp = ((tempReg[0] << 8) | tempReg[1]) >> 5; //整合成11位温度数据 } return temp; } //温度数据转换为温度值 /************************************************** @brif 实际温度转换 @para Temp寄存器值 @rev TempValue:转换后的温度值 ****************************************************/ double LM75GetTempValue(uint16_t tempReg) { double TempValue; if((tempReg & 0x0400) == 0x0000) //符号位 D10 = 0 —>实际温度为正 { TempValue = tempReg * 0.125; } else { TempValue = ((tempReg^0xffff)+1) * 0.125; TempValue = -TempValue; } return TempValue; }