STM32&ST-LINK - プログラミング成功後にMCUに接続できない

私はSTM32F7-45VGT6で私自身のボードを作りました。私はST-LINK v2(それはオリジナルのものではありません)でうまくプログラムしました、そして今私はMCUとさえ接続することができません。

STとSWDインターフェースからST-Linkユーティリティを使用しています。 SWDピンを出力として使用し、コードでそれらをGPIO出力として設定する場合があります。それは可能ですか?

それにもかかわらず、リセットピンをGNDに接続し、ST-Linkユーティリティで[Connect under reset]オプションを設定しましたが、うまくいきません...どうすればよいですか。

インターネット上で、私はBOOT0ピンを使用することについて何かを見つけました、しかし私は正確に知りません...

7
「SWDピンを出力として使用するケースもあり得ます」というのは可能ですが、故意ではないファームウェアの破損ロードを意味しない限り、知っているのはあなただけです。エラー、それは確かに起こります。通常、これはハードウェアリセットがアサートされた状態で初期のSWD接続を手動または自動で実行することで回復できます。 SWDピンをI/Oとして使用する場合、その設定を行う前に2、3秒遅らせることで開発が容易になる可能性がありますが、それでもデバッガを使用できないことを理解してください。
追加された 著者 Andrew Walker,

7 答え

私はなんとかその問題を解決することができた。誰かが同様の問題に遭遇した場合、これが私がしたことです:

I used ST-Link v2 and ST-Link Utility. In setting, I set "Connect under reset" and SWD interface (I'm not sure about frequency).
Then I press the reset button on my board and clicked "Target" -> "Erase chip" and just after clicking I released the button - It erased the chip so I can now reprogram my MCU.


とにかく、SWDピンを出力として使用する必要がある場合は、プログラムの先頭に遅延を追加するか、ジャンパを使用してこれらのピンを出力として設定を有効または無効にします。

11
追加された
はい、SWDピンを別の目的に使用する場合、それは予想されることです。意図的にそうしていないSTM32設計でも、SWDピンが応答しないモード(プログラムが破損している場合)で「動けなくなる」ことがあり、回復のためにそのような処理が必要になる場合があります。
追加された 著者 Andrew Walker,
Linuxでは、このbashコマンドを使ってチップを消去しました。st-flash erase
追加された 著者 Tim Raveling,

リセット状態で接続するには、ST-Linkがリセットピンを制御する必要があります。ST-Linkをアースに接続した場合、ST-Linkはターゲットを実行してアクセスする機会がありません。


起動中にBOOT0ピンをハイに引き上げると、MCUは内部ブートローダで起動し、いくつかのシリアルプロトコルを使用してアクセスすることができます(詳細についてはリファレンスマニュアルを参照)。

ブートローダの中では、SWDピンがアクセス可能になっているはずですが、これについては100%確信できません。

ST Flash Loader Demonstrator は、消去/プログラムを可能にするツールです。 UARTインターフェースを使用したマイクロあなたがあなたのマイクロのUARTのどれにもアクセスできない場合、この解決策はあなたのために働かないでしょう。

4
追加された
OPの経験が示すように、SWDポッドがリセットを制御する必要があることは厳密には正しくありません。手動でリセットを操作しながらリカバリを実行できます。あなたが接続とフラッシュを消去しようとする試みの間に一時停止することができるソフトウェアを持っているならば、それは役に立ちます。ストックウィンドウズツールがこれを行い、そしてどこかに私はそれを達成するオープンソースのもののハックアップバージョンを持っています。
追加された 著者 Andrew Walker,
@ zupazt3失礼に聞こえるわけではありませんが、最初の文をもう一度読んでください。リセット中の接続に関する問題への回答が含まれています。あなたがそれを理解していない場合は、より具体的なコメントを投稿してください。
追加された 著者 Arsenal,
あなたの質問からは明らかではありませんでした。ターゲットが出力に切り替わる前に接続が確立される可能性があるため、SWDクロックを増やすと効果的です。しかし、誤ってSWDピンを出力に設定したため、ターゲットに接続できず、BOOT0のみを使用して復旧できました。直接(抵抗なしで)アースに接続した場合タフ。
追加された 著者 Arsenal,
@ zupazt3あなたにとっては良いことですが、他の人が解決策としてもっと簡単に見つけられるように、それを答えとして投稿することもできます。
追加された 著者 Arsenal,
私はブートローダによってサポートされているUSART3にアクセスすることができます、それで私は後でそれを試みます - それはトリッキーになるでしょう、cos BOOT0はPCBのGNDに結び付けられます...しかし、私は何が悪いのか知りたいです。私は何が間違っていますか?私のmain()関数でSWD/JTAGピンを出力として設定しました。しかしマニュアルでは、リセット中はすべてのピンにデフォルト機能があり、すぐに使用できると記載されています。それでは、リセット中にフラッシュを消去できないのはなぜですか?私はU-LINK 2プログラマーとuVision 5もテストしました。保護レベルが何も設定されていないことを願います。そのようなビットを設定しませんでしたが、保護ビットが問題ないかどうかをテストする方法はありますか?
追加された 著者 Amedee Van Gasse,
しかし、私はいつもそれを結び付けているわけではありません:)最初の投稿で、それが役立つかどうかをチェックするためにEVENを直接GNDに接続したことを意味します。しかし、通常、NRSTをGNDに接続するのではなく、プログラマに接続するので、リセットを制御できます。それでもまだ接続できません。私はまたU-Link 2とKeil uVision 5を使おうとしましたが、同じ結果になりました。その理由は何ですか?
追加された 著者 Amedee Van Gasse,
私はついにチップを消すことができた! ST-Linkユーティリティで - リセットボタンを押し、「完全消去」とリリースボタンをクリックしましたが、どういうわけか自分自身を消去しました。私は前にそれを試したが、今だけそれが働いた。
追加された 著者 Amedee Van Gasse,

