了解承业兴 · 从点滴开始
全球知名品牌的电子元器件供应商

STM3210XX 中读写Flash的操作

STM3210XX中读写Flash的操作

编程工具是Keil uVision5。


有些设置需要在机器断电的情况下保存,这时要将设置写入Flash,需要的时候再读取出来。


实际的代码:


uint32_t ReadFromFlashOneWord(uint32_t Addr){

//从Flash中读取一个字(半个字的读取)

uint32_t HData,LData;//定义高位、低位两个数据

HData=(__IO uint16_t)Addr;

LData=(__IO uint16_t)(Addr+2);

return (HData<<16)+LData;

}


uint16_t ReadFromFlashHalfWord(uint32_t Addr){

//读取32位字节数据后返回16位数据

return (__IO uint16_t)Addr;

}


void ReadFromFlashMultipleWord(uint32_t StartAddr,uint16_t ReadData,uint16_t Count){

uint16_t i;

for(i=0;iReadData[i]=ReadFromFlashHalfWord(StartAddr+i2);

}

}


void WriteToFlashOneWord(uint32_t StartAddr,uint32_t WriteData){

//向Flash指定的地址写入一个字

HAL_FLASH_Unlock();

//擦除

FLASH_EraseInitTypeDef EraseInitStrut;

EraseInitStrut.TypeErase=FLASH_TYPEERASE_PAGES;

EraseInitStrut.PageAddress=StartAddr;

EraseInitStrut.NbPages=1;

//设置页面错误

uint32_t PageError=0;

//擦除

HAL_FLASHEx_Erase(&EraseInitStrut,&PageError);

//写入Flash

HAL_FLASH_Program(TYPEPROGRAM_WORD,StartAddr,WriteData);

//锁定Flash

HAL_FLASH_Lock();

}

  读写测试:


  uint32_t TestData=0x12345678;

  uint32_t TestAddr=0x0800F000;                          //写入Flash

  WriteToFlashOneWord(TestAddr,TestData);

  HAL_Delay (100);


  //uint16_t OutData;

  uint8_t HData1,HData2,LData1,LData2;


  HData1= (uint8_t)(TestData>>24);

  HData2= (uint8_t)(TestData>>16);

  LData1= (uint8_t)(TestData>>8);

  LData2=(uint8_t)TestData;

        

  //OutData=ReadFromFlashHalfWord(TestAddr);

  Send_Buffer[61]=HData1;

  Send_Buffer[62]=HData2;

  Send_Buffer[63]=LData1;

  Send_Buffer[64]=LData2;

HAL_UART_Transmit(&hlpuart1,Send_Buffer,70,10);


如果您有 电子元器件 的采购需求,欢迎与 承业兴 联系

深圳电子元件IC芯片供应商,一站式BOM配单公司,5000+常备现货库存,百万级原厂料号数据

可提供集成电路IC芯片,存储器ic芯片、模拟信号开关、接口ic芯片、时钟驱动ic、音频放大器ic、光电耦合器等

各种电子元件(电阻器、电容器、电感器、开关连接器

现货物料当天发货,BOM报价1天即可完成,服务热线:134-3440-1267、155-2178-1275

粤ICP备2022135715号