STM32
直播中

手托初梦

9年用户 825经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

stm32g030f6p6 flash快速编程总是失败的原因?

使用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 writing 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();   

回帖(2)

周倩

2024-4-7 15:46:32
你如果快速编程的话,相关函数要放到RAM里进行。前不久,我刚好基于G0测试过,你度娘一下这个   STM32L0芯片FLASH编程示例及提醒  做参考。快速编程函数放到RAM里进行。二者快速编程不完全一样,G0的快速编程是页编程,即256字节的页编程。
举报

李鸿洋

2024-4-7 17:12:33
可能有几种原因导致flash快速编程失败:

1. Flash写入保护:确保在编程之前先解锁Flash,否则将无法进行写操作。你已经使用了`HAL_FLASH_Unlock()`函数来解锁Flash,所以这个问题可以排除。

2. Erase/Write的时间间隔:在进行写操作之前,必须确保在上一次擦除(Erase)操作之后至少等待2ms的时间间隔。这是因为擦除操作耗时较长,而STM32Flash编程函数内部有一个延时等待操作,确保在写入之前Flash已被擦除完毕。你的代码中没有显示的擦除操作,所以这个问题也可以排除。

3. Flash数据对齐:确保写入的数据是按照正确的字节对齐方式进行的。在你的代码中,你提到了已经进行了字节对齐。

这些都是常见的造成写入Flash失败的原因,根据你提供的代码和问题描述来看,这些问题都已经得到了正确处理。如果你仍然无法解决问题,可以尝试以下方法:

- 检查芯片型号和Datasheet:确保你使用的STM32G030F6芯片支持快速编程操作。
- 更新HAL库:确保你使用的HAL库版本是最新的,或者尝试使用其他版本的HAL库。
- 检查编程操作的其他相关设置:例如Flash的起始地址是否设置正确,是否有其他函数或中断影响了Flash编程操作等。
- 检查编程操作的逻辑错误:检查是否有其他地方修改了Flash的内容或影响到了Flash编程的正确性。

如果上述方法仍然无法解决问题,建议检查芯片连接和硬件电路,并尝试使用其他编程方法(例如使用JTAG/SWD接口进行编程)来排除硬件问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分