通过stm32读取max6675的温度值并在显示屏上显示

芯片:STM32F103c8

通信方式:spi

一、MAX6675传感器介绍

MAX6675是一复杂的单片热电偶数字转换器,内部具有信号调节放大器、12位的模拟/数字化热电偶转换器、冷端补偿传感和校正、数字控制器、1个SPI兼容接口和1个相关的逻辑控制。

                                                           MAX6675时序图

MAX6675的主要特性如下:

①简单的SPI串行口温度值输出;

②0℃~+1024℃的测温范围;

③12位0.25℃的分辨率;

④片内冷端补偿;

⑤高阻抗差动输入;

⑥热电偶断线检测;

⑦单一+5V的电源电压;

⑧低功耗特性;

⑨工作温度范围-20℃~+85℃;

⑩2000V的ESD信号。

二、接线说明

                                                         传感器接口电路原理图 

引脚说明

MAX6675模块引脚说明
VCC正极 3.3/5V供电
GND负极 接GND
SCK时钟输入引脚
CS片选信号引脚
SO数据输出引脚

本文使用的是stm32f103c8t6的芯片 ,引脚连接关系如下:

PA6-MISO:MAX6675-SO        
PA7-MOSI:MAX6675-SI      
PA5-SCK :MAX6675-SCK    
PA4-NSS :MAX6675-CS

OLED的配置及引脚连接参考之前的文章。

三、代码编写

1.变量及引脚定义

uint8_t ucbuf[17];#define 	MAX6675_CS	 		GPIO_Pin_4
#define 	MAX6675_CSL()		GPIOA->BRR = MAX6675_CS;
#define 	MAX6675_CSH()		GPIOA->BSRR = MAX6675_CS;

2.SPI1初始化(MAX6675接口初始化):

void SPI_MAX6675_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef  SPI_InitStructure;	/* 使能 SPI1 时钟 */                         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);/* ---------通信I/O初始化----------------* PA5-SPI1-SCK :MAX6675_SCK* PA6-SPI1-MISO:MAX6675_SO* PA7-SPI1-MOSI:MAX6675_SI	 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;			// 复用输出GPIO_Init(GPIOA, &GPIO_InitStructure);/* ---------控制I/O初始化----------------*//* PA4-SPI1-NSS:MAX6675_CS */							// 片选GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		// 推免输出GPIO_Init(GPIOA, &GPIO_InitStructure);						  GPIO_SetBits(GPIOA, GPIO_Pin_4);						// 先把片选拉高,真正用的时候再拉低/* SPI1 配置 */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);/* 使能 SPI1  */SPI_Cmd(SPI1, ENABLE); 
}

3.MAX6675读取SPI数据:

unsigned char MAX6675_ReadByte(void)
{/* Loop while DR register in not emplty */while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET);/* Send byte through the SPI1 peripheral */SPI_I2S_SendData(SPI1, 0xff);/* Wait to receive a byte */while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);/* Return the byte read from the SPI bus */return SPI_I2S_ReceiveData(SPI1);
}

4.main函数代码:

main (void)
{unsigned int t,i;unsigned char c;unsigned char flag;float temprature;/* 配置系统时钟为72M */SystemInit();/* MAX6675 SPI 接口初始化 */SPI_MAX6675_Init();OLED_Init();OLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示while(1){OLED_Refresh();MAX6675_CSL();c = MAX6675_ReadByte();i = c;i = i<<8;c = MAX6675_ReadByte();MAX6675_CSH();i = i|((unsigned int)c);			//i是读出来的原始数据flag = i&0x04;						//flag保存了热电偶的连接状态t = i<<1;t = t>>4;temprature = t*0.25;if(i!=0)							//max6675有数据返回{if(flag==0)						//热电偶已连接{sprintf((char*)ucbuf,"%4.1f",temprature);OLED_ShowString(72,16,(uint8_t*)ucbuf,16,1);OLED_ShowChinese(0,16,0,16,1);  //当OLED_ShowChinese(16,16,1,16,1);  //前OLED_ShowChinese(32,16,2,16,1);  //温OLED_ShowChinese(48,16,3,16,1);//度OLED_ShowChar(64,16,':',16,1);OLED_ShowChinese(112,16,4,16,1);}	}else								//max6675没有数据返回{OLED_Clear();OLED_ShowChinese(0,16,5,16,1);  //无OLED_ShowChinese(16,16,6,16,1);  //数OLED_ShowChinese(32,16,7,16,1);  //据}for(i=0;i<0x2fffff;i++);			//max6675的转换时间是0.2秒左右,所以两次转换间隔不要太近}
}

OLED的初始化代码以及内容显示参考之前的文章,本文不再说明。

四、实验结果

此代码保留小数点后一位小数(四舍五入进位)。

 

五、结语

MAX6675将热电偶测温应用时复杂的线性化、冷端补偿及数字化输出等问题集中在一个芯片上解决,简化了将热电偶测温方案应用于嵌入式系统领域时复杂的软硬件设计,因而该器件是将热电偶测温方案应用于嵌入式系统领域的理想选择。

完整例程参考主页下载程序,有不妥之处欢迎指正,邮箱2689309822@qq.com


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部