186 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
/**
 | 
						|
  ******************************************************************************
 | 
						|
  * @file    BSP/Src/temperature_sensor.c 
 | 
						|
  * @author  MCD Application Team
 | 
						|
  * @brief   This example code shows how to manage an I2C Temperature Sensor
 | 
						|
  *          =================================================================== 
 | 
						|
  *          Notes:
 | 
						|
  *           - This driver is intended for STM32F1xx families devices only. 
 | 
						|
  *           - The I2C Temperature Sensor is available on the STM3210E-EVAL RevD board.
 | 
						|
  *          ===================================================================
 | 
						|
  ******************************************************************************
 | 
						|
  * @attention
 | 
						|
  *
 | 
						|
  * Copyright (c) 2016 STMicroelectronics.
 | 
						|
  * All rights reserved.
 | 
						|
  *
 | 
						|
  * This software is licensed under terms that can be found in the LICENSE file
 | 
						|
  * in the root directory of this software component.
 | 
						|
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
						|
  *
 | 
						|
  ******************************************************************************
 | 
						|
  */
 | 
						|
 | 
						|
/* Includes ------------------------------------------------------------------*/
 | 
						|
#include "main.h"
 | 
						|
 | 
						|
/** @addtogroup STM32F1xx_HAL_Examples
 | 
						|
  * @{
 | 
						|
  */
 | 
						|
 | 
						|
/** @addtogroup BSP
 | 
						|
  * @{
 | 
						|
  */ 
 | 
						|
 | 
						|
/* Private typedef -----------------------------------------------------------*/
 | 
						|
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus; 
 | 
						|
typedef enum {NOT_READY = 0, READY = !NOT_READY} Status; 
 | 
						|
/* Private define ------------------------------------------------------------*/
 | 
						|
/* Private macro -------------------------------------------------------------*/
 | 
						|
/* Private variables ---------------------------------------------------------*/
 | 
						|
/* Private function prototypes -----------------------------------------------*/
 | 
						|
static void TSENSOR_SetHint(void);
 | 
						|
static void TSENSOR_Display_Temperature(uint16_t temperature);
 | 
						|
 | 
						|
