STM32驱动MAX6675读取K型热电偶温度

发布者:TranquilMind88最新更新时间:2022-08-10 来源: csdn关键字:STM32  驱动MAX6675 手机看文章 扫描二维码
随时随地手机看文章

MAX6675 进行热电偶冷端补偿和数字化 K 型热电偶信号。输出 12 位分辨率、 SPI 兼容、只读的数据。转换器的精度为 0.25℃,最高可读+1024℃,如果使用数据的 8LSB 则温度范围为 0℃到+700℃。

 

MAX6675模块的原理图:

从网上看到max6675模块并不便宜,正好手头又有MAX6675的芯片于是自己便根据原理图在洞洞板上搭建了一个测试模块

测试结果:将测得的温度信息通过串口1输出到上位机显示

max6675模块部分的测试代码:


#include "stm32f10x.h"

#include "usart.h"

#include "delay.h"

#include "max6675.h"

 

int main(void)

{

  uint16_t temperature;

  float t;

 

  usart1_init(115200);

  delay_init();

  max6675_init();

  

  while(1)

  {

    temperature = max6675_readRawValue();

    printf("the raw value is:%dn",temperature);

    t = max6675_readTemperature();

    printf("the temperature is:%.2fn",t);

    printf("n");

    delay_ms(500);

  }

}


max6675操作函数库:


头文件:


#ifndef __MAX6675_H

#define __MAX6675_H

 

#include "stm32f10x.h"

 

#define MAX6675_CS1_CLK   RCC_APB2Periph_GPIOA

#define MAX6675_CS1_PORT  GPIOA

#define MAX6675_CS1_PIN   GPIO_Pin_4

 

void max6675_init(void); //初始化max6675模块 

uint8_t max6675_readWriteByte(uint8_t txData); //max6675模块读写一个字节

uint16_t max6675_readRawValue(void);

float max6675_readTemperature(void);

 

 

#endif


 源文件:


#include "max6675.h"

#include "spi.h"

 

 

/**

  * @brief  max66675模块初始化

  * @param  None

  * @retval None

  */

void max6675_init(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(MAX6675_CS1_CLK, ENABLE); //PORTA时钟使能 

  

  GPIO_InitStructure.GPIO_Pin = MAX6675_CS1_PIN;  // PA4 推挽   T_CS

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(MAX6675_CS1_PORT, &GPIO_InitStructure);

  GPIO_SetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); // T_CS=1

  

  spi1_init();

 

/**

  * @brief  max6675模块读写一个字节的数据

  * @param  txData:要发送的数据

  * @retval 接收到的数据

  */

uint8_t max6675_readWriteByte(uint8_t txData)

{

  return spi1_readWriteByte(txData);

}  

 

/**

  * @brief  max6675模块读取测得的原始数据

  * @param  None

  * @retval 温度的原始数据

  */

uint16_t max6675_readRawValue(void)

{

  uint16_t tmp;

  

  GPIO_ResetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); //enable max6675

 

  tmp = max6675_readWriteByte(0XFF); //read MSB

  tmp <<= 8;

  tmp |= max6675_readWriteByte(0XFF); //read LSB

  

  GPIO_SetBits(MAX6675_CS1_PORT,MAX6675_CS1_PIN); //disable max6675

  if (tmp & 4) 

  {

    // thermocouple open

    tmp = 4095; //未检测到热电偶

  }

  else 

  {

    tmp = tmp >> 3;

  }

 

  return tmp;

}

 

/**

  * @brief  max6675模块读取测得的原始数据

  * @param  None

  * @retval 温度值(单位:℃)

  */

float max6675_readTemperature(void)

{

  return (max6675_readRawValue() * 1024.0 / 4096);

}


最后附上测试例程:https://download.csdn.net/download/xiaoyuanwuhui/10606977


该例程的测试环境为STM32f103  用到的硬件资源有 串口1(PA9 PA10)SPI1(PA4 PA5 PA6 )。

关键字:STM32  驱动MAX6675 引用地址:STM32驱动MAX6675读取K型热电偶温度

上一篇:STM32使用虚拟示波器
下一篇:WS2812灯珠(一)-- STM32 普通IO方式驱动

推荐阅读最新更新时间:2024-11-09 23:52

