#include "max31855.h"
#include "delay.h"
#include "lcd.h"
struct Thermocouple MAX31855,MAX31855_0,MAX31855_1, MAX31855_2, MAX31855_3, MAX31855_4, MAX31855_5, MAX31855_6, MAX31855_7, MAX31855_8,
MAX31855_9,MAX31855_10, MAX31855_11, MAX31855_12, MAX31855_13, MAX31855_14, MAX31855_15, MAX31855_16, MAX31855_17;
/************************************************************
函数名称:IMAX31855_Init()
功 能:模拟SPI的相关IO口初始化
入口参数:无
出口参数:无
说 明:无
************************************************************/
//MAX31855 初始化函数
void MAX31855_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PORTA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能PORTC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE); //使能PORTF时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|
GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14; //PF6 SCK,PF0~PF15 CS 设为推挽输出;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化GPIO PF0~PF15
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; //PF6 SCK,PF0~PF15 CS 设为推挽输出;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIO PF0~PF15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIO PF0~PF15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;
//GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING ; //;PF7 MISO 设为浮空输入 = GPIO_Mode_IPD ; //;PF7 MISO 设为下拉输入 //GPIO_Mode_IPU 上拉输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; //;PF7 MISO 设为浮空输入
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOF 0,
// GPIO_ResetBits(GPIOC,GPIO_Pin_0);
// GPIO_SetBits(GPIOC,GPIO_Pin_1); //PC0 输出高
MAX_SCK1=0; // PC0
MAX_SCK2=0; // PC0
MAX_SCK3=0; // PC0
MAX_SCK4=0; // PC0
MAX_SCK5=0; // PC0
MAX_SCK6=0; // PC0
MAX_SCK7=0; // PC0
MAX_SCK8=0; // PC0
MAX_SCK9=0; // PC0
MAX_SCK10=0; // PC0
MAX_SCK11=0; // PC0
MAX_SCK12=0; // PC0
MAX_SCK13=0; // PC0
MAX_SCK14=0; // PC0
MAX_SCK15=0; // PC0
MAX_SCK16=0; // PC0
MAX_SCK17=0; // PC0
MAX_CS1=1; // PC1
MAX_CS2=1; // PC2
MAX_CS3=1; // PC3
MAX_CS4=1; // PC4
MAX_CS5=1; // PC5
MAX_CS6=1; // PF0
MAX_CS7=1; // PC1
MAX_CS8=1; // PC2
MAX_CS9=1; // PC3
MAX_CS10=1; // PC4
MAX_CS11=1; // PC5
MAX_CS12=1; // PF0
MAX_CS13=1; // PC1
MAX_CS14=1; // PC2
MAX_CS15=1; // PC3
MAX_CS16=1; // PC4
MAX_CS17=1; // PC5
}
void MAX31855_1_Read(void)
{
int spi1;
u32 SPI1_Data=0;
MAX_CS1=0;
delay_us(1);
for(spi1=31; spi1>=0; spi1--) //*也是同IIC的读格式类似*/
{
MAX_SCK1=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO1) SPI1_Data|=((u32)1<<spi1); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK1=0;
delay_us(1);
}
MAX_CS1=1; //PC02, Pin6
MAX31855_1.Data=SPI1_Data;
MAX31855_1.Thermocouple=((MAX31855_1.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_1.Internal=((MAX31855_1.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_2_Read(void)
{
int spi2;
u32 SPI2_Data=0;
MAX_CS2=0;
delay_us(1);
for(spi2=31; spi2>=0; spi2--) //*也是同IIC的读格式类似*/
{
MAX_SCK2=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO2) SPI2_Data|=((u32)1<<spi2); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK2=0;
delay_us(1);
}
MAX_CS2=1; //PC02, Pin6
MAX31855_2.Data=SPI2_Data;
MAX31855_2.Thermocouple=((MAX31855_2.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_2.Internal=((MAX31855_2.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_3_Read(void)
{
int spi3;
u32 SPI3_Data=0;
MAX_CS3=0;
delay_us(1);
for(spi3=31; spi3>=0; spi3--) //*也是同IIC的读格式类似*/
{
MAX_SCK3=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO3) SPI3_Data|=((u32)1<<spi3); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK3=0;
delay_us(1);
}
MAX_CS3=1; //PC02, Pin6
MAX31855_3.Data=SPI3_Data;
MAX31855_3.Thermocouple=((MAX31855_3.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_3.Internal=((MAX31855_3.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_4_Read(void)
{
int spi4;
u32 SPI4_Data=0;
MAX_CS4=0;
delay_us(1);
for(spi4=31; spi4>=0; spi4--) //*也是同IIC的读格式类似*/
{
MAX_SCK4=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO4) SPI4_Data|=((u32)1<<spi4); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK4=0;
delay_us(1);
}
MAX_CS4=1; //PC02, Pin6
MAX31855_4.Data=SPI4_Data;
MAX31855_4.Thermocouple=((MAX31855_4.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_4.Internal=((MAX31855_4.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_5_Read(void)
{
int spi5;
u32 SPI5_Data=0;
MAX_CS5=0;
delay_us(1);
for(spi5=31; spi5>=0; spi5--) //*也是同IIC的读格式类似*/
{
MAX_SCK5=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO5) SPI5_Data|=((u32)1<<spi5); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK5=0;
delay_us(1);
}
MAX_CS5=1; //PC02, Pin6
MAX31855_5.Data=SPI5_Data;
MAX31855_5.Thermocouple=((MAX31855_5.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_5.Internal=((MAX31855_5.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_6_Read(void)
{
int spi6;
u32 SPI6_Data=0;
MAX_CS6=0;
delay_us(1);
for(spi6=31; spi6>=0; spi6--) //*也是同IIC的读格式类似*/
{
MAX_SCK6=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO6) SPI6_Data|=((u32)1<<spi6); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK6=0;
delay_us(1);
}
MAX_CS6=1; //PC02, Pin6
MAX31855_6.Data=SPI6_Data;
MAX31855_6.Thermocouple=((MAX31855_6.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_6.Internal=((MAX31855_6.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_7_Read(void)
{
int spi7;
u32 SPI7_Data=0;
MAX_CS7=0;
delay_us(1);
for(spi7=31; spi7>=0; spi7--) //*也是同IIC的读格式类似*/
{
MAX_SCK7=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO7) SPI7_Data|=((u32)1<<spi7); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK7=0;
delay_us(1);
}
MAX_CS7=1; //PC02, Pin6
MAX31855_7.Data=SPI7_Data;
MAX31855_7.Thermocouple=((MAX31855_7.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_7.Internal=((MAX31855_7.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_8_Read(void)
{
int spi8;
u32 SPI8_Data=0;
MAX_CS8=0;
delay_us(1);
for(spi8=31; spi8>=0; spi8--) //*也是同IIC的读格式类似*/
{
MAX_SCK8=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO8) SPI8_Data|=((u32)1<<spi8); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK8=0;
delay_us(1);
}
MAX_CS8=1; //PC02, Pin6
MAX31855_8.Data=SPI8_Data;
MAX31855_8.Thermocouple=((MAX31855_8.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_8.Internal=((MAX31855_8.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_9_Read(void)
{
int spi9;
u32 SPI9_Data=0;
MAX_CS9=0;
delay_us(1);
for(spi9=31; spi9>=0; spi9--) //*也是同IIC的读格式类似*/
{
MAX_SCK9=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO9) SPI9_Data|=((u32)1<<spi9); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK9=0;
delay_us(1);
}
MAX_CS9=1; //PC02, Pin6
MAX31855_9.Data=SPI9_Data;
MAX31855_9.Thermocouple=((MAX31855_9.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_9.Internal=((MAX31855_9.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_10_Read(void)
{
int spi10;
u32 SPI10_Data=0;
MAX_CS10=0;
delay_us(1);
for(spi10=31; spi10>=0; spi10--) //*也是同IIC的读格式类似*/
{
MAX_SCK10=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO10) SPI10_Data|=((u32)1<<spi10); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK10=0;
delay_us(1);
}
MAX_CS10=1; //PC02, Pin6
MAX31855_10.Data=SPI10_Data;
MAX31855_10.Thermocouple=((MAX31855_10.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_10.Internal=((MAX31855_10.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_11_Read(void)
{
int spi11;
u32 SPI11_Data=0;
MAX_CS11=0;
delay_us(1);
for(spi11=31; spi11>=0; spi11--) //*也是同IIC的读格式类似*/
{
MAX_SCK11=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO11) SPI11_Data|=((u32)1<<spi11); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK11=0;
delay_us(1);
}
MAX_CS11=1; //PC02, Pin6
MAX31855_11.Data=SPI11_Data;
MAX31855_11.Thermocouple=((MAX31855_11.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_11.Internal=((MAX31855_11.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_12_Read(void)
{
int spi12;
u32 SPI12_Data=0;
MAX_CS12=0;
delay_us(1);
for(spi12=31; spi12>=0; spi12--) //*也是同IIC的读格式类似*/
{
MAX_SCK12=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO12) SPI12_Data|=((u32)1<<spi12); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK12=0;
delay_us(1);
}
MAX_CS12=1; //PC02, Pin6
MAX31855_12.Data=SPI12_Data;
MAX31855_12.Thermocouple=((MAX31855_12.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_12.Internal=((MAX31855_12.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_13_Read(void)
{
int spi13;
u32 SPI13_Data=0;
MAX_CS13=0;
delay_us(1);
for(spi13=31; spi13>=0; spi13--) //*也是同IIC的读格式类似*/
{
MAX_SCK13=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO13) SPI13_Data|=((u32)1<<spi13); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK13=0;
delay_us(1);
}
MAX_CS13=1; //PC02, Pin6
MAX31855_13.Data=SPI13_Data;
MAX31855_13.Thermocouple=((MAX31855_13.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_13.Internal=((MAX31855_13.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_14_Read(void)
{
int spi14;
u32 SPI14_Data=0;
MAX_CS14=0;
delay_us(1);
for(spi14=31; spi14>=0; spi14--) //*也是同IIC的读格式类似*/
{
MAX_SCK14=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO14) SPI14_Data|=((u32)1<<spi14); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK14=0;
delay_us(1);
}
MAX_CS14=1; //PC02, Pin6
MAX31855_14.Data=SPI14_Data;
MAX31855_14.Thermocouple=((MAX31855_14.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_14.Internal=((MAX31855_14.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_15_Read(void)
{
int spi15;
u32 SPI15_Data=0;
MAX_CS15=0;
delay_us(1);
for(spi15=31; spi15>=0; spi15--) //*也是同IIC的读格式类似*/
{
MAX_SCK15=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO15) SPI15_Data|=((u32)1<<spi15); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK15=0;
delay_us(1);
}
MAX_CS15=1; //PC02, Pin6
MAX31855_15.Data=SPI15_Data;
MAX31855_15.Thermocouple=((MAX31855_15.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_15.Internal=((MAX31855_15.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_16_Read(void)
{
int spi16;
u32 SPI16_Data=0;
MAX_CS16=0;
delay_us(1);
for(spi16=31; spi16>=0; spi16--) //*也是同IIC的读格式类似*/
{
MAX_SCK16=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO16) SPI16_Data|=((u32)1<<spi16); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK16=0;
delay_us(1);
}
MAX_CS16=1; //PC02, Pin6
MAX31855_16.Data=SPI16_Data;
MAX31855_16.Thermocouple=((MAX31855_16.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_16.Internal=((MAX31855_16.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}
void MAX31855_17_Read(void)
{
int spi17;
u32 SPI17_Data=0;
MAX_CS17=0;
delay_us(1);
for(spi17=31; spi17>=0; spi17--) //*也是同IIC的读格式类似*/
{
MAX_SCK17=1; //*第1位在CS被拉低之后产生,不需要时钟,故在第1位将时钟屏蔽
delay_us(1);
if (MAX_MISO17) SPI17_Data|=((u32)1<<spi17); //*第31个时钟之后不再移位*/ //{ Dat_Out |= 1;}
MAX_SCK17=0;
delay_us(1);
}
MAX_CS17=1; //PC02, Pin6
MAX31855_17.Data=SPI17_Data;
MAX31855_17.Thermocouple=((MAX31855_17.Data>>18)&0x1fff)*25; //提取D31-D18,14位数据
MAX31855_17.Internal=((MAX31855_17.Data>>4)&0x07ff)*625 ; //提取D15-D4,12位数据
}