そのため、このマンドリガルの作業は、STMicroelectronicsが提供する通常のツールを使用した段階的な指示がほぼ完全に存在しないことに動機付けられました。
ネットワーク上にある非常に多くのブートローダーは、時には非常に忙しく、特定のクリスタルでは残念ながら「シャープ」になっています。
提案された資料には、CubeMXパッケージ、DfuSeDemo「ブートローダー」、およびDfuファイルマネージャーファームウェア準備ユーティリティの使用手順が含まれています。
環境を調理する...
DubeSeDemo + DfuファイルマネージャのダウンロードであるCubeMX自体が同じパッケージSTM32 ST-LINK Utilityに含まれている必要があります。STMicroelectronicsのWebサイトですべて無料で入手できます。
アンクルリャオのSTM32F103C8T6チップを使用した実験用スティック

そしてそこからST-Linkプログラマー。

ええ、お気に入りのIDE、この特定のプレゼンテーションではKEILを使用していますが、他のIDEのコンパイル設定はそれほど変わりません。
さあ行こう...
CubeMXを起動し、クリスタルを選択して......

ウィッシュリストを祝いましょう...

この特定のタスクでは、USBデバイス→デバイスFSをアクティブにし、それに応じてUSBデバイス→ファームウェアアップデートクラスをダウンロードし、忘れられないRCC→高速クロック→クリスタル/セラミックレゾネーターをオンボードにします。
次に、ブートローダーモードスイッチを選択する必要があります。この例では、既存のboot1ジャンパーを使用します。

小さなスキームを見て、それに合わせてboot1がPB2のレッグに接続されているため、GPIO_Inputモードで使用します。
完了し、[Clock Configuration]タブをアクティブにして、構成選択マシンを起動します。

「構成」タブにジャンプして......

GPIOボタンを選択して......

そして、フィールドで...

カスタムラベルを作成し、boot1にします。
次に、プロジェクトを設定します...

プロジェクト→設定を選択します...

選択して記入....

したがって、プロジェクトを生成するIDE Cub(この場合はMDK-ARM V5)を選択します。
この実施形態のコード生成タブは変更されないままになります...

さて、それですべて、プロジェクトの生成を開始しますプロジェクト→コードの生成

最後に、CubはIDEをすぐに起動するように促します...何をすべきか。


コンパイルとアセンブリを開始し、クリスタルにロードします... F7、F8 ...

最終結果...
ボードのピンを動作モードに切り替え、USBケーブルを接続して......


Windows→システム→デバイスマネージャー→USBコントローラーでコントロールパネルを開きます。 デバイスのリストを見ると、Windowsが少し音を立てて、STMデバイスをDFUモードドライバーにインストールします(まだインストールされていない場合)。
それで、ドライバーは立ち上がって決定し、「ブート」DfuSeDemoを実行します...

DFUデバイスをキャッチしたものを見て、[ターゲットの選択]フィールドをダブルクリックします...

アドレス0x0800C000までのフラッシュが書き込みのために閉じられていることを注意深く見て驚嘆し、このアドレスを書き込みます。
ちなみに、STM32F407VEで試してみました。0x08000000から記録用にメモリが開いています。つまり、最初からです。なぜ、このバージョンでは明確ではなく、掘り込まず、どこかに埋まっていますが、明らかに書かれていません。所有者なしで大きなピースが消えるからです...おそらく誰かがあなたに掘る場所を教えてくれるでしょう...
だから、「散髪が始まったばかり」...
必要なソースファイルは2つだけです...

IDEでそれらを開き、修正し、追加します...
USER CODE BEGINとUSER CODE ENDの間の挿入を再生成するとき、CubeMXは一緒にしないことを考慮します...そこで追加を入力します...
main.cから始めましょう
typedef void (*pFunction)(void); pFunction JumpToApplication; uint32_t JumpAddress; . . . uint32_t AddressMyApplicationBegin = 0x0800C000; uint32_t AddressMyApplicationEnd = 0x0800FBFC; . . . if(HAL_GPIO_ReadPin(boot1_GPIO_Port, boot1_Pin ) == GPIO_PIN_SET) { if (((*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD) & 0x2FFE0000) == 0x20000000) { JumpAddress = *(__IO uint32_t *) (USBD_DFU_APP_DEFAULT_ADD + 4); JumpToApplication = (pFunction) JumpAddress; __set_MSP(*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD); JumpToApplication(); } } MX_USB_DEVICE_Init(); . . .
それはすべてmain.cで...
usbd_conf.hに移動して
#define USBD_DFU_APP_DEFAULT_ADD 0x0800000
思い起こさせる...
#define USBD_DFU_APP_DEFAULT_ADD 0x080C000
usbd_dfu_it.cに渡します。ここではさらに....
. . . extern uint32_t AddressMyApplicationBegin; extern uint32_t AddressMyApplicationEnd; . . . #define FLASH_ERASE_TIME (uint16_t)50 #define FLASH_PROGRAM_TIME (uint16_t)50 . . . , «» … uint16_t MEM_If_Init_FS(void) { HAL_StatusTypeDef flash_ok = HAL_ERROR;
実際にはそれだけです...
プログラマーを接続し、ジャンパーをプログラミングモードにすると、F7、F8、およびボットローダーが記録されます...
使用できますか...
次に、bootloderを介してロードするためのアプリケーションを準備します...
お気に入りのアプリがLEDを点滅させ......
アプリケーションを準備およびデバッグし、コンパイラーおよびプログラム本体の個々の場所を変更して、プログラムの起動および割り込みベクトルのアドレスを変更します...
すなわち、KEIL→Configure→Flash Tools

プログラムの先頭のアドレスを変更して......

HEXファイルを生成すると言います

そして、ベクターテーブルのアドレスを変更して......
F7プログラムの収集...
Dfuファイルマネージャーユーティリティを使用して、受信したHEXをdfoファイルに変換します...

ボタンS19またはHEX ...でHEXファイルを選択し、Generateをクリックします...

dfuファイルを取得します。
実際、すべて準備ができています。
コントローラーへのロード...
ジャンパーをDFUモードに設定した後、実験ボードと既にロードされたボットローダーをUSBに接続します。

デバイスリストでDFUモードのSTMデバイスの外観を制御できます。
「ブートローダー」を実行します。

彼女に私たちのdfuファイルを教えてください...

アップグレードを押し、ロードの結果を観察します...自信のために、チェックを押します。

すべてが成功しています...あなたが実行することができます...
エラーが発生した場合、それはどこか側線を意味します...

たとえば...
したがって、すべてが成功したと仮定します...ジャンパーをアプリケーションモードに切り替えます

点滅ダイオードをお楽しみください...
...
うわ たくさんのbukoffff。 写真をコピーするのにうんざり:-)
ご清聴ありがとうございました...