收到了论坛送的温度传感器Thermo 6 Click,开心开心,上图上图
听说是金主贸泽商城赞助的,咱直接去贸泽商城去找资料
可惜没找到手册,但具体芯片型号可以找到,MAX31875
顺藤摸瓜,我们直接搜索这个芯片,然后找手册.
找到手册,可惜是英文的,大概看了下手册
主要找到了主机地址以及存温度值的寄存器,
主要就是温度值存在00H寄存器中,16位数据,是2的补码,以两个字节读出,位[15:3]包含温度数据,分辨率由01H寄存器决定,默认为40H,即为0.0625℃,有了这些数据,就开始写程序吧.
我直接用STM32CUBEMX配置一个串口和IIC,这里硬件平台我用的是野火的霸道,配置如下
然后直接生成工程
直接添加这一段函数重定向printf函数到串口输出
#if 1 #include <stdio.h> int fputc(int ch, FILE *stream) { /* 堵塞判断串口是否发送完成 */ while((USART1->SR & 0X40) == 0); /* 串口发送完成,将该字符发送 */ USART1->DR = (uint8_t) ch; return ch; } #endif6.编写Thermo 6 Click驱动
#define MAX31875_ADDR 0x48 #define MAX31875_BATTERY_WRITE_ADDR (MAX31875_ADDR << 1) #define MAX31875_BATTERY_READ_ADDR ((MAX31875_ADDR << 1) + 1) uint8_t MAX31875_Read_Byte(uint16_t addr, uint8_t* read_buf) { return HAL_I2C_Mem_Read(&hi2c1, MAX31875_BATTERY_READ_ADDR, addr, I2C_MEMADD_SIZE_8BIT, read_buf, 2, 0xFFFF); } uint8_t MAX31875_Write_Byte(uint16_t addr, uint8_t* dat) { return HAL_I2C_Mem_Write(&hi2c1, MAX31875_BATTERY_WRITE_ADDR, addr, I2C_MEMADD_SIZE_8BIT, dat, 1, 0xFFFF); } float MAX31875_Read_tem(void) { uint8_t recv_buf[2]; uint16_t temp_num; float temp; if(HAL_OK == MAX31875_Read_Byte(0X00,&recv_buf[0])) { temp_num = recv_buf[0]*256+recv_buf[1]; temp = ((float)(temp_num>>4))/16.0; return temp; } return 0; }
下边是主函数
int main(void) { /* USER CODE BEGIN 1 */ float temp; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ temp = MAX31875_Read_tem(); printf("temp:%f\r\n",temp); HAL_Delay(1000); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }7.展示
测出值福禄克表测出的值好像差的不错哈,那天闲了上个云,检测一下家里的暖气,这次就到这吧.