/** ****************************************************************************** * 版 本 :V1.0.0 * 作 者 :liuyanbin * 版权所有,盗版必究。 * Copyright(C) All rights reserved ****************************************************************************** * 历史记录 * 序号 版本 变更内容 作者 日期 * 1 V0.0.1 实现flash存储 刘艳斌 2024/1/24 * ****************************************************************************** */ #include "stm32f10x.h" #include #include "INflash.h" #include "Regist.h" #include "string.h" #include "Delay.h" #include "Log_Module.h" typedef uint16_t uint16; typedef uint32_t uint32; uint16 STMFLASH_BUF[STM32_SECTOR_SIZE/2];//最多是2K字节 void write_to_flash(uint32 WriteAddr,uint16 *pBuffer,uint16 NumToWrite) { uint16 i; for(i=0;i=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址 FLASH_Unlock(); offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址. secpos=offaddr/STM32_SECTOR_SIZE; //扇区地址 0~127 for STM32F103RBT6 secoff=(offaddr%STM32_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.) secremain=STM32_SECTOR_SIZE/2-secoff; //扇区剩余空间大小 if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围 while(1) { STMFLASH_Read(secpos*STM32_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM32_SECTOR_SIZE/2);//读出整个扇区的内容 for(i=0;i(STM32_SECTOR_SIZE/2))secremain=STM32_SECTOR_SIZE/2;//下一个扇区还是写不完 else secremain=NumToWrite;//下一个扇区可以写完了 } }; FLASH_Lock();//上锁 }