flash.c

来自「基于STM32的双极性逆变器软件」· C语言 代码 · 共 81 行

C
81
字号
#include "stm32f10x_lib.h"
//#include "stm32f10x_1602.h"
#include "Flash.h"

/* Private define ------------------------------------------------------------*/
#define FLASH_PAGE_SIZE   ((u16)0x100)
/* Private typedef -----------------------------------------------------------*/
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;

/* Private variables ---------------------------------------------------------*/
u32 EraseCounter = 0x00, Address = 0x00;
vu32 NbrOfPage = 0x00;
volatile FLASH_Status FLASHStatus;
volatile TestStatus MemoryProgramStatus;
/*****************************写Flash函数****************************************
*
* 变量值为带写入的数,起始地址,截止地址
*
*********************************************************************************/
char Flash(u32 x,u32 y,u32 z){
  FLASHStatus = FLASH_COMPLETE;
  MemoryProgramStatus = PASSED;

  /* Unlock the Flash Program Erase controller */
  FLASH_Unlock();
  
  /* Define the number of page to be erased */
  NbrOfPage = (z - y) / FLASH_PAGE_SIZE;

  /* Clear All pending flags */
  FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);	

  /* Erase the FLASH pages */
  for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
  {
    FLASHStatus = FLASH_ErasePage(y + (FLASH_PAGE_SIZE * EraseCounter));
  }
  
  /*  FLASH Word program of data 0x15041979 at addresses defined by StartAddr and EndAddr*/
  Address = y;

  while((Address < z) && (FLASHStatus == FLASH_COMPLETE))
  {
    FLASHStatus = FLASH_ProgramWord(Address, x);
    Address = Address + 4;
  }
  
  /* Check the corectness of written data */
  Address = y;

  while((Address < z) && (MemoryProgramStatus != FAILED))
  {
    if((*(vu32*) Address) != x)
    {
      MemoryProgramStatus = FAILED;
    }
    Address += 4;
  }

  if(MemoryProgramStatus == FAILED)
  {
  return(0);
  }
  else
  {
  return(1);
  }
}
/*****************************读Flash函数****************************************
*
* 变量值为带读出的数,起始地址,截止地址
*
*********************************************************************************/

u32 Flash_Read(u32 y){
u32 x;
x=(*(vu32*) y );
return(x);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?