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

这篇具有很好参考价值的文章主要介绍了通过stm32读取max6675的温度值并在显示屏上显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

芯片:STM32F103c8

通信方式:spi

一、MAX6675传感器介绍

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

max6675 stm32,stm32,单片机,嵌入式硬件                                                           MAX6675时序图

MAX6675的主要特性如下:

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

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

③12位0.25℃的分辨率;

④片内冷端补偿;

⑤高阻抗差动输入;

⑥热电偶断线检测;

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

⑧低功耗特性;

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

⑩2000V的ESD信号。

二、接线说明

max6675 stm32,stm32,单片机,嵌入式硬件

                                                         传感器接口电路原理图 

引脚说明

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 stm32,stm32,单片机,嵌入式硬件

五、结语

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

完整例程参考主页下载程序,有不妥之处欢迎指正,邮箱2689309822@qq.com文章来源地址https://www.toymoban.com/news/detail-796886.html

到了这里,关于通过stm32读取max6675的温度值并在显示屏上显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32+ MAX30102通过指尖测量心率+血氧饱和度

            重要的事情放在最前面:max30102只适用于指尖手指测量,不适用与手腕手指测量,如需做成可穿戴样式选择传感器的小伙伴请pass掉他,因为他只有红光和红外2种光,不够充足的数据源去运算。         由于一些原因,本篇文章所有下载资源不收取任何积分,让你不

    2024年02月03日
    浏览(53)
  • MAX6675使用笔记

    MAX6675执行冷端补偿,并数字化K型热电偶的信号。 数据以SPI™兼容的12位分辨率,只读格式输出。 该转换器分辨率为0.25°C,允许读数高达+ 1024°C,并且在0°C至+ 700°C的温度范围内具有8LSB的热电偶精度。 什么是热电偶 当有两种不同的导体或半导体A和B组成一个回路,其两端相

    2024年02月02日
    浏览(36)
  • STM32(HAL库)通过ADC读取MQ2数据

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对MQ2烟雾传感器进行数据的读取,并通过

    2024年02月16日
    浏览(39)
  • STM32通过SPI方式读取MT6816磁编码器绝对位置

    然后点右上角生成代码。 最后就完成了对MT6816绝对位置的读取。

    2024年02月10日
    浏览(36)
  • STM32-OLED显示屏

    *本文采用的OLED显示屏为4针脚IIC显示屏,4针脚分别为GND,VCC,SCL,SDA OLED.C OLED_Font.h main.c

    2024年02月05日
    浏览(49)
  • STM32——OLED显示屏(4)

    目录 一、调试方式 二、OLED简介 三、OLED硬件电路 四、OLED驱动函数 五、OLED显示屏使用 1、硬件接线图 2、添加OLED驱动函数 3、程序 4、实物展示  六、Keil软件自带调试模式         对于单片机的编程而言,经常会遇到一个很大的问题,就是程序调试,单片机不像电脑,电

    2024年02月03日
    浏览(52)
  • STM32—LCD液晶显示屏

    目录 LCD液晶显示屏介绍 液晶的组成  物理特性 液晶显示屏内部构造  颜色深度 点亮LCD显示屏 查看原理图 图片显示 保存到工程用户代码的Inc目录下 参数为数组名 字符显示  汉字显示 某些物质在熔融状态或被溶剂溶解之后,尽管失去固态物质的刚性,却获得了液体的易流动

    2024年02月04日
    浏览(50)
  • 【STM32篇】驱动LCD显示屏

    本次使用的硬件设备为野火的霸道V2开发板,显示器控制芯片型号为ILI9341,实际型号为ST7789V。在编写代码时参考的是ILI9341数据手册,二者差别不大,都是240*320分辨率。         ILI9341是一个用于TFT液晶显示的单芯片控制驱动器,具有262144色的240RGB x 320像素显示解决方案。

    2024年02月12日
    浏览(47)
  • STM32 软件IIC 控制OLED 显示屏

    需要看原理图了

    2024年02月09日
    浏览(54)
  • STM32 使用LCD12864显示屏(串行方式)

    12864LCD液晶显示模块是一款4位/8位并行、2线或3线接口方式,内部含有国际一级、二级简体中文字库的图形点阵液晶模块。显示分辨率为128 64,内置8198个16 16点汉字,和128个16*8点ASCII字符集。 CS片选信号 (如果只有一款屏,可以将CS直接接到VCC上,实现两线通讯。) SID数据传

    2024年02月05日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包