PY32使用HAL库开机flash烧写第一次成功第二次失败问题解决
*核心点是hal库调用这个全局变量的标志位使能后没有清除,每次进入检查标志位直接返回HAL_BUSY,手动处理清除一下标志然后就可以正常运行擦除函数。感觉应该这是这个库的BUG。
·
/*核心点是hal库调用这个全局变量的标志位使能后没有清除,每次进入检查标志位直接返回HAL_BUSY,手动处理清除一下标志然后就可以正常运行擦除函数。 */
感觉应该这是这个库的BUG。能用就好。

void WriteFlash(uint32_t addr,uint32_t *Data,uint32_t L)
{
uint32_t i=0;
HAL_FLASH_Unlock();
FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
FLASH_EraseInitTypeDef FlashSet;
FlashSet.TypeErase = FLASH_TYPEERASE_PAGEERASE;
FlashSet.PageAddress = addr;
FlashSet.NbPages = 1;
uint32_t PageError = 0;
__HAL_UNLOCK(&pFlash); /*核心点是hal库调用这个标志位使能后没有清除,每次进入检查标志位直接返回HAL_BUSY,手动处理一下就可以了 */
int ret = HAL_FLASHEx_Erase(&FlashSet, &PageError);
if(ret != HAL_OK) {
printf("Erase Error[%d]\n",ret);
}
for(i=0;i<L;i++) {
HAL_FLASH_Program(FLASH_TYPEPROGRAM_PAGE, addr+4*i, &Data[i]);
}
HAL_FLASH_Lock();
}
更多推荐



所有评论(0)