ブートピン(一部のバージョンのビット)はデバッガの起動を妨げる可能性があります。起動時にブートパターン(boot0ピンとboot1ピンに特定のバイナリパターン)を実装しないでください。そうしないと、MCUがブート状態になります。

1
追加された
それについてよろしいですか?リセットの操作で上書きできないような方法でSWDを無効にする組み合わせはどれでしょうか。
追加された 著者 Andrew Walker,
boot0ピンをGNDに接続したのですが…何を書いたのかよくわかりません。なぜなら、私が言ったように、フラッシュのプログラミングに成功し、プログラムはMCU上で実行されるからです - SWDインターフェースを介したリンク。リセット中はブートを実行してはならず、ピンはデフォルトの状態になっているはずなので、なぜ接続されないのかわかりません。
追加された 著者 Amedee Van Gasse,

stmcubemxを使用している場合、umをstmcube pinoutタブで設定する必要があります。ピン配置タブで、SYSをクリックし、デバッグオプションをシリアルワイヤに変更します。それは私の問題、そして多分あなたの問題も解決します。

1
追加された
それは問題になるかもしれませんが、SWDピンをSWDモードのパワーオンデフォルトのままにしておくことがこのソフトウェアスイートのデフォルト設定でない場合、それは間違いなくバグ報告と修正を必要とするかなり深刻なユーザビリティ欠陥です。設定を元の値から変更しなかったのか、それともそれらのピンをデフォルト以外の方法で使用する必要がある特定のプロジェクトから始めたのかを確認してください。
追加された 著者 Andrew Walker,

MCUを再プログラムするには、リセットボタンを押したままST-Linkユーティリティでデバイスに接続を選択するか、IDEでダウンロードを押して(たとえばKeil)、リセットボタンを離します。

0
追加された

ディリが言ったように:

stmcubemxを使用している場合は、[stmcube pinout]タブでシリアルワイヤを設定する必要があります。ピン配置タブで、SYSをクリックし、デバッグオプションをシリアルワイヤに変更します。それは私の問題、そしてあなたの問題も解決するでしょう。

STM32CubeMxはデフォルトでデバッグポートを設定しないため、コードをフラッシュするとST-Linkは機能しなくなります。 例えばST-link Utilityを使ってチップを消去する必要があります。 MCUと接続するには、起動時にBOOT0 ピンをHighに引き上げてブートローダを起動しなければなりませんでした。次に、 Tarjetメニューチップの消去に進みます。

0
追加された

私は自分のSTM32F427ボードにいくつかのコードをダウンロードしました。そうすると、ST-LINK Utilityを使ってボードに接続できなくなります。私は自分のコードがデバッグポートのピン設定をめちゃくちゃにしていると思います(?確認できません)。私がしたことは、接続してボードを再プログラムするために次のことです。

  1. ST-LINKユーティリティを開き、[ターゲット]メニューの[接続]をクリックします。
  2. ボードに電力を供給し(私の場合はUSBケーブルを使用します)、同じ時にをクリックします。 ST-LINKユーティリティから「接続」します。

私はこのトリックで2枚のボードを元に戻しました。お役に立てれば。 - ボブ

0
追加された