FLASH_Status FlashStatus = FLASH_COMPLETE;/* Erase Page0 */FlashStatus =FLASH_ErasePage(PAGE0_BASE_ADDRESS);/* If erase operation was failed, a Flash error code is returned */if(FlashStatus != FLASH_COMPLETE) {returnFlashStatus; }/* Set Page0 as valid page: Write VALID_PAGE at Page0...
f.TypeErase = FLASH_TYPEERASE_PAGES;f.PageAddress = addr;f.NbPages = 1;//设置PageError uint...
{FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区 if(NumToErase==secremain) break;//擦除结束了 else//擦除未结束 { secpos++;//扇区地址增1 secoff=0;//偏移位置为0 EraseAddr+=secremain;//地址偏移 NumToErase-=secremain;//字节(16位)数递减 if(NumToErase>(STM...
锁定函数:void FLASH_Lock(void); 有解锁当然就有上锁,为了保护Flash,读写和擦除全部需要的Flash后需要上锁,只需要调用: FLASH_Lock(); 擦除函数 固件库我们主要使用两个 FLASH 擦除函数: FLASH_Status FLASH_ErasePage(uint32_t Page_Address); FLASH_Status FLASH_EraseAllPages(void); 顾名思义,第一个函...
1调用FLASH_PageErase()1:调用FLASH_PageErase();函数后无法对FLASH编程;原因:FLASH_PageErase();函数中只对FLASH->CR寄存器的擦除位置1,未检测忙标志也未清零擦除标志;所以一直处于擦除状态不能编程。解决办法:1调用HAL_FLASHEx_Erase;2可以在调用FLASH_PageErase()后查询FLASH->SR的BSY位,空闲后清零...
使用Flash有个限制,就是写之前必须先擦除。所以,SSD通常按两种粒度组织,一种是read和write操作基于的粒度,即page(比如2KB或者4KB),一种是erase操作基于的粒度,即block(比如128KB或者256KB)。一个block由若干个pages组成。 一个page初始时是INVALID状态,所在block被擦除后进入ERASED状态,擦除会重置page上的内容,...
读取指定位置没有问题,但是尝试擦除或者写入时就会死机,就是程序执行擦除FLASH_ErasePage()或者写入...
=FLASH_ErasePage(ucStartAddr)){printf("Erase Error!\n");returnTEST_ERROR;}else{ucStartAddr=ADDR_FLASH_PAGE_255;printf("擦除成功,此时FLASH中值为:\n");for(int i=0;i<BufferSize;i++){usFlashReadBuf[i]=*(uint32_t*)ucStartAddr;printf("ucFlashReadBuf[%d] = 0x%.4x\n",i,usFlash...
FLASH_ErasePage(sec_addr*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区 for(i=0;i<sec_remain;i++) { STMFLASH_BUF[i+sec_off]=pBuffer[i]; } STMFLASH_Write_NoCheck(sec_addr*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//写入整个扇区(页) ...
置控制寄存器的 PER(Page Erase)位为 1,然后在 AR(Address Register)地址寄存器中选择要擦除的页,最后,置控制寄存器的 STRT 位为 1,置 STRT 为 1,也是触发条件 STRT 为 1,芯片开始干活,然后芯片看到,PER = 1,他就知道接下来要执行页擦除,但是芯片要知道要具体擦哪一页,所以,它会继续看 AR 寄存器的数...