2017-01-24 8 views
0

私はデータを保存するためにフラッシュを使用していますが、Flashの消去時に何らかのエラーが発生します。Stm32F103C8T8 - フラッシュを消去するとエラーが発生する

ありがとうございました!私の居場所の英語に申し訳ありません

自分のプログラムサイズ:30,46 kbyte。その最高のアイデアではありません(フラッシュの開始は、後の64kBを開始する)が存在しないページを消去しようとしている、

#define FLASH_PAGE_ADDR 0x08010000 

uint16_t Mydata = 2345; 

void WriteData(void) 
{ 
    FLASH_Unlock(); 
    FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR\ 
    |FLASH_FLAG_WRPRTERR); 
    FLASH_ErasePage(FLASH_PAGE_ADDR); 
    FLASH_ProgramHalfWord(FLASH_PAGE_ADDR+2, Mydata); 
} 

答えて

1

あなたチップは、フラッシュメモリの64kBのを持っています

は、ここに私の関数です。それをやろうとすると、割り込みベクトルと実行中のアプリケーションの一部を削除して、フラッシュを消去することもできます。

+0

ありがとう、私は –

-1

デバイスstm32F103C8T8には64Kbのフラッシュが含まれています。

 Ordering information scheme

とメモリレイアウトは次のようになります。お使いのデバイスの

Memory map

あなたは64KBのバリアントを得たのでフラッシュメモリは、実際に0x08000000-0x0800FFFFになります。このメモリは、フラッシュメモリの最初のページ(別名セクタ)です。お使いのデバイスのサイズが1Kbの64ページがあります。フルページのみを消去できます。フラッシュモジュール組織の写真の下を参照してください:

flash module organization

あなたの例では、あなたが0x08010000から消去を開始するためにデバイスを教えてください。上記の情報では、これはもちろん不可能です(この場所にメモリがないため)。もちろん、消去時にあなたはそれ以来、その非常にスポットから実行されていないことを確認してください

#define FLASH_PAGE_4_ADDR 0x08001000 

:私はそれが有効なページを(ページの先頭に見つめて)対象となるように、あなたが場所を変更示唆しますあなたのプログラムはクラッシュします。

また、消去する関数の戻り値を調べることを検討してください。彼らはあなたに何か重要なことを伝えることができた

+0

を参照してくださいこのチップには実際には1〜64個のページがあります。また、フラッシュの初めを消すためのアドバイスは本当に素晴らしいです。すぐにプログラムをクラッシュさせたいのであれば、良いアイデアです。 –

+0

ありがとうございました!私はフラッシュサイズ= 64キロバイトに気付かない –

+0

私はそのエラーをいつか持っているので、FLASH_PAGE_ADDRにスペースがないとwritedata機能が正しく動作するのですか?なぜエラーが起こるのではない –

関連する問題