在你的代码中,你使用了`HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError)`函数来擦除指定的page,...
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK){ retvalue = HAL_ERROR; /...
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void); void HAL_FLASH_OB_Launch(void); void FLASH_PageErase(uint32_t PageAddress); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 注意上面的最后一行代码,FLASH_PageErase该函数在擦除时没有检测并且置0忙标识位,使得该段flash一直状态忙,无法使用,所以在擦除页面时...
void FLASH_ErasePage_Fast( uint32_t Page_Address ) {if( ( Page_Address >= ValidAddrStart ) && ( Page_Address < ValidAddrEnd ) ) { FLASH->CR |= CR_PAGE_ER; FLASH->AR = Page_Address; FLASH->CR |= CR_STRT_Set;while( FLASH->SR & SR_BSY ); FLASH->CR &= ~CR_PAGE_ER; ...
STM32 实现内部Flash的读写(HAL库版) Flash 中文名字叫闪存,是一种长寿命的非易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进行擦写和再编程,在进行写入操作之前必须先执行擦除。一个Nand Flash由多个块(Block)组成,每个块里面又包含很多页(page)。每个页对应一个空闲区域/冗余区域(spare area)...
_FLASH_Unlock();HAL_FLASHEx_Erase(&p_erase_init, &page_error);HAL_FLASH_Lock();return;}当我使用 STM32_Programmer 手动删除页面时,我没有看到任何错误。STM32_Programmer.sh -c port=swd -e [7 25] 牛牛爱吃草2023-01-12 06:44:39
原因:FLASH_PageErase();函数中只对FLASH->CR寄存器的擦除位置1,未检测忙标志也未清零擦除标志;所以一直处于擦除状态不能编程。解决办法:1调用HAL_FLASHEx_Erase;2可以在调用FLASH_PageErase()后查询FLASH->SR的BSY位,空闲后清零擦除标志位。也可以更改库函数如下:添加红色区域代码。2:STM32F0xx系列芯片...
= HAL_OK) { /* Error occurred while page erase. User can add here some code to deal with this error . PageError will contain the faulty page and then to know the code error on this page, user can call function HAL_FLASH_GetError() */ /* Infinite loop */ while ( 1) { /* ...
CLEAR_BIT(FLASH->CR, FLASH_CR_PER); //清除CR寄存器的PER位,此操作应该在FLASH_PageErase()中完成!(((FLASH_TypeDef *)((0x40000000UL + 0x00020000UL) + 0x00002000UL))->CR) &= ~((0x1UL << (1U))) //但是HAL库里面并没有做,应该是HAL库bug! for...
STM32:Flash擦除与读写操作(HAL库)STM32:Flash擦除与读写操作(HAL库)应⽤平台:STM32F030F4P6 ST官⽅库:STM32Cube_FW_F0_V1.9.0 背景知识 绝⼤多数的单⽚机和微控制器(ARM,x86),地址空间都是以字节为单位的,也就是说⼀个地址是⼀个字节。Flash存储器有个特点,就是只能写0,不能...