Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> STM32はIAPを使用してユーザープログラムを更新します

STM32はIAPを使用してユーザープログラムを更新します

  
フルネームは "In-Application Programming"、中国語は "Programming in the program"として解釈されます。 IAPは、マイクロコントローラの外部インタフェース(USART、IIC、CAN、USB、イーサネットインタフェース、さらには無線RFチャネルなど)を通じてプログラムを実行しているマイクロコントローラの内部プログラムを更新するための手法です(これは完全にICPやISPテクノロジとは異なります。 ICP(インサーキットプログラミング)技術はインサーキットエミュレータを通してMCUをプログラムすることであり、一方ISP技術はMCUの内蔵ブートローダプログラムによって導かれるプログラミング技術である。 ICP技術であろうとISP技術であろうと、ダウンロード回線の接続やジャンパーキャップの設定などの機械的な操作が必要です。製品の回路基板が外層に封止されているとプログラムの更新が難しく、狭い場所など狭い場所に製品を設置すると災害となります。しかし、IAP技術を導入すれば、上述した厄介な状況を完全に回避することができ、長距離または無線データ伝送方式を使用したとしても、遠隔プログラミングおよび無線プログラミングを実現することができる。これは、ICPまたはISPテクノロジでは絶対に不可能です。マイクロコントローラがIAP技術をサポートするという最初の前提は、それが再プログラム可能なフラッシュに基づくマイクロコントローラでなければならないということです。 STM32マイクロコントローラにはプログラム可能なフラッシュメモリが内蔵されています。STM32は豊富な種類の周辺通信インタフェースを豊富に備えているため、STM32にIAPテクノロジを実装することは完全に可能です。

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の成功率を大幅に向上させることができます。

Copyright © Windowsの知識 All Rights Reserved