使用
STM32g030f6p6 对flash快速编程时总是第一次可以正常的写,第二次写就失败,失败地方总在 HAL_FLASH_Program这条函数,这个地方卡了好几个星期了,现在请广大的坛友帮忙解决或者分享下经验。
下面时个人写的程序,字节对齐时没错了,
HAL_StatusTypeDef sta=0;
uint32_t end_addr;
HAL_FLASH_Unlock();
if(init==FLASH_SAVE)
flashAddr += FLASH_INDEX_SIZE;
end_addr =flashAddr+write_num*FLASH_INDEX_SIZE;
if(end_addr > g_my_flash.flash_end_addr || init==FLASH_ERASER)/*如果如果地址大于存储的结束地址 则把当前页面的数据擦除*/
{
flashAddr = g_my_flash.flash_start_addr;
end_addr =flashAddr+write_num*FLASH_INDEX_SIZE;
ClrFlashPage(); //清除
}
while (flashAddr < end_addr)
{
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, flashAddr, *p_Write) == HAL_OK)
{
p_Write+=1;
flashAddr = flashAddr + 8;
}
else
{
/* Error occurred while wri
ting data in Flash memory.
User can add here some code to deal with this error */
while (1)
{
LED_ON;
HAL_Delay(1000);
LED_OFF;
HAL_Delay(1000);
}
}
}
flashAddr = flashAddr - FLASH_INDEX_SIZE;
HAL_FLASH_Lock();