#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