STM32Cube.AI将神经网络转换为STM32的优化代码
STM32Cube.AI是业界最先进的工具包,能够与流行的深度学习库互操作,以转换任何用于 STM32 微控制器的人工神经网络( MCU)运行优化推理。该软件套件包括 X-Cube 扩展软件X-CUBE-AI 、为我们的SensorTile 开发套件 (STEVAL-STLKT01V1)提供应用示例的功能包FP-AI-SENSING1,以及对我们的ST BLE 传感器的更新为功能包的演示提供 GUI 和控件的 iOS 和 Android 应用程序。仅发布这些解决方案已经是一个开创性的公告,因为目前没有任何工具可以与此功能集相媲美。然而,STM32Cube.AI 不仅仅是一个简单的工具包,而是反映了我们希望通过将神经网络带给所有 S
[单片机]
stm32 栈的大小问题
前几天写stm32程序,遇到一个奇怪的问题,有一个数组的值总被非法修改。 开始以为是哪里数组访问越界了,查了半天没发现有越界访问的数组。后来把程序一部分一部分注释掉,发现调用一个根本不相干,也不存在什么问题的函数时,那个数组就会被修改。然后又是不断地试,注释掉各个部分。最终也没有找到规律。没办法只好将两个局部数组移到外面,定义成全局变量,结果问题解决。 网上一查才发现,栈的大小是需要定义的,默认0x200。几天的工作啊,就是因为这个问题。记一辈子了。
[单片机]
STM32 Cubemax(六) —— STM32利用定时器编码器模式处理带编码器直流电机
前言 电赛延期了,趁有时间再写点东西吧. 编码器电机配置较为繁琐,本文较长,耐心看下去,一定有收获. 本文适合已经对编码器有所了解的同学观看,如果对编码器原理还不太理解,可以看看CSDN中别人讲编码器的,个人觉得已经讲的十分清楚了,这里主要讲解怎么使用Cubemax去使用编码器 一、硬件准备 本次实验使用的是带增量式AB相霍尔编码器的直流减速电机 简单介绍一下这款电机,减速比为1:30,即输出轴转一圈,电机内部实际转30圈,霍尔编码器为13位编码器,即电机每转,对于编码器有2的13次方的增量.(简单的说,上面那个霍尔编码器检测的圆盘,转一圈,检测13个脉冲) 2.电机所使用的电机驱动为应该大家都十分熟悉的L2
[单片机]
<font color='red'>STM32</font> Cubemax(六) —— <font color='red'>STM32</font>利用定时器编码器模式处理带编码器直流电机
STM32接口FSMC/FMC难点的理解
一,FSMC FSMC,即灵活的静态存储控制器,能够与同步或异步存储器和 16 位 PC 存储器卡连接, STM32 的 FSMC 接口支持包括 SRAM、NAND FLASH、NOR FLASH 和 PSRAM 等存储器。 二,FSMC存储块 STM32F767的FMC将外部存储器划分为6个固定大小的256M的存储区域,如下图 如图: FSMC分为4块,每块256M字节又被划分为4*64,即四个片选 NOR / PSRAM使用块1,共256M NAND闪存使用块2,3,共512M PC卡使用块4,共256M 三,存储块1(Bank1)寄存器 STM32 的 FSMC 存储块 1(Bank1)被分为 4
[单片机]
<font color='red'>STM32</font>接口FSMC/FMC难点的理解
STM32 清读保护
stm32写错程序了,那么你的程序里面又是自动写读保护的,而且你的管教又是接死,不能更改boot模式,这种情况下,以前我是换一个芯片,后来看到网上有人用ram运行程序方法解决。 keil中,程序 int main(void) { FLASH_Unlock(); FLASH_ReadOutProtection(DISABLE); while(1); } 在Target页面设置rom的地方,有个irom的本来设置指向flash的0x80000000的,改为指向ram,0x20000000。 当然ram的指向也要修改一下,不能0x20000000开始了,改了0x20001000开始吧。 在debug页面下,在init
[单片机]
STM32 I2C读写
1,该模块默认地工作于从模式。接口在生成起始条件后自动地从从模式切换到主模式;当仲裁丢失或产生停止信号时,则从主模式切换到从模式。 2,数据和地址按8位/字节进行传输,高位在前。 3,数据流:SDA线- 移位寄存器- DR寄存器 主模式 以起始条件开始并以停止条件结束。当通过START位在总线上产生了起始条件,设备就进入了主模式。 1、检测总线状态,当总线空闲时(I2C_SR2的BUSY=0)。 FlagStatus I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY); 2、设置START=1,产生起始信号。 I2C_ GenerateSTART 起始信号产生后,I2C_SR1的SB位被硬件置
[单片机]
STM32通用定时器(时钟选择,模式选择)
STM32的定时器功能很强大,学习起来也很费劲儿. 其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册 }才搞明白的!所以接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER做个剖析。实验环境是STM103V100的实验板,MDK3.2 +Library2.东西都不怎么新,凑合用 TIMER主要是由三部分组成: 1、 时基单元。 2、 输入捕获。 3、 输出比较。 还有两种模式控制功能:从模式控制和主模式控制。 一、 框图 让我们看下
[单片机]
STM32 软件触发 DAC
/* DAC.c 用于DAC的初始化和配置 */ #include includes.h void DAC_Config(void); void DAC_Task(void* prg); void DAC_Task(void* prg) { DAC_SetChannel1Data(DAC_Align_12b_R,1028); //设置数据右对齐,转换值设置为1028 DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); //软件触发通道1 开始转换 DAC_SetChannel2Data(DAC_Align_12b_R,2047)
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved