IAPテクノロジの実装の中核は、マイクロコントローラ内にあらかじめプログラムされたIAPプログラムです。このプログラムは、主に外部のホストコンピュータソフトウェアとのハンドシェイク同期を担当し、次に周辺通信インタフェースを介してホストコンピュータソフトウェアからプログラムデータを受信し、それをマイクロコントローラで指定されたフラッシュ領域に書き込み、次にジャンプして新しい書き込みを実行します。プログラムは最終的にプログラムの更新という目標に到達します。
STM32マイクロコントローラにIAPプログラムを実装する前に、まずSTM32の内部フラッシュ構成とそのブートプロセスを確認する必要があります。 STM32の内部フラッシュアドレスは0x8000000から始まり、通常、プログラムファイルはこのアドレスから書き込まれます。また、STM32はCortex-M3コアを搭載したマイクロコントローラで、内部で「割り込みベクタテーブル」を介して割り込みに応答し、プログラム起動後、まず「割り込みベクタテーブル」から割り込みベクタをリセットします。プログラムは終了しました。この「割り込みベクトルテーブル」の開始アドレスは0x8000004であり、割り込みが来ると、STM32の内部ハードウェア機構は自動的にPCポインタを「割り込みベクトルテーブル」に配置し、割り込みソースに従って対応するソースを取る。割り込みベクタは割り込みサービスルーチンを実行します。 STM32プロジェクトのリンクスクリプトを変更することによって、フラッシュに書き込まれるプログラムファイルの開始アドレスを変更することができます。
STM32マイクロコントローラでのIAPソリューションの実装では、データを受信する従来のシリアルポート、フラッシュデータの書き込み、およびその他の従来の操作に加えて、STM32の起動プロセスと割り込み応答モードにも注意を払う必要があります。図1はSTM32の通常の実行フローを示しています。
図1
図1の解釈は次のとおりです。
1. STM32のリセット後、リセット割り込みベクタのアドレスがアドレス0x8000004からフェッチされ、リセット割り込みサービスルーチンが実行されます。図1の(1)に示すように、No。
2.リセット割り込みサービス・ルーチンの実行の最終結果は、図1のラベル(2)に示すように、Cプログラムのメイン関数にジャンプすることです。メイン関数は無限ループになるはずです。関数が戻りました。
3. main関数の実行中に割り込み要求が発生すると、STM32のハードウェアメカニズムにより、図1のラベル(3)に示すように、PCポインタが割り込みベクタテーブルに戻されます。 。
4.割り込みソースに従って、図1のラベル(5)に示すように、対応する割り込みサービスプログラムを入力します。
5.割り込みサービスプログラムが実行されると、図1のラベル(6)に示すように、プログラムは再びメイン関数に戻ります。 IAPプログラムをSTM32に追加すると、状況は図2のようになります。
図2
図2の解釈は次のとおりです。
1、STM32リセット後、リセット割り込みベクタのアドレスがアドレス0x8000004からフェッチされ、リセット割り込みサービスルーチンが実行されます。次に、図2のラベル(1)および(2)で示されているように、IAPプログラムのメイン機能にジャンプします。このプロセスは、図1の対応する部分と一致しています。
2、IAPプロセスの完了後(図2の灰色の四角で囲まれたSTM32内に新しいプログラムが書き込まれ、アドレスは0x8000004 + N + Mで始まります)、新しい書き込みにジャンプします。プログラムのリセットベクタテーブルを入力し、新しいプログラムのリセット割り込みベクタのアドレスを取得し、新しいプログラムのリセット割り込みサービスルーチンを実行するようにジャンプし、次に新しいプログラムのメイン機能にジャンプすると、プロセスは図2のラベル(3)のようになります。見せる。新しいプログラムの主な機能には、決して戻ってこないという特性もあります。同時に、2つの割り込みベクタテーブルがSTM32の内部メモリ空間の異なる場所にあることに注意してください。
3.新しいプログラムの主な機能を実行する過程で、割り込み要求が発生し、PCポインタは、図2に示すように、新しいプログラムの割り込みベクタテーブルではなく、アドレス0x8000004の割り込みベクタテーブルに回転します。記号(5)が示されている。これはSTM32のハードウェアメカニズムによって決定されることに注意してください。
4.割り込み要因に従って、図2のラベル(6)に示すように、対応する割り込みサービスにジャンプします。これは、新しいプログラムの割り込みサービスルーチンへのジャンプです。
5.割り込みサービスが実行されたら、main関数に戻ります。これは図2の参照番号(8)によって示される。
上記2つのプロセスを分析すると、IAPプロセスを使用して作成するプログラムは2つの要件を満たしている必要があります。
1、新しいプログラムはIAPプログラムからのものでなければなりません。オフセットxのアドレスが開始します。
2、それに応じて新しいプログラムの割り込みベクタテーブルを移動する必要があり、移動のオフセットはx;
になり、プログラムの開始位置が設定されます。 「Page」欄の「Option」、「IROM」、「Start」の「Option」欄の「Option」欄にある(keil uvision4統合開発環境)の方法で、プログラムが起動する場所に変更されます。図3に示すように、プログラムの開始位置は0x8002000に設定されています。
図3
割り込みベクタテーブルを移動する方法は、プログラムに関数を追加することです。
void NVIC_SetVectorTable(u32 NVIC_VectTab、u32 Offset);
ここで、パラメータNVIC_VectTabは、割り込みベクタテーブルの先頭です。位置、およびパラメータOffsetアドレスオフセットオフセットベクタテーブルが0x8002000に移動された場合、関数は次のように呼び出される必要があります。
void NVIC_SetVectorTable(0x8000000、0x2000);
また、読者に注意を促す必要があります。はい、この関数はフラッシュメモリ内の割り込みベクタテーブルの物理的な位置を実質的に変更することなく、STM32プログラム内の割り込みベクタを格納するために使用される構造体変数を変更するだけです。
上記の準備で、次のようにIAPソリューションの設計を開始できます。
1. STM32をリセットした後、1つのボタンを使用してステータスを同期させると、そのボタンが実行されます。 IAPプロセス;
2、IAPプロセスは、ホストコンピュータソフトウェアを介してSTM32 USART1デバイスに更新するプログラムファイルを送信し、STM32はデータを受信してから0x8002000アドレスから受信したデータを書き込みます。 Br> 3、STM32はタイマーを使用してデータが完全に受信されたかどうかを判断し、受信完了後にIAPプロセスは終了します。
4.リセット後、ジャンプ0x8002004アドレスは新しく書き込まれたプログラムの実行を開始します。 Br>
最後に注意すべき点が2つあります。
1、IAPによって作成されたプログラムファイルは、.bin形式のファイルであることが望ましいのですが、.hex形式のファイルではありません。
2、フラッシュへのSTM32の書き込み速度は通信周辺機器のインタフェースの速度に追いつくことができないことが多いので、STM32にプログラムファイルをできるだけ遅く送信する;
3、それはSTM32とホストコンピュータ間の設計を設計することを推奨する。ハンドシェイクメカニズムとエラー管理メカニズムのセット。IAPの成功率を大幅に向上させることができます。
Technologeeko Windows 7エクスプローラの左上隅にあるアイコン、[お気に入り]、[デスクトップ]、およびさまざまな[ライブラリ]のアイコンにより、多くの人が非常に不快になります。
この記事には新しい概念はなく、コマンドラインツールを使用して以前に行ったことを繰り返すだけで、前提条件はありません。プロセスは、我々は以前の記事を議論しました。 ステップ1:ストレージプールの設定
の比較のメリットは、オープンソースのLinuxシステムは、デスクトップまたはサーバ企業内の個々の態様は、非常に有望な結果があるかどうか、酔わせると言うことができます。デスクトップの個人的な側面は、Li
をインストールするよう求められるわけではありません。Linuxをインストールするのは初心者にとってはちょっと怖いです。著者はかつてインターネット上のチュートリアルに従ってそれを数回インストールしました
#ifconfigコマンド-a /*非アクティブ* / eth1のリンクENCAPを含め、すべてのネットワークアダプタを確認します:イーサネットのHWaddr IP-
Linuxワンクリックインストールlnmp環境Raiders
サーバーとしてLinux /Unixを使用する利点は何ですか?
10収集システムおよびハードウェア情報コマンドのチュートリアルの下でのLinux
PHP install imagickエクステンションチュートリアル
Centos設定フォルダオープンモード:同じウィンドウ centosシステムのデフォルトの動作でフォルダ