//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位数据
}
|