7

そのため、消去した直後に内部フラッシュメモリに書き込むことはできません。書き込み操作の前に消去操作がない場合は、できます。理由についてのアイデアはありますか?

プログラミング関数は「成功した書き込み」値を返しますが、メモリを参照するとデータが書き込まれません。コードは次のとおりです。

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

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

消去とプログラミングの間にメモリをロックしようとしましたが、これらの操作の間に遅延が生じましたが、役に立ちません。

4

2 に答える 2

12

問題は、FLASH_PageErase() が呼び出されたときに設定される FLASH->CR レジスタの PER ビットが最後にクリアされないことでした。フラッシュがまだロック解除されている間にこのビットをクリアすると、その後フラッシュで他の操作を実行できます。

STM のドキュメントには、これについては何も書かれていません。

于 2015-02-13T14:39:49.893 に答える