359 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			359 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
/**
 | 
						|
  ******************************************************************************
 | 
						|
  * @file    BSP/Src/flash.c 
 | 
						|
  * @author  MCD Application Team
 | 
						|
  * @brief   This example code shows how to use Flash SPI features.
 | 
						|
  ******************************************************************************
 | 
						|
  * @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;
 | 
						|
 | 
						|
/* Private define ------------------------------------------------------------*/
 | 
						|
#define  FLASH_WriteSector127 0x7F0000 /* End of Sector 0x7FFFFF */
 | 
						|
#define  FLASH_WriteSector126 0x7E0000 /* End of Sector 0x7EFFFF */
 | 
						|
#define  FLASH_WriteSector125 0x7D0000 /* End of Sector 0x7DFFFF */
 | 
						|
#define  FLASH_WriteSector124 0x7C0000 /* End of Sector 0x7CFFFF */
 | 
						|
#define  FLASH_WriteSector123 0x7B0000 /* End of Sector 0x7BFFFF */
 | 
						|
#define  FLASH_WriteSector122 0x7A0000 /* End of Sector 0x7AFFFF */
 | 
						|
#define  FLASH_WriteSector121 0x790000 /* End of Sector 0x79FFFF */
 | 
						|
#define  FLASH_WriteSector120 0x780000 /* End of Sector 0x78FFFF */
 | 
						|
#define  FLASH_WriteSector119 0x770000 /* End of Sector 0x77FFFF */
 | 
						|
#define  FLASH_WriteSector118 0x760000 /* End of Sector 0x76FFFF */
 | 
						|
#define  FLASH_WriteSector117 0x750000 /* End of Sector 0x75FFFF */
 | 
						|
#define  FLASH_WriteSector116 0x740000 /* End of Sector 0x74FFFF */
 | 
						|
#define  FLASH_WriteSector115 0x730000 /* End of Sector 0x73FFFF */
 | 
						|
#define  FLASH_WriteSector114 0x720000 /* End of Sector 0x72FFFF */
 | 
						|
#define  FLASH_WriteSector113 0x710000 /* End of Sector 0x71FFFF */
 | 
						|
#define  FLASH_WriteSector112 0x700000 /* End of Sector 0x70FFFF */
 | 
						|
#define  FLASH_WriteSector111 0x6F0000 /* End of Sector 0x6FFFFF */
 | 
						|
#define  FLASH_WriteSector110 0x6E0000 /* End of Sector 0x6EFFFF */
 | 
						|
#define  FLASH_WriteSector109 0x6D0000 /* End of Sector 0x6DFFFF */
 | 
						|
#define  FLASH_WriteSector108 0x6C0000 /* End of Sector 0x6CFFFF */
 | 
						|
#define  FLASH_WriteSector107 0x6B0000 /* End of Sector 0x6BFFFF */
 | 
						|
#define  FLASH_WriteSector106 0x6A0000 /* End of Sector 0x6AFFFF */
 | 
						|
#define  FLASH_WriteSector105 0x690000 /* End of Sector 0x69FFFF */
 | 
						|
#define  FLASH_WriteSector104 0x680000 /* End of Sector 0x68FFFF */
 | 
						|
#define  FLASH_WriteSector103 0x670000 /* End of Sector 0x67FFFF */
 | 
						|
#define  FLASH_WriteSector102 0x660000 /* End of Sector 0x66FFFF */
 | 
						|
#define  FLASH_WriteSector101 0x650000 /* End of Sector 0x65FFFF */
 | 
						|
#define  FLASH_WriteSector100 0x640000 /* End of Sector 0x64FFFF */
 | 
						|
#define  FLASH_WriteSector99  0x630000 /* End of Sector 0x63FFFF */
 | 
						|
#define  FLASH_WriteSector98  0x620000 /* End of Sector 0x62FFFF */
 | 
						|
#define  FLASH_WriteSector97  0x610000 /* End of Sector 0x61FFFF */
 | 
						|
