This commit is contained in:
2026-04-23 10:50:18 +08:00
commit a436fda935
844 changed files with 272643 additions and 0 deletions

View File

@ -0,0 +1,105 @@
#include "flash.h"
uint8_t Write_Buff[STM32L_PAGES_SIZE];
//读取FLASHYIGE 字节的数据
uint8_t FLASH_ReadByte(uint32_t Addr)
{
return *(__IO uint8_t*)Addr;
}
//读取FLASH多个字节的数据
void FLASH_ReadNByte(uint32_t Addr,uint8_t *pBuff,uint32_t Len)
{
uint32_t i;
for(i = 0;i < Len;i++)
{
pBuff[i] = FLASH_ReadByte(Addr);
Addr ++;
}
}
/*************************************
函数名称:
函数功能向FLASH指地址写
入数据
函数参数:页号,写入缓冲区
函数返回值:
**************************************/
void FLASH_WriteWord(uint32_t add,uint8_t *pBuff,uint32_t length)
{
unsigned short int i;
if(add < STM32L_FLASH_BASE)
return;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR\
|FLASH_FLAG_SIZERR|FLASH_FLAG_OPTVERR|FLASH_FLAG_OPTVERRUSR);
//FLASH_ErasePage(Addr);
/*******************************************/
for(i = 0;i < length;i+=4)
{
FLASH_FastProgramWord(add+i,*(uint32_t *)pBuff);
//add += 4;
pBuff += 4;
}
/*******************************************/
FLASH_Lock();
}
/*************************************
函数名称:
函数功能向FLASH指定页写
入数据
函数参数:页号,写入缓冲区
函数返回值:
**************************************/
void FLASH_WritePage(uint16_t Page_Num,uint8_t *pBuff)
{
uint32_t Addr;
unsigned short int i;
if(Page_Num > STM32L_PAGES_NUM)
return;
Addr = Page_Num * STM32L_PAGES_SIZE + APP_ADDR;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR\
|FLASH_FLAG_SIZERR|FLASH_FLAG_OPTVERR|FLASH_FLAG_OPTVERRUSR);
FLASH_ErasePage(Addr);
/*******************************************/
for(i = 0;i < STM32L_PAGES_SIZE;i+=4)
{
FLASH_FastProgramWord(Addr,*(unsigned long int *)pBuff);
Addr += 4;
pBuff += 4;
}
/*******************************************/
FLASH_Lock();
}
void Flash_Erase_Pages(uint32_t pagestart,uint16_t number)
{
uint32_t Addr;
if(pagestart > STM32L_PAGES_NUM)
return;
//Addr = pagestart * STM32L_PAGES_SIZE + APP_ADDR;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR\
|FLASH_FLAG_SIZERR|FLASH_FLAG_OPTVERR|FLASH_FLAG_OPTVERRUSR);
for( uint16_t i=0;i<number;i++)
{
//Addr = (pagestart+i) * STM32L_PAGES_SIZE + APP_ADDR;
Addr = (pagestart+i) * STM32L_PAGES_SIZE + STM32L_FLASH_BASE;
FLASH_ErasePage(Addr);
}
FLASH_Lock();
}