/* Private functions ---------------------------------------------------------*/
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  EEPROM Demo
 | 
						|
  * @param  None
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
void TSENSOR_demo (void)
 | 
						|
{ 
 | 
						|
  uint16_t TempValue = 0;
 | 
						|
  uint8_t  TsensorReady = 0;
 | 
						|
  uint8_t  RequestSample = 0;
 | 
						|
  uint32_t Tick = 0;
 | 
						|
 | 
						|
  TSENSOR_SetHint();
 | 
						|
 | 
						|
  /* Initialize the I2C TSENSOR driver ----------------------------------------*/
 | 
						|
  BSP_LCD_SetBackColor(LCD_COLOR_WHITE);  
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_WHITE);    
 | 
						|
  BSP_LCD_FillRect(12, 92, BSP_LCD_GetXSize() - 24, BSP_LCD_GetYSize()- 104);
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
 | 
						|
 | 
						|
  if (BSP_TSENSOR_Init() != TSENSOR_OK)
 | 
						|
  {
 | 
						|
    BSP_LCD_SetTextColor(LCD_COLOR_RED);    
 | 
						|
    BSP_LCD_DisplayStringAt(0, 115, (uint8_t*)"Initialization problem", CENTER_MODE); 
 | 
						|
    BSP_LCD_DisplayStringAt(0, 130, (uint8_t*)"Temperature Sensor not detected", CENTER_MODE); 
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    TsensorReady = READY;
 | 
						|
    RequestSample = SET;
 | 
						|
  }
 | 
						|
 | 
						|
  while (1)
 | 
						|
  {
 | 
						|
    if((TsensorReady == READY) && (RequestSample == SET))
 | 
						|
    {
 | 
						|
      TempValue = BSP_TSENSOR_ReadTemp();
 | 
						|
      TSENSOR_Display_Temperature(TempValue);
 | 
						|
      Tick = HAL_GetTick();
 | 
						|
      RequestSample = RESET;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      /* Request a Temperature sampling each 1s <-> 1000 ms */
 | 
						|
      if(HAL_GetTick() >= Tick + 1000)
 | 
						|
      {
 | 
						|
        RequestSample = SET;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    
 | 
						|
    
 | 
						|
    if(CheckForUserInput() > 0)
 | 
						|
    {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    HAL_Delay(5);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Display TSENSOR Demo Hint
 | 
						|
  * @param  None
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
static void TSENSOR_SetHint(void)
 | 
						|
{
 | 
						|
  /* Clear the LCD */ 
 | 
						|
  BSP_LCD_Clear(LCD_COLOR_WHITE);
 | 
						|
  
 | 
						|
  /* Set LCD Demo description */
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
 | 
						|
  BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 80);
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
 | 
						|
  BSP_LCD_SetBackColor(LCD_COLOR_BLUE); 
 | 
						|
  BSP_LCD_SetFont(&Font24);
 | 
						|
  BSP_LCD_DisplayStringAt(0, 0, (uint8_t*)"TEMPERATURE SENSOR", CENTER_MODE);
 | 
						|
  BSP_LCD_SetFont(&Font12);
 | 
						|
  BSP_LCD_DisplayStringAt(0, 30, (uint8_t*)"This example shows how to", CENTER_MODE);
 | 
						|
  BSP_LCD_DisplayStringAt(0, 45, (uint8_t*)"read a Temperature", CENTER_MODE); 
 | 
						|
  BSP_LCD_DisplayStringAt(0, 60, (uint8_t*)"Press key button to switch to next menu", CENTER_MODE); 
 | 
						|
  
 | 
						|
   /* Set the LCD Text Color */
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_BLUE);  
 | 
						|
  BSP_LCD_DrawRect(10, 90, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize()- 100);
 | 
						|
  BSP_LCD_DrawRect(11, 91, BSP_LCD_GetXSize() - 22, BSP_LCD_GetYSize()- 102);
 | 
						|
 }
 | 
						|
 | 
						|
  /**
 | 
						|
  * @brief  Display temperature
 | 
						|
  * @param  temperature : temperature value
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
static void TSENSOR_Display_Temperature(uint16_t temperature)
 | 
						|
{
 | 
						|
  uint8_t TempCelsiusDisplay[20] = {0};
 | 
						|
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
 | 
						|
  BSP_LCD_SetFont(&Font12);
 | 
						|
  BSP_LCD_DisplayStringAt(0, 115, (uint8_t*)"Measured Temperature : ", CENTER_MODE);
 | 
						|
 | 
						|
  /* Change Font size to display Temperature Value */
 | 
						|
  BSP_LCD_SetFont(&Font16);
 | 
						|
 | 
						|
  if (temperature & 0x8000)
 | 
						|
  {
 | 
						|
    /* Display negative temperature */
 | 
						|
    BSP_LCD_SetTextColor(LCD_COLOR_RED);
 | 
						|
    if (temperature & 0x0001)
 | 
						|
    {
 | 
						|
      sprintf ((char*)TempCelsiusDisplay, " -%d.5 C ", ((temperature & 0x7FFF)>>1));
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      sprintf ((char*)TempCelsiusDisplay, "  -%d C  ", ((temperature & 0x7FFF)>>1));
 | 
						|
    }
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    /* Display positive temperature */
 | 
						|
    BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
 | 
						|
    if (temperature & 0x0001)
 | 
						|
    {
 | 
						|
      sprintf ((char*)TempCelsiusDisplay, "  %d.5 C ", ((temperature & 0x7FFF)>>1));
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      sprintf ((char*)TempCelsiusDisplay, "  %d C   ", ((temperature & 0x7FFF)>>1));
 | 
						|
    }
 | 
						|
  }
 | 
						|
  /* Display Temperature value on LCD */
 | 
						|
  BSP_LCD_DisplayStringAt(0, 145, (uint8_t*)TempCelsiusDisplay, CENTER_MODE);
 | 
						|
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
 | 
						|
  BSP_LCD_SetFont(&Font12);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @}
 | 
						|
  */ 
 |