168 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
/**
 | 
						|
  ******************************************************************************
 | 
						|
  * @file    IAP_Main/Src/common.c 
 | 
						|
  * @author  MCD Application Team
 | 
						|
  * @brief   This file provides all the common functions.
 | 
						|
  ******************************************************************************
 | 
						|
  * @attention
 | 
						|
  *
 | 
						|
  * <h2><center>© Copyright (c) 2016 STMicroelectronics.
 | 
						|
  * All rights reserved.</center></h2>
 | 
						|
  *
 | 
						|
  * This software component is licensed by ST under BSD 3-Clause license,
 | 
						|
  * the "License"; You may not use this file except in compliance with the
 | 
						|
  * License. You may obtain a copy of the License at:
 | 
						|
  *                        opensource.org/licenses/BSD-3-Clause
 | 
						|
  *
 | 
						|
  ******************************************************************************
 | 
						|
  */
 | 
						|
 | 
						|
/** @addtogroup STM32F1xx_IAP_Main
 | 
						|
  * @{
 | 
						|
  */
 | 
						|
 | 
						|
/* Includes ------------------------------------------------------------------*/
 | 
						|
#include "common.h"
 | 
						|
#include "main.h"
 | 
						|
 | 
						|
/* Private typedef -----------------------------------------------------------*/
 | 
						|
/* Private define ------------------------------------------------------------*/
 | 
						|
/* Private macro -------------------------------------------------------------*/
 | 
						|
/* Private variables ---------------------------------------------------------*/
 | 
						|
/* Private function prototypes -----------------------------------------------*/
 | 
						|
/* Private functions ---------------------------------------------------------*/
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Convert an Integer to a string
 | 
						|
  * @param  p_str: The string output pointer
 | 
						|
  * @param  intnum: The integer to be converted
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
void Int2Str(uint8_t *p_str, uint32_t intnum)
 | 
						|
{
 | 
						|
  uint32_t i, divider = 1000000000, pos = 0, status = 0;
 | 
						|
 | 
						|
  for (i = 0; i < 10; i++)
 | 
						|
  {
 | 
						|
    p_str[pos++] = (intnum / divider) + 48;
 | 
						|
 | 
						|
    intnum = intnum % divider;
 | 
						|
    divider /= 10;
 | 
						|
    if ((p_str[pos-1] == '0') & (status == 0))
 | 
						|
    {
 | 
						|
      pos = 0;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      status++;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Convert a string to an integer
 | 
						|
  * @param  p_inputstr: The string to be converted
 | 
						|
  * @param  p_intnum: The integer value
 | 
						|
  * @retval 1: Correct
 | 
						|
  *         0: Error
 | 
						|
  */
 | 
						|
uint32_t Str2Int(uint8_t *p_inputstr, uint32_t *p_intnum)
 | 
						|
{
 | 
						|
  uint32_t i = 0, res = 0;
 | 
						|
  uint32_t val = 0;
 | 
						|
 | 
						|
  if ((p_inputstr[0] == '0') && ((p_inputstr[1] == 'x') || (p_inputstr[1] == 'X')))
 | 
						|
  {
 | 
						|
    i = 2;
 | 
						|
    while ( ( i < 11 ) && ( p_inputstr[i] != '\0' ) )
 | 
						|
    {
 | 
						|
      if (ISVALIDHEX(p_inputstr[i]))
 | 
						|
      {
 | 
						|
        val = (val << 4) + CONVERTHEX(p_inputstr[i]);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        /* Return 0, Invalid input */
 | 
						|
        res = 0;
 | 
						|
        break;
 | 
						|
      }
 | 
						|
      i++;
 | 
						|
    }
 | 
						|
 | 
						|
    /* valid result */
 | 
						|
    if (p_inputstr[i] == '\0')
 | 
						|
    {
 | 
						|
      *p_intnum = val;
 | 
						|
      res = 1;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  else /* max 10-digit decimal input */
 | 
						|
  {
 | 
						|
    while ( ( i < 11 ) && ( res != 1 ) )
 | 
						|
    {
 | 
						|
      if (p_inputstr[i] == '\0')
 | 
						|
      {
 | 
						|
        *p_intnum = val;
 | 
						|
        /* return 1 */
 | 
						|
        res = 1;
 | 
						|
      }
 | 
						|
      else if (((p_inputstr[i] == 'k') || (p_inputstr[i] == 'K')) && (i > 0))
 | 
						|
      {
 | 
						|
        val = val << 10;
 | 
						|
        *p_intnum = val;
 | 
						|
        res = 1;
 | 
						|
      }
 | 
						|
      else if (((p_inputstr[i] == 'm') || (p_inputstr[i] == 'M')) && (i > 0))
 | 
						|
      {
 | 
						|
        val = val << 20;
 | 
						|
        *p_intnum = val;
 | 
						|
        res = 1;
 | 
						|
      }
 | 
						|
      else if (ISVALIDDEC(p_inputstr[i]))
 | 
						|
      {
 | 
						|
        val = val * 10 + CONVERTDEC(p_inputstr[i]);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        /* return 0, Invalid input */
 | 
						|
        res = 0;
 | 
						|
        break;
 | 
						|
      }
 | 
						|
      i++;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return res;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Print a string on the HyperTerminal
 | 
						|
  * @param  p_string: The string to be printed
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
void Serial_PutString(uint8_t *p_string)
 | 
						|
{
 | 
						|
  uint16_t length = 0;
 | 
						|
 | 
						|
  while (p_string[length] != '\0')
 | 
						|
  {
 | 
						|
    length++;
 | 
						|
  }
 | 
						|
  HAL_UART_Transmit(&UartHandle, p_string, length, TX_TIMEOUT);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Transmit a byte to the HyperTerminal
 | 
						|
  * @param  param The byte to be sent
 | 
						|
  * @retval HAL_StatusTypeDef HAL_OK if OK
 | 
						|
  */
 | 
						|
HAL_StatusTypeDef Serial_PutByte( uint8_t param )
 | 
						|
{
 | 
						|
  return HAL_UART_Transmit(&UartHandle, ¶m, 1, TX_TIMEOUT);
 | 
						|
}
 | 
						|
/**
 | 
						|
  * @}
 | 
						|
  */
 | 
						|
 | 
						|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 |