#define  FLASH_WriteSector96  0x600000 /* End of Sector 0x60FFFF */
 | 
						|
#define  FLASH_WriteSector95  0x5F0000 /* End of Sector 0x5FFFFF */
 | 
						|
#define  FLASH_WriteSector94  0x5E0000 /* End of Sector 0x5EFFFF */
 | 
						|
#define  FLASH_WriteSector93  0x5D0000 /* End of Sector 0x5DFFFF */
 | 
						|
#define  FLASH_WriteSector92  0x5C0000 /* End of Sector 0x5CFFFF */
 | 
						|
#define  FLASH_WriteSector91  0x5B0000 /* End of Sector 0x5BFFFF */
 | 
						|
#define  FLASH_WriteSector90  0x5A0000 /* End of Sector 0x5AFFFF */
 | 
						|
#define  FLASH_WriteSector89  0x590000 /* End of Sector 0x59FFFF */
 | 
						|
#define  FLASH_WriteSector88  0x580000 /* End of Sector 0x58FFFF */
 | 
						|
#define  FLASH_WriteSector87  0x570000 /* End of Sector 0x57FFFF */
 | 
						|
#define  FLASH_WriteSector86  0x560000 /* End of Sector 0x56FFFF */
 | 
						|
#define  FLASH_WriteSector85  0x550000 /* End of Sector 0x55FFFF */
 | 
						|
#define  FLASH_WriteSector84  0x540000 /* End of Sector 0x54FFFF */
 | 
						|
#define  FLASH_WriteSector83  0x530000 /* End of Sector 0x53FFFF */
 | 
						|
#define  FLASH_WriteSector82  0x520000 /* End of Sector 0x52FFFF */
 | 
						|
#define  FLASH_WriteSector81  0x510000 /* End of Sector 0x51FFFF */
 | 
						|
#define  FLASH_WriteSector80  0x500000 /* End of Sector 0x50FFFF */
 | 
						|
#define  FLASH_WriteSector79  0x4F0000 /* End of Sector 0x4FFFFF */
 | 
						|
#define  FLASH_WriteSector78  0x4E0000 /* End of Sector 0x4EFFFF */
 | 
						|
#define  FLASH_WriteSector77  0x4D0000 /* End of Sector 0x4DFFFF */
 | 
						|
#define  FLASH_WriteSector76  0x4C0000 /* End of Sector 0x4CFFFF */
 | 
						|
#define  FLASH_WriteSector75  0x4B0000 /* End of Sector 0x4BFFFF */
 | 
						|
#define  FLASH_WriteSector74  0x4A0000 /* End of Sector 0x4AFFFF */
 | 
						|
#define  FLASH_WriteSector73  0x490000 /* End of Sector 0x49FFFF */
 | 
						|
#define  FLASH_WriteSector72  0x480000 /* End of Sector 0x48FFFF */
 | 
						|
#define  FLASH_WriteSector71  0x470000 /* End of Sector 0x47FFFF */
 | 
						|
#define  FLASH_WriteSector70  0x460000 /* End of Sector 0x46FFFF */
 | 
						|
#define  FLASH_WriteSector69  0x450000 /* End of Sector 0x45FFFF */
 | 
						|
#define  FLASH_WriteSector68  0x440000 /* End of Sector 0x44FFFF */
 | 
						|
#define  FLASH_WriteSector67  0x430000 /* End of Sector 0x43FFFF */
 | 
						|
#define  FLASH_WriteSector66  0x420000 /* End of Sector 0x42FFFF */
 | 
						|
#define  FLASH_WriteSector65  0x410000 /* End of Sector 0x41FFFF */
 | 
						|
#define  FLASH_WriteSector64  0x400000 /* End of Sector 0x40FFFF */
 | 
						|
#define  FLASH_WriteSector63  0x3F0000 /* End of Sector 0x3FFFFF */
 | 
						|
#define  FLASH_WriteSector62  0x3E0000 /* End of Sector 0x3EFFFF */
 | 
						|
#define  FLASH_WriteSector61  0x3D0000 /* End of Sector 0x3DFFFF */
 | 
						|
#define  FLASH_WriteSector60  0x3C0000 /* End of Sector 0x3CFFFF */
 | 
						|
#define  FLASH_WriteSector59  0x3B0000 /* End of Sector 0x3BFFFF */
 | 
						|
#define  FLASH_WriteSector58  0x3A0000 /* End of Sector 0x3AFFFF */
 | 
						|
#define  FLASH_WriteSector57  0x390000 /* End of Sector 0x39FFFF */
 | 
						|
#define  FLASH_WriteSector56  0x380000 /* End of Sector 0x38FFFF */
 | 
						|
#define  FLASH_WriteSector55  0x370000 /* End of Sector 0x37FFFF */
 | 
						|
#define  FLASH_WriteSector54  0x360000 /* End of Sector 0x36FFFF */
 | 
						|
#define  FLASH_WriteSector53  0x350000 /* End of Sector 0x35FFFF */
 | 
						|
#define  FLASH_WriteSector52  0x340000 /* End of Sector 0x34FFFF */
 | 
						|
#define  FLASH_WriteSector51  0x330000 /* End of Sector 0x33FFFF */
 | 
						|
#define  FLASH_WriteSector50  0x320000 /* End of Sector 0x32FFFF */
 | 
						|
#define  FLASH_WriteSector49  0x310000 /* End of Sector 0x31FFFF */
 | 
						|
#define  FLASH_WriteSector48  0x300000 /* End of Sector 0x30FFFF */
 | 
						|
#define  FLASH_WriteSector47  0x2F0000 /* End of Sector 0x2FFFFF */
 | 
						|
#define  FLASH_WriteSector46  0x2E0000 /* End of Sector 0x2EFFFF */
 | 
						|
#define  FLASH_WriteSector45  0x2D0000 /* End of Sector 0x2DFFFF */
 | 
						|
#define  FLASH_WriteSector44  0x2C0000 /* End of Sector 0x2CFFFF */
 | 
						|
#define  FLASH_WriteSector43  0x2B0000 /* End of Sector 0x2BFFFF */
 | 
						|
#define  FLASH_WriteSector42  0x2A0000 /* End of Sector 0x2AFFFF */
 | 
						|
#define  FLASH_WriteSector41  0x290000 /* End of Sector 0x29FFFF */
 | 
						|
#define  FLASH_WriteSector40  0x280000 /* End of Sector 0x28FFFF */
 | 
						|
#define  FLASH_WriteSector39  0x270000 /* End of Sector 0x27FFFF */
 | 
						|
#define  FLASH_WriteSector38  0x260000 /* End of Sector 0x26FFFF */
 | 
						|
#define  FLASH_WriteSector37  0x250000 /* End of Sector 0x25FFFF */
 | 
						|
#define  FLASH_WriteSector36  0x240000 /* End of Sector 0x24FFFF */
 | 
						|
#define  FLASH_WriteSector35  0x230000 /* End of Sector 0x23FFFF */
 | 
						|
#define  FLASH_WriteSector34  0x220000 /* End of Sector 0x22FFFF */
 | 
						|
#define  FLASH_WriteSector33  0x210000 /* End of Sector 0x21FFFF */
 | 
						|
#define  FLASH_WriteSector32  0x200000 /* End of Sector 0x20FFFF */
 | 
						|
#define  FLASH_WriteSector31  0x1F0000 /* End of Sector 0x1FFFFF */
 | 
						|
#define  FLASH_WriteSector30  0x1E0000 /* End of Sector 0x1EFFFF */
 | 
						|
#define  FLASH_WriteSector29  0x1D0000 /* End of Sector 0x1DFFFF */
 | 
						|
#define  FLASH_WriteSector28  0x1C0000 /* End of Sector 0x1CFFFF */
 | 
						|
#define  FLASH_WriteSector27  0x1B0000 /* End of Sector 0x1BFFFF */
 | 
						|
#define  FLASH_WriteSector26  0x1A0000 /* End of Sector 0x1AFFFF */
 | 
						|
#define  FLASH_WriteSector25  0x190000 /* End of Sector 0x19FFFF */
 | 
						|
#define  FLASH_WriteSector24  0x180000 /* End of Sector 0x18FFFF */
 | 
						|
#define  FLASH_WriteSector23  0x170000 /* End of Sector 0x17FFFF */
 | 
						|
#define  FLASH_WriteSector22  0x160000 /* End of Sector 0x16FFFF */
 | 
						|
#define  FLASH_WriteSector21  0x150000 /* End of Sector 0x15FFFF */
 | 
						|
#define  FLASH_WriteSector20  0x140000 /* End of Sector 0x14FFFF */
 | 
						|
#define  FLASH_WriteSector19  0x130000 /* End of Sector 0x13FFFF */
 | 
						|
#define  FLASH_WriteSector18  0x120000 /* End of Sector 0x12FFFF */
 | 
						|
#define  FLASH_WriteSector17  0x110000 /* End of Sector 0x11FFFF */
 | 
						|
#define  FLASH_WriteSector16  0x100000 /* End of Sector 0x10FFFF */
 | 
						|
#define  FLASH_WriteSector15  0x0F0000 /* End of Sector 0x0FFFFF */
 | 
						|
#define  FLASH_WriteSector14  0x0E0000 /* End of Sector 0x0EFFFF */
 | 
						|
#define  FLASH_WriteSector13  0x0D0000 /* End of Sector 0x0DFFFF */
 | 
						|
#define  FLASH_WriteSector12  0x0C0000 /* End of Sector 0x0CFFFF */
 | 
						|
#define  FLASH_WriteSector11  0x0B0000 /* End of Sector 0x0BFFFF */
 | 
						|
#define  FLASH_WriteSector10  0x0A0000 /* End of Sector 0x0AFFFF */
 | 
						|
#define  FLASH_WriteSector9   0x090000 /* End of Sector 0x09FFFF */
 | 
						|
#define  FLASH_WriteSector8   0x080000 /* End of Sector 0x08FFFF */
 | 
						|
#define  FLASH_WriteSector7   0x070000 /* End of Sector 0x07FFFF */
 | 
						|
#define  FLASH_WriteSector6   0x060000 /* End of Sector 0x06FFFF */
 | 
						|
#define  FLASH_WriteSector5   0x050000 /* End of Sector 0x05FFFF */
 | 
						|
#define  FLASH_WriteSector4   0x040000 /* End of Sector 0x04FFFF */
 | 
						|
#define  FLASH_WriteSector3   0x030000 /* End of Sector 0x03FFFF */
 | 
						|
#define  FLASH_WriteSector2   0x020000 /* End of Sector 0x02FFFF */
 | 
						|
#define  FLASH_WriteSector1   0x010000 /* End of Sector 0x01FFFF */
 | 
						|
#define  FLASH_WriteSector0   0x000000 /* End of Sector 0x00FFFF */
 | 
						|
 | 
						|
#define  FLASH_AddrSector12   0x0C0035  /* Addr inside Sector 12, In case of erase sector at this address Sector 12 shall be erase*/
 | 
						|
 | 
						|
#define  BufferSize (countof(Tx_Buffer)-1)
 | 
						|
 | 
						|
/* Private macro -------------------------------------------------------------*/
 | 
						|
#define countof(a) (sizeof(a) / sizeof(*(a)))
 | 
						|
/* Private variables ---------------------------------------------------------*/
 | 
						|
uint8_t Tx_Buffer[] = "STM32F10x SPI Firmware Library Example: communication with an M25P SPI FLASH";
 | 
						|
uint8_t Rx_Buffer[BufferSize];
 | 
						|
 | 
						|
__IO uint32_t FlashID = 0;
 | 
						|
__IO uint8_t Index = 0x0;
 | 
						|
 | 
						|
volatile TestStatus TransferStatus1 = PASSED, TransferStatus2 = PASSED, TransferStatus3 = PASSED, Test = PASSED;
 | 
						|
 | 
						|
 | 
						|
/* Private functions ---------------------------------------------------------*/
 | 
						|
static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
 | 
						|
static void Flush_Rx_Buffers(uint8_t* pBuffer, uint16_t BufferLength);
 | 
						|
static void Flash_SetHint(void);
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Main program
 | 
						|
  * @param  None
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
void FLASH_demo(void)
 | 
						|
{
 | 
						|
  /* Set Display for Demo Flash SPI */
 | 
						|
  Flash_SetHint();
 | 
						|
  
 | 
						|
  /* Initialize the SPI FLASH driver */
 | 
						|
  BSP_SERIAL_FLASH_Init();
 | 
						|
 | 
						|
  /* Get SPI Flash ID */
 | 
						|
  FlashID = BSP_SERIAL_FLASH_ReadID();
 | 
						|
  
 | 
						|
  /* Check the SPI Flash ID */
 | 
						|
  if (FlashID == FLASH_SPI_M25P64_ID)
 | 
						|
  {
 | 
						|
    /* Initialization OK as BSP_SERIAL_FLASH_ReadID return the right value */
 | 
						|
    BSP_LCD_DisplayStringAt(20, 100, (uint8_t*)"FLASH Initialization : OK.", LEFT_MODE);
 | 
						|
    
 | 
						|
    /* Perform a write in the Flash followed by an erase of the written data */
 | 
						|
    /* Write Tx_Buffer data to SPI FLASH memory at beginning of Sector12*/
 | 
						|
    BSP_SERIAL_FLASH_WritePage(FLASH_WriteSector12, Tx_Buffer, BufferSize);
 | 
						|
    
 | 
						|
    /* Erase SPI FLASH Sector12 by giving an Addr inside range of Sector12 Addr */
 | 
						|
    BSP_SERIAL_FLASH_EraseSector(FLASH_AddrSector12);
 | 
						|
    
 | 
						|
    /* Read Erase data from SPI FLASH memory, shall be 0xFF */
 | 
						|
    BSP_SERIAL_FLASH_ReadData(FLASH_WriteSector12, Rx_Buffer, BufferSize);
 | 
						|
 | 
						|
    /* Check the correctness of erasing operation data */
 | 
						|
    for (Index = 0; Index < BufferSize; Index++)
 | 
						|
    {
 | 
						|
      if (Rx_Buffer[Index] != 0xFF)
 | 
						|
      {
 | 
						|
        TransferStatus1 = FAILED;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    /* Flush Data inside Rx_Buffer */
 | 
						|
    Flush_Rx_Buffers(Rx_Buffer, BufferSize);
 | 
						|
    
 | 
						|
    if(TransferStatus1 == PASSED)
 | 
						|
    {
 | 
						|
      BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"FLASH ERASE : OK.", LEFT_MODE);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"FLASH ERASE : FAILED.", LEFT_MODE);
 | 
						|
      Test = FAILED;
 | 
						|
    } 
 | 
						|
 | 
						|
    /* Perform a write in the Flash followed by a read of the written data */
 | 
						|
    /* Write Tx_Buffer data to SPI FLASH memory at Sector0 Addr*/
 | 
						|
    BSP_SERIAL_FLASH_WritePage(FLASH_WriteSector0, Tx_Buffer, BufferSize);
 | 
						|
    
 | 
						|
    /* Read data from SPI FLASH memory at Sector0 Addr*/
 | 
						|
    BSP_SERIAL_FLASH_ReadData(FLASH_WriteSector0, Rx_Buffer, BufferSize);
 | 
						|
    
 | 
						|
    /* Check the correctness of written data */
 | 
						|
    TransferStatus2 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize);
 | 
						|
    
 | 
						|
    /* Flush Data inside Rx_Buffer */
 | 
						|
    Flush_Rx_Buffers(Rx_Buffer, BufferSize);
 | 
						|
 | 
						|
    if(TransferStatus2 == PASSED)
 | 
						|
    {
 | 
						|
      BSP_LCD_DisplayStringAt(20, 130, (uint8_t*)"FLASH WRITE : OK.", LEFT_MODE);
 | 
						|
      BSP_LCD_DisplayStringAt(20, 145, (uint8_t*)"FLASH READ  : OK.", LEFT_MODE);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      BSP_LCD_DisplayStringAt(20, 130, (uint8_t*)"FLASH WRITE : FAILED.", LEFT_MODE);
 | 
						|
      BSP_LCD_DisplayStringAt(20, 145, (uint8_t*)"FLASH READ  : FAILED.", LEFT_MODE);
 | 
						|
      Test = FAILED;
 | 
						|
    }
 | 
						|
    
 | 
						|
    if(Test == PASSED)
 | 
						|
    {
 | 
						|
      BSP_LCD_DisplayStringAt(20, 160, (uint8_t*)"FLASH Test : OK.", LEFT_MODE);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {    
 | 
						|
      BSP_LCD_DisplayStringAt(20, 160, (uint8_t*)"FLASH Test : FAILED.", LEFT_MODE);
 | 
						|
    } 
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    /* Error Init: Test FAILED */
 | 
						|
    BSP_LCD_DisplayStringAt(20, 100, (uint8_t*)"FLASH Initialization : FAILED.", LEFT_MODE);
 | 
						|
    BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"FLASH Test : FAILED.", LEFT_MODE);
 | 
						|
  }
 | 
						|
 | 
						|
  while (1)
 | 
						|
  {    
 | 
						|
    if(CheckForUserInput() > 0)
 | 
						|
    {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Display FLASH Demo Hint
 | 
						|
  * @param  None
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
static void Flash_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*)"FLASH", CENTER_MODE);
 | 
						|
  BSP_LCD_SetFont(&Font12);
 | 
						|
  BSP_LCD_DisplayStringAt(0, 30, (uint8_t*)"This example shows how to write", CENTER_MODE);
 | 
						|
  BSP_LCD_DisplayStringAt(0, 45, (uint8_t*)"and read data on FLASH SPI", 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);
 | 
						|
  
 | 
						|
  BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
 | 
						|
  BSP_LCD_SetBackColor(LCD_COLOR_WHITE); 
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Compares two buffers.
 | 
						|
  * @param  pBuffer1, pBuffer2: buffers to be compared.
 | 
						|
  * @param  BufferLength: buffer's length
 | 
						|
  * @retval PASSED: pBuffer1 identical to pBuffer2
 | 
						|
  *         FAILED: pBuffer1 differs from pBuffer2
 | 
						|
  */
 | 
						|
static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
 | 
						|
{
 | 
						|
  while(BufferLength--)
 | 
						|
  {
 | 
						|
    if(*pBuffer1 != *pBuffer2)
 | 
						|
    {
 | 
						|
      return FAILED;
 | 
						|
    }
 | 
						|
    
 | 
						|
    pBuffer1++;
 | 
						|
    pBuffer2++;
 | 
						|
  }
 | 
						|
 | 
						|
  return PASSED;  
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  * @brief  Flushes the receive buffers.
 | 
						|
  * @param  None
 | 
						|
  * @retval None
 | 
						|
  */
 | 
						|
static void Flush_Rx_Buffers(uint8_t* pBuffer, uint16_t BufferLength)
 | 
						|
{
 | 
						|
  while(BufferLength--)
 | 
						|
  {
 | 
						|
    *pBuffer = 0;
 | 
						|
    pBuffer++;
 | 
						|
  }
 | 
						|
}
 | 
						|
/**
 | 
						|
  * @}
 | 
						|
  */ 
 | 
						|
/**
 | 
						|
  * @}
 | 
						|
  */ 
 |