Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';擦除后不写入闪存_C_Memory_Arm_Stm32_Flash Memory - Fatal编程技术网

Can';擦除后不写入闪存

Can';擦除后不写入闪存,c,memory,arm,stm32,flash-memory,C,Memory,Arm,Stm32,Flash Memory,所以我不能在擦除内部闪存后直接写入它。如果写操作之前没有擦除操作,那么我可以。你知道为什么吗 编程函数返回“成功写入”值,但查看内存时,不会写入任何数据。代码如下: uint32_t pageAddress = 0x08008000; uint16_t buffer = 0xAAAA; HAL_FLASH_Unlock(); FLASH_PageErase(pageAddress); HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, pageAddress, bu

所以我不能在擦除内部闪存后直接写入它。如果写操作之前没有擦除操作,那么我可以。你知道为什么吗

编程函数返回“成功写入”值,但查看内存时,不会写入任何数据。代码如下:

uint32_t pageAddress = 0x08008000;
uint16_t buffer = 0xAAAA;

HAL_FLASH_Unlock();
FLASH_PageErase(pageAddress);
HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, pageAddress, buffer);
HAL_FLASH_Lock();

我已经尝试在擦除和编程之间锁定内存,在这些操作之间产生延迟,但没有任何帮助。

问题是,在调用FLASH\u PageErase()时设置的FLASH->CR寄存器中的每一位在结束时没有被清除。在闪存仍处于解锁状态时清除此位,允许在此之后运行闪存上的其他操作


STM文档对此没有任何说明。

闪存擦除/写入调用是否不返回任何状态/错误信息?@MartinJames'flash_PageErase()'没有HAL_FLASH_Program()'是的,不管编写是否成功,它都是“HAL_OK”。如果你只是用
FLASH_FLASH_Program()
替换
hall_FLASH_Program()
,会发生什么?你救了我一天。我注意到的另一件事是,当您尝试执行几个连续存储时(使用
HAL_FLASH_Program
),您必须在每次操作后清除PG位(至少在STM32F072上是这样)。所以我修改了我的程序,使它在页面清除后执行
CLEAR\u位(FLASH->CR,(FLASH\u CR\u PER))
,在编写一个单词后执行
CLEAR\u位(FLASH->CR,(FLASH\u CR\u PG))
。我想擦除一个页面,我叫FLASH\u pageErase(pageaddress),但擦除后我无法将代码刻录到ST中。它显示“内部命令错误”和“闪存下载失败”可能是什么问题?加载“abc\\abc.axf”错误:闪存下载失败-目标DLL已取消闪存加载在15:08:10完成加载“abc\\abc.axf”错误:闪存下载失败-目标DLL已取消闪存加载在15:08:18OMG完成。你救了我一天,一个不正确的和错误的!我的代码是|=!而不是|=~PER。该死非常感谢。