加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

STM32 Flash 擦除 读写 成功

发布时间:2020-12-15 17:51:06 所属栏目:百科 来源:网络整理
导读:参考:http://download.csdn.net/detail/my_friend_ship/4166970 要点: 将数据写入flash之前,每次都要擦除,否则会写入不成功,出现的错误状态为:FLASH_Status=FLASH_ERROR_PG 写入数据成功后可以在Memory 中查看刚刚写入的数据,具体在Memory 窗口中输入

参考:http://download.csdn.net/detail/my_friend_ship/4166970


要点: 将数据写入flash之前,每次都要擦除,否则会写入不成功,出现的错误状态为:FLASH_Status=FLASH_ERROR_PG

写入数据成功后可以在Memory 中查看刚刚写入的数据,具体在Memory 窗口中输入:0x08010000,既可以看到此处的数据为?:Data = 0x15041979;//要写入的地址


擦除的起始地址与终止地址

#define StartAddr ?((u32)0x08010000)
#define EndAddr ? ?((u32)0x0807ffff)


//擦除

char IAP_Init()//初始化loaded 的flash

{
? FLASHStatus = FLASH_COMPLETE;
? //MemoryProgramStatus = PASSED;
??
? /* Unlock the Flash Program Erase controller */
? FLASH_Unlock();


? /* Define the number of page to be erased */
? NbrOfPage = (EndAddr - StartAddr) / FLASH_PAGE_SIZE;


? /* Clear All pending flags */
? FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);


? /* Erase the FLASH pages */
? for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
? {
? ? FLASHStatus = FLASH_ErasePage(StartAddr + (FLASH_PAGE_SIZE * EraseCounter));
? }
?return ?FLASHStatus;

}


int main(void)
{?
? u8 t;
? u8 key;
? u16 oldcount=0; //老的串口接收数据值
? u16 applenth=0; //接收到的app代码长度
? u8 clearflag=0;
? u32 FlashDestination;
? FLASH_Unlock();
? RCC_Configuration();?
? GPIO_Configuration();
? NVIC_Configuration();
? SysTick_Config();
? UART_init(9600);//串口初始化为9600 ?5648
? IAP_Init();

? Data = 0x15041979;//要写入的地址
? u32 ? ?Address;

while(1)//循环擦除写入

{?
? {??
? IAP_Init();
?int j,x;
? u32 RamSource;?
? FLASHStatus = FLASH_COMPLETE;
? ? /* Program the data received into STM32F10x Flash */
? ? ? FLASHStatus=FLASH_ProgramWord(StartAddr,Data);
? ? ?if( FLASHStatus == FLASH_COMPLETE )
? ? ?{
? ? ? Address = StartAddr;
? ? ? if (*(u32*)Address != Data )?
? ? ? {
? ? ? /* End session */
? ? ? ? RFID_SendString("IAP ?XXXXX !"); //写入失败
? ? ? }
? ? ? else? ? ? ?
? ? ? ?RFID_SendString("IAP ? WRITE !");//写入成功
? ? }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读