OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3249|回复: 5

stm32f103rct6驱动max6675,热电偶采集温度始终显示未检测到热电偶

[复制链接]
回帖奖励 6 金钱 回复本帖可获得 2 金钱奖励! 每人限 2 次

2

主题

15

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2020-4-6
在线时间
12 小时
发表于 2020-5-19 10:13:55 | 显示全部楼层 |阅读模式
/*主函数*/
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"


void max6675_init(void);
uint8_t max6675_readWriteByte(uint8_t txData); //max6675模块读写一个字节
uint16_t max6675_readRawValue(void);
float max6675_readTemperature(void);


char ss[20];
int main(void)
{
    float tempValue=0;
    u8 x=0;
    delay_init();                     //延时函数初始化
    uart_init(115200);                 //串口初始化为9600
    LED_Init();                                  //初始化与LED连接的硬件接口
    LCD_Init();
    max6675_init();
    while(1)
    {

        POINT_COLOR=BLUE;
        tempValue=max6675_readTemperature();
        sprintf(ss,"temp:%f",tempValue);
        LCD_ShowString(30,40,200,16,16,ss);
        delay_ms(200);
    }
}
/*max6675.h*/
#ifndef __MAX6675_H
#define __MAX6675_H
#include "sys.h"
//IO方向设置
//PA5 SO
//PA6 CS
//PA7        SCK
#define MAX6675_SO_PORT        GPIOA
#define MAX6675_SO_PIN GPIO_Pin_0
#define MAX6675_CS_PORT        GPIOA
#define MAX6675_CS_PIN GPIO_Pin_11
#define MAX6675_SCK_PORT        GPIOA
#define MAX6675_SCK_PIN GPIO_Pin_12
#define SCK PAout(12)
#define CS PAout(11)
#define MISO PAin(0)

void max6675_init(void);//初始化
uint8_t max6675_readWriteByte(uint8_t txData);
uint16_t max6675_readRawValue(void);
float max6675_readTemperature(void);
       
#endif
/*max6675.c*/

#include "max6675.h"
#include "delay.h"       

void max6675_init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PORTA口时钟
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                                //PORTA0 推挽输出
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_SetBits(GPIOA,GPIO_Pin_0);    //输出1
}
/**
  * @brief  max6675模块读写一个字节的数据
  * @param  txData:要发送的数据
  * @retval 接收到的数据
  */
uint8_t max6675_readWriteByte(uint8_t txData)
{
    unsigned char temp=0;
    unsigned char dat=0;
    for(temp=0x80; temp!=0; temp>>=1)
    {
        SCK=0;
        delay_us(1); //让SCK稳定
        SCK=1;
        delay_us(1); //让SCK稳定
        if(MISO==1)
        {
            dat|=temp;
        }
        else
        {
            dat&=~temp;
        }
    }
    return dat;
}
/*void SPI_delay()
{
    delay_us(1);
}*/
uint16_t max6675_readRawValue(void)
{
    uint16_t tmp=0;
    GPIO_ResetBits(MAX6675_CS_PORT,MAX6675_CS_PIN); //enable max6675

    tmp=max6675_readWriteByte(0XFF); //read MSB
    tmp <<= 8;
    tmp |= max6675_readWriteByte(0XFF); //read LSB;
    //tmp=tmp&0x00FF;
    GPIO_SetBits(MAX6675_CS_PORT,MAX6675_CS_PIN); //disable max6675
    if (tmp & 4)
    {
        // thermocouple open
        //tmp = 0x0FFF; //未检测到热电偶        4095
                tmp = 4095; //未检测到热电偶        4095
                //printf("thermocouple open\r\n");
    }
    else
    {
        tmp = tmp >> 3;
    }
                tmp=tmp&0x0FFF;        //12bit
    return tmp;
}
/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度值(单位:℃)
  */
float max6675_readTemperature(void)
{
    return (max6675_readRawValue() * 1024.0 / 4096);
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-19 10:13:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2020-4-6
在线时间
12 小时
 楼主| 发表于 2020-5-19 10:16:33 | 显示全部楼层
s实物图
IMG_1105.JPG
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-5-19 14:12:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2020-2-19
在线时间
10 小时
发表于 2020-6-3 15:33:16 | 显示全部楼层

回帖奖励 +2 金钱

是不是硬件电路的问题
回复 支持 反对

使用道具 举报

16

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2020-2-19
在线时间
10 小时
发表于 2020-6-3 15:34:12 | 显示全部楼层

回帖奖励 +2 金钱

MAX6675从SPI串行接口输出数据的过程如下:MCU使CS变低并提供时钟信号给SCK,由SO读取测量结果。CS变低将停止任何转换过程;CS变高将启动一个新的转换过程。一个完整串行接口读操作需16个时钟周期,在时钟的下降沿读16个输出位,第1位和第15位是一伪标志位,并总为0;第14位到第3位为以MSB到LSB顺序排列的转换温度值;第2位平时为低,当热电偶输入开放时为高,开放热电偶检测电路完全由MAX6675实现,为开放热电偶检测器操作,T-必须接地,并使能地点尽可能接近GND脚;第1位为低以提供MAX6675器件身份码,第0位为三态。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 17:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表