20260324
This commit is contained in:
105
IAPV1.1/Driver/STMFLASH/flash.c
Normal file
105
IAPV1.1/Driver/STMFLASH/flash.c
Normal 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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user