
#ifndef __STM32FLASH_H
#define __STM32FLASH_H
#include "stm32f10x.h"
int Falsh_Write(u32 *p_data,u32 size);
#endif /* __STM32FLASH_H */
//**********.c
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "STM32FLASH.h"
/* Private typedef -----------------------------------------------------------*/
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
/* Private define ------------------------------------------------------------*/
/* Define the STM32F10x FLASH Page Size depending on the used STM32 device */
#define BANK1_WRITE_START_ADDR ((uint32_t)0x08008000)
/* Private functions ---------------------------------------------------------*/
int Falsh_Write(u32 *p_data,u32 size)
{
/* Unlock the Flash Bank1 Program Erase controller */
FLASH_UnlockBank1();
/* Define the number of page to be erased */
NbrOfPage = (BANK1_WRITE_END_ADDR - BANK1_WRITE_START_ADDR) / FLASH_PAGE_SIZE +1;
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
/* Erase the FLASH pages */
for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
{
}
/* Program Flash Bank1 */
Address = BANK1_WRITE_START_ADDR;
while((Address < BANK1_WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))
{
}
FLASH_LockBank1();
/* Check the corectness of written data */
Address = BANK1_WRITE_START_ADDR;
while((Address < BANK1_WRITE_END_ADDR) && (MemoryProgramStatus != FAILED))
{
}
}
