功能介绍:采用stm32单片机作为主控MCU,采用MAX31865模块采集PT100温度数据,并且通过SPI协议将数据传送到单片机,stm32单片机收到数据将温度显示到OLED显示屏上,文末有资料分享
43-基于stm32单片机MAX31865铂电阻PT100温度测量(程序+原理图+元器件清单全套资料)
//初始化SPI max31865 的IO口
void SPI1_MAX31865_Init(void)
{
SPI1_Init(); //初始化SPI1
SPI1_SetSpeed(SPI_BaudRatePrescaler_64); //设置为 72/64 = 1.125 M时钟
writeRegister8_1(0x00, 0x00); //清除配置寄存器
enableBias_1(1); //使能偏置电压
delay_ms(10); //等待10ms使得RTDIN的滤波电容充电
setWires_1(MAX31865_3WIRE); //使能PT100 三线工作模式
clearFault_1(); //清除故障检测位
}
//RTD接线模式设置
void setWires_1(max31865_numwires_t wires)
{
uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);
if (wires == MAX31865_3WIRE) {
t |= MAX31856_CONFIG_3WIRE;
} else {
// 2 or 4 wire
t &= ~MAX31856_CONFIG_3WIRE;
}
writeRegister8_1(MAX31856_CONFIG_REG, t);
}
//设置自动转换模式
void autoConvert_1(bool b)
{
uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);
if (b) {
t |= MAX31856_CONFIG_MODEAUTO; // enable autoconvert
} else {
t &= ~MAX31856_CONFIG_MODEAUTO; // disable autoconvert
}
writeRegister8_1(MAX31856_CONFIG_REG, t);
}
//使能偏执电压
void enableBias_1(bool b)
{
uint8_t t = readRegister8_1(MAX31856_CONFIG_REG);
if (b) {
t |= MAX31856_CONFIG_BIAS; // enable bias
} else {
t &= ~MAX31856_CONFIG_BIAS; // disable bias
}
writeRegister8_1(MAX31856_CONFIG_REG, t);
}
//读寄存器,8位
u8 readRegister8_1(u8 addr)
{
uint8_t ret = 0;
addr &= 0x7F; // make sure top bit is set to 1
SPI1_FLASH_CS=0;
delay_us(100);
SPI1_ReadWriteByte(addr); //发送写取状态寄存器命令
ret = SPI1_ReadWriteByte(0xff); //写入一个字节
delay_us(100);
SPI1_FLASH_CS=1; //取消片选
return ret;
}
//读两个寄存器,16位
u16 readRegister16_1(u8 addr)
{
uint8_t buffer[2] = {0, 0};
uint16_t ret = 0;
readRegisterN_1(addr, buffer, 2);
ret = buffer[0];
ret <<= 8;
ret |= buffer[1];
return ret;
}
//读N个寄存器
void readRegisterN_1(u8 addr, u8 buffer[], u8 n)
{
addr &= 0x7F; // make sure top bit is 0
SPI1_FLASH_CS=0;
delay_us(100);
SPI1_ReadWriteByte(addr); //发送读取状态寄存器命令
while (n--) {
buffer[0] = SPI1_ReadWriteByte(0Xff);
buffer++;
}
delay_us(100);
SPI1_FLASH_CS=1; //取消片选
}
//指定寄存器写8位数据
void writeRegister8_1(u8 addr, u8 data)
{
addr |= 0x80; // make sure top bit is set to 1
SPI1_FLASH_CS=0;
delay_us(100);
SPI1_ReadWriteByte(addr); //发送读取状态寄存器命令
SPI1_ReadWriteByte(data); //写入一个字节
delay_us(100);
SPI1_FLASH_CS=1; //取消片选
}
程序打开办法:特别注意:下载资料包以后一定要先解压!!!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。