FLASH的写入
结合HAL库所给参数:
查阅具体使用芯片的参考手册。
就不在详细解释,英文自行翻译。具体代码如下:
/*FLASH写入程序*/
void WriteFlashTest(uint32_t L, uint32_t addr, uint32_t *Data,int Page)
{
int i=0;
/* 1/4解锁FLASH*/
HAL_FLASH_Unlock();
/* 2/4擦除FLASH*/
/*初始化FLASH_EraseInitTypeDef*/
/*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/
/*擦除页数*/
/*擦除地址*/
FLASH_EraseInitTypeDef FlashSet;
FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;
FlashSet.Banks = FLASH_BANK_2;
FlashSet.Page = Page;
FlashSet.NbPages = 1;
/*设置PageError,调用擦除函数*/
uint32_t PageError = 0;
HAL_FLASHEx_Erase(&FlashSet, &PageError);
/* 3/4对FLASH烧写*/
for(i=0;i<L;i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr +8*i, Data[i]); //FLASH_TYPEPROGRAM_WORD
}
/* 4/4锁住FLASH*/
HAL_FLASH_Lock();
}
FLASH的读取
读取的话就比较简单许多,直接对获取地址数据。
void PrintFlashFloat(uint32_t L,uint32_t addr)
{
int i=0;
for(i=0;i<L;i++)
{
float readdata; //定义读取变量
readdata=*(float *)(addr + i*8); //利用指针读取浮点数据
Flash_Float_Data[i] = readdata;
}
}
WriteFlashTest(3,addr_PD,(uint32_t *)Flas_Data_PD,250); // 保存,擦除
PrintFlashFloat(3,addr_PD);// 读取