0

次のように、STM32F103RB のフラッシュで 1 ページを消去しようとしています。

FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR | FLASH_FLAG_OPTERR);
FLASHStatus = FLASH_ErasePage(Page);

ただし、FLASH_ErasePage は FLASH_ERROR_WRP の生成に失敗します

stm32-linker ツールで書き込み保護を手動で有効または無効にしても、問題は解決しません。

4

3 に答える 3

0

あなたのページのアドレスは何ですか? どのアドレスにアクセスしようとしていますか? たとえば、この例は STM32F100C8 でデータの消去だけでなく書き込みも正しくテストされています。 http://www.ozturkibrahim.com/TR/eeprom-emulation-on-stm32/

于 2014-04-04T16:52:33.783 に答える
0

基本的に FLASH_ErasePage は、ステータス レジスタに以前の WRP エラーがある場合、何もしようとせずに WRP エラーで失敗します。

FLASH_ClearFlag 呼び出しになると、少なくとも FLASH_FLAG_BSY は assert_param(IS_FLASH_CLEAR_FLAG(FLASH_FLAG)); を引き起こします。失敗します(ただし、この場合に何が起こるかはよくわかりません)。

#define IS_FLASH_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFC0FD) == 0x00000000) && ((FLAG) != 0x00000000))
于 2014-04-02T08:47:04.783 に答える