Previous: 13.2.2. フラッシュの消去 |
Up: 13.2. 書き換えの基本的手順 |
Next: 13.3. サンプルプログラム(メッセージの記録) |
消去が完了したら書き込みです。書き込みにはFLASH_ProgramWord関数(ライブラリ 20?4)を使用します。
ライブラリ 20?4 FLASH_ProgramWord関数
関数プロトタイプ |
FLASH_Status FLASH_ProgramWord (uint32_t Address, uint32_t Data ) |
|
動作 |
指定したアドレスに書き込みを行います。 |
|
引数 |
Address |
書き込み対象アドレスを指定します。アドレスの指定ですが、ポインタではなく通常の数値で値を渡します。 |
Data |
書き込み内容を指定します。ワード単位(4バイト)です。 |
|
戻り値 |
処理結果を列挙型FLASH_Statusの列挙子で返します。 |
サンプルプログラムでは、以下のようにして、開始アドレスから終了アドレスまで、一定の値(変数Data:0x01234567)を書き込んでいます。
while((Address < EndAddress) && (FLASHStatus == FLASH_COMPLETE)) ? { ??? FLASHStatus = FLASH_ProgramWord(Address, Data); ??? Address = Address + 4; ??? cprintf(“.”); ? } |
これで書き込みは完了です。サンプルプログラムでは以下のようにして実際に書き込んだデータが書き込んだとおりに読み出せるかチェックしています。if文での条件指定は、組み込み系のC言語プログラミングでよく見かける書き方です。ここでは「変数Addressの値をuint32_t型の変数を格納するためのポインタとしてキャストする。キャスト後、ポインタが指定するメモリの中身を参照する。」という意味です。特定のメモリアドレスの中身を直接参照したいときにこのように記載すると、簡単に中身をチェックできます。
while((Address < EndAddress) && (MemoryProgramStatus != FAILED)) ? { ??? if((*(__IO uint32_t*) Address) != Data) ??? { ????? MemoryProgramStatus = FAILED; ????? cprintf("Written memory does not match expected data.\r\n"); ????? while(1){} ??? } ??? Address += 4; ??? cprintf("."); ? } |
Previous: 13.2.2. フラッシュの消去 |
Up: 13.2. 書き換えの基本的手順 |
Next: 13.3. サンプルプログラム(メッセージの記録) |