Files
SM-1000M/IAPV1.1/Driver/STMFLASH/flash.c
2026-04-23 10:50:18 +08:00

106 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
}