flash读写 STM32G070 HAL库 STM32CubeMX
1,程序通过串口写入及读写数据,通过printf打印输出。注:这里不讲解printf 的设置
2,写入数据代码:
HAL_StatusTypeDef flash_write(uint32_t address, uint64_t data)
{
uint32_t PageError=0;
FLASH_EraseInitTypeDef FlashEraseInit;//擦除结构体
HAL_StatusTypeDef ret = HAL_OK;
//整页擦除
FlashEraseInit.TypeErase = FLASH_TYPEERASE_PAGES; //擦除类型,页擦除
FlashEraseInit.Page = 63; //从哪页开始擦除
FlashEraseInit.NbPages = 1; //一次只擦除一页
HAL_FLASH_Unlock();
if(HAL_FLASHEx_Erase(&FlashEraseInit,&PageError) != HAL_OK)
{
return 2;//发生错误了
}
ret = HAL_FLASH_Program(TYPEPROGRAM_DOUBLEWORD, address , data);
HAL_FLASH_Lock();
return ret;
}
3,读取数据代码
uint64_t readFlashData(uint32_t addr)
{
uint64_t temp = (__IO uint64_t)(addr);
return temp;
}
4,主程序
if((COM3.RXFlag==1)&&(COM3.time>15))
{
COM3.RXFlag=0;
//判断是否去读数据
if(COM3.RXData[0]==0)
{
//flash 读取实验–读取
temp32=readFlashData(ADDR_USER_DATA);
printf(“PileCodeFlash:%d\n”,temp32);
}
if((COM3.RXData[0]==1)&&(COM3.RXLength>=4))
{
//flash 读取实验–读取
temp=COM3.RXData[1];
temp=temp*256+COM3.RXData[2];
temp=temp*256+COM3.RXData[3];
temp=temp*256+COM3.RXData[4];
flash_write(ADDR_USER_DATA,temp);
printf(“写入数据”);
}
COM3.RXLength=0;
}
5,补充说明:
#define ADDR_USER_DATA 0x0801F800
uint64_t temp=0;
uint32_t temp32=0;