打印

MAX6675温度打印出现问题

[复制链接]
1352|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luo6870|  楼主 | 2023-5-22 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "main.h"
#include"MAX6675.h"
extern SPI_HandleTypeDef hspi2;
// ------------------- Functions ----------------
uint8_t MAX6675_ReadWriteByte(uint8_t txData)
{
  unsigned char txdata,rxdata;
  txdata = txData;
  HAL_SPI_TransmitReceive(&hspi2,&txdata,&rxdata,1,1000);
  return rxdata;
}

/**
  * @brief  max6675模块读取测得的原始数据
  * @param  None
  * @retval 温度的原始数据
  */
uint16_t MAX6675_ReadRawValue(void)
{
  uint16_t tmp=0;
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);;
  tmp = MAX6675_ReadWriteByte(0XFF); //read MSB
  tmp <<= 8;
  tmp |= MAX6675_ReadWriteByte(0XFF); //read LSB
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);

  if (tmp & 0x04)
  {
    // thermocouple open
    tmp = 4095; //未检测到热电偶
  }
  else
  {
          tmp<<=1;//去掉D15位
          tmp>>=4;//去掉D0、1、2位

  }
  return tmp;
}

/**
  * @brief  max6675模块读取温度
  * @param  None
  * @retval 温度值(单位:℃)
  */
float MAX6675_ReadTemperature(void)
{
  return (MAX6675_ReadRawValue() *0.25);
}

// 初始化USART2,波特率为115200bps
void USART2_Init(void)
{
    RCC->APB1ENR1 |= RCC_APB1ENR1_USART2EN;  // 使能USART2时钟

    // 配置GPIOA的PA2、PA3管脚为USART2的TX、RX功能
    GPIOA->MODER    &= ~(GPIO_MODER_MODE2 | GPIO_MODER_MODE3);
    GPIOA->MODER    |= (GPIO_MODER_MODE2_1 | GPIO_MODER_MODE3_1);
    GPIOA->AFR[0]   |= (7U << GPIO_AFRL_AFSEL2_Pos) | (7U << GPIO_AFRL_AFSEL3_Pos);

    // 配置USART2,波特率为115200bps
    USART2->BRR     = SystemCoreClock / 115200;
    USART2->CR1    |= USART_CR1_TE_Msk | USART_CR1_RE_Msk |
                      USART_CR1_RXNEIE_Msk | USART_CR1_UE_Msk;
}

// 发送字符串到USART2
void USART2_SendString(char *str)
{
    while (*str)
    {
        while (!(USART2->ISR & USART_ISR_TXE_Msk));
        USART2->TDR = *str++;
    }
}

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(hspi->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspInit 0 */

  /* USER CODE END SPI2_MspInit 0 */
    /* Peripheral clock enable */
            __HAL_RCC_SPI2_CLK_ENABLE();
            __HAL_RCC_GPIOB_CLK_ENABLE();

    /**SPI2 GPIO Configuration
    PB13     ------> SPI2_SCK
    PB14     ------> SPI2_MISO
    */
    GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


  }

}


while (1){
  /* Write NDEF to EEPROM */
          K_Temperature=MAX6675_ReadTemperature(); //读取热电偶温度值
          sprintf(str, "Temperature: %.2f\r\n", K_Temperature);
          USART2_SendString(str);
          // 延时一段时间
          HAL_Delay(1000);

}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