マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 13.2.2. フラッシュの消去

Up: 13.2. 書き換えの基本的手順

Next: 13.3. サンプルプログラム(メッセージの記録)


マイコン徹底入門:周辺回路編:STM32のペリフェラルを活用: 13. フラッシュメモリプログラミング: 13.2. 書き換えの基本的手順:

13.2.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. サンプルプログラム(メッセージの記録)


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。
_Toc266801166