
使用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(); |
基于STM32U575的RFID信息审查系统?
STM32CubeProgrammer 安装错误,请帮忙解决,谢谢
STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
STM32G070RBT6TR STM32CubeMX ADC配置后使用的是内部参考电压且零点的读数太大了
测评在哪里发?
Group Study vs. Solo Study: What Works Best?
STM32G070CBT6使用硬件SPI无法读出W25Q128的ID
STM32G0B0CET6的usb的时钟只能用48MHz的晶振来实现吗?
STM32G070RET6,中断优先级配置没有效果
如图:STM32F437的TIM10支持从模式吗?
我用的不是快速编程,一次只存储两个字 对齐是64,现在还是不行,每次写数据都死在这里:
/* check flash errors. Only ECC correction can be checked here as ECCD
generates NMI */
error = (FLASH->SR & FLASH_FLAG_SR_ERROR);
/* Clear SR register */
FLASH->SR = FLASH_FLAG_SR_CLEAR;
/* Update error with ECC error value */
eccerr = (FLASH->ECCR & FLASH_FLAG_ECCC);
if(eccerr != 0x00u)
{
FLASH->ECCR |= eccerr;
error |= eccerr;
}
if (error != 0x00U)
{
/*Save the error code*/
pFlash.ErrorCode = error;
return HAL_ERROR;
}
是同一个扇区同一个位置写第一次成功,写第二次失败?还是同一个扇区写第一个双字正确,写第二个双字就出错?
如果是写同一个扇区的同一个位置,有确认在写操作之前已经正确擦除么?
每次写不是同一个地址的,写入新的地址都是新的空白地址,新的地址是就地址经过偏移得到的,目前是上电运行我的测试程序是可以正常整页擦除操作的,但是进入到main函数的时候再调用,就会出现问题,
执行编程之前最好先清除一下相关标志位