max31865芯片读取pt100

news/2024/12/2 18:00:58/
  1. 引入max31865.c和.h文件,引入spi.h和.c文件

  1. 在主函数调用初始化函数MAX31865_init(3);//3线制

#include "MAX31865.h"

#include "spi.h"

/*********************** Global variables *************************/

void max31865_cs_init(void)//温度采集放大器 片选初始化

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //LED0-->PB.12 端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz

GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.12

}

/*********************** Begin Private functions *************************/

void MAX31865_read(uint8_t ch, uint8_t addr, uint8_t *buffer, uint8_t len)

{

addr &= ~MAX31865_READ; // Force read bit on address

if (ch == 1)

{

MAX31865_CH1_CS;

}

else if(ch == 2)

{

MAX31865_CH2_CS;

}

spi_write(&addr, 1);// Write addr

spi_read(buffer, len);// Read data

MAX31865_CS_NULL;

}

/************************************************

void MAX31865_write(uint8_t ch, uint8_t addr, uint8_t data)

{

addr |= MAX31865_WRITE; // Force write bit on address

if (ch == 1)

{

MAX31865_CH1_CS;

}

else if(ch == 2)

{

MAX31865_CH2_CS;

}

spi_write(&addr, 1); // Write addr

spi_write(&data, 1); // Write data

MAX31865_CS_NULL;

}

void enableBias(uint8_t ch, uint8_t enable)//Disable bias voltage使能d7

{

uint8_t status;

MAX31865_read(ch,MAX31856_CONFIG_REG, &status, 1);

if (enable)

{

status |= MAX31856_CONFIG_BIAS;

} else

{

status &= ~MAX31856_CONFIG_BIAS;

}

MAX31865_write(ch,MAX31856_CONFIG_REG, status);

}

/**********************************

void autoConvert(uint8_t ch, uint8_t enable)//设置转换模式开关

{

uint8_t status;

MAX31865_read(ch,MAX31856_CONFIG_REG, &status, 1);

if (enable)

{

status |= MAX31856_CONFIG_MODEAUTO;

} else

{

status &= ~MAX31856_CONFIG_MODEAUTO;

}

MAX31865_write(ch,MAX31856_CONFIG_REG, status);

}

/********************************************************

void setWires(uint8_t ch, uint8_t numwires)//设置几线制接法

{

uint8_t status;

MAX31865_read(ch,MAX31856_CONFIG_REG, &status, 1);

if (numwires == 3) // 3-wire

{

status |= MAX31856_CONFIG_3WIRE;

} else // 2-4 wire

{

status &= ~MAX31856_CONFIG_3WIRE;

}

MAX31865_write(ch,MAX31856_CONFIG_REG, status);

}

/****************************

void single_shot(uint8_t ch)//读取温度,一次读取温度值

{

uint8_t status;

// Read config register

MAX31865_read(ch,MAX31856_CONFIG_REG, &status, 1);

// Enable 1shot bit, and write back

status |= MAX31856_CONFIG_1SHOT;

MAX31865_write(ch,MAX31856_CONFIG_REG, status);

}

/*********************** End Private functions *************************/

void MAX31865_init(uint8_t wires)//温度采集 支持2-4线RTD选择

{

spi1_init();//SDI SCL SDO io初始化

max31865_cs_init(); //片选io初始化

setWires(1,wires); // Set 2,3 or 4 wire sensor

enableBias(1,OFF); // Disable bias voltage

autoConvert(1,OFF); // Disable auto conversion

}

/**

float MAX31865_readTemp(uint8_t ch)//读取温度函数

{

uint8_t buffer[2];

uint16_t data = 0;

float resistance = 0;

float temp = 0;

// Activate bias voltage to read sensor data, and wait for the capacitors to fill

enableBias(ch,ON);

DELAY(10);

// Perform a single conversion, and wait for the result

single_shot(ch);

DELAY(65);

// Read data from max31865 data registers

MAX31865_read(ch,MAX31856_RTDMSB_REG, buffer, 2);

// Combine 2 bytes into 1 number, and shift 1 down to remove fault bit

data = buffer[0] << 8;

data |= buffer[1];

data >>= 1;

// Calculate the actual resistance of the sensor

resistance = ((float) data * RREF) / FACTOR;

// Calculate the temperature from the measured resistance

temp = ((resistance / 100) - 1) / ALPHA;

// Disable bias voltage to reduce power usage

enableBias(ch,OFF);

return temp;

}

在主函数调用MAX31865_readTemp(1);即可读取温度


http://www.ppmy.cn/news/157332.html

相关文章

PTA6

1.s*(s-a)(s-b)(s-c) 是合法的C语言表达式。F 1.为表示“a和b都不等于0”&#xff0c;应使用的C语言表达式是&#xff08;D&#xff09;。 A.(a!0) || (b!0) B.!(a0)&&(b!0) C.a || b D.a && b 若ab中有一项为…

PT大全

PT站点大全 10-84 | http://www.10-84.com | Crime | English 3arbya / http://tracker.3arbya.info/ - Anime - Arabic 3Dtorrents [3DT] - http://3dtorrents.org - Movies - English 3DTVBits [3Dtv] | 3DTVBits | 3D | China 91HD - http://www.91hd.org/ - HD Content…

CST816S触摸驱动

本文针对淘宝所购买的1.69寸LCD触摸屏驱动进行讲解。 屏幕购买链接如下&#xff1a; 1.69寸全视角IPSTFT彩屏 液晶显示屏SPI位接口ST7789V驱动工业屏-淘宝网 (taobao.com) 我们先搞一下IIC驱动 #define CST816_SCL_Clr() HAL_GPIO_WritePin(TP_SCL_GPIO_Port,TP_SCL_Pin, G…

【GitHub已开源】某博热点事件评论数据分析与用户情感分析平台完整项目

找遍全网无奈只能自己开发某博热点评论数据爬取与用户情感分析平台&#xff0c;这就是技术人的创新&#xff01; 最近想看一下微博热点评论的用户人群情感趋势&#xff0c;想到的就是去爬取某博的评论数据&#xff0c;然后进行一个可视化的情感分析。想想吧&#xff0c;这个项目…

第四章 Electron 使用SQLite3数据库

一、SQLite是什么 &#x1f447; &#x1f447; &#x1f447; SQLite是一种嵌入式关系型数据库管理系统&#xff0c;是一个零配置、无服务器的、自给自足的、事务性的SQL数据库引擎。SQLite是一个轻量级的数据库&#xff0c;可以在各种操作系统上使用&#xff0c;并且支持SQL…

LeetCode——Pow(x, n)

一、题目 50. Pow(x, n) - 力扣&#xff08;Leetcode&#xff09; 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xⁿ &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000示例 2&#x…

大数据Doris(三十二):HDFS Load和Spark Load的基本原理

文章目录 HDFS Load和Spark Load的基本原理 一、HDFS Load 二、 Spark Load的基本原理 HDFS Load和Spark Load的基本原理 一、HDFS Load HDFS Load主要是将HDFS中的数据导入到Doris中,Hdfs load 创建导入语句,导入方式和

win11安装VMware的顺畅之路

第一步&#xff1a;检查电脑是否支持虚拟化 1、任务管理器---->性能---->CPU 第二步&#xff1a;安装VMware&#xff0c;查看VMnet1和VMnet8是否存在 1、控制面板---->网络和Internet---->网络和共享中心---->更改适配器设置 2、VMnet1和VMnet8---->属性-…