这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » Thermo 6 Click + STM32 简单测温

共5条 1/1 1 跳转至

Thermo 6 Click + STM32 简单测温

高工
2020-12-01 13:02:34     打赏
1.开箱

收到了论坛送的温度传感器Thermo 6 Click,开心开心,上图上图

2.找资料

听说是金主贸泽商城赞助的,咱直接去贸泽商城去找资料
可惜没找到手册,但具体芯片型号可以找到,MAX31875
顺藤摸瓜,我们直接搜索这个芯片,然后找手册.

3.分析手册

找到手册,可惜是英文的,大概看了下手册
主要找到了主机地址以及存温度值的寄存器, 主要就是温度值存在00H寄存器中,16位数据,是2的补码,以两个字节读出,位[15:3]包含温度数据,分辨率由01H寄存器决定,默认为40H,即为0.0625℃,有了这些数据,就开始写程序吧.

4.配置STM32

我直接用STM32CUBEMX配置一个串口和IIC,这里硬件平台我用的是野火的霸道,配置如下
然后直接生成工程

5.重定向printf函数到串口输出

直接添加这一段函数重定向printf函数到串口输出  

#if 1
#include <stdio.h>
int fputc(int ch, FILE *stream)
{
/* 堵塞判断串口是否发送完成 */
while((USART1->SR & 0X40) == 0);

/* 串口发送完成,将该字符发送 */
USART1->DR = (uint8_t) ch;

return ch;
}
#endif
6.编写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.展示

测出值福禄克表测出的值好像差的不错哈,那天闲了上个云,检测一下家里的暖气,这次就到这吧.




关键词: Click     Thermo     STM32    

管理员
2020-12-01 13:42:42     打赏
2楼

前来打call


高工
2020-12-01 15:33:00     打赏
3楼

谢谢分享


专家
2020-12-02 22:19:16     打赏
4楼

动手能力强,加油



工程师
2020-12-09 22:42:20     打赏
5楼

测试搞的挺好


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]