Keil uVision MDK-Lite、STM32F072B-DiscoveryボードおよびフラッシュAPI


10

STMicroelectronics STM32F072B-Disco "Discovery"ボードでMDK-Liteバージョン5.23を使用していますが、Discoveryサンプルで提供されているFlashの例を使用しようとしています。

このボードとツールチェーンを他の例に使用し、SPIとGPIOの作業をコーディングしました。IDEはチャンピオンのように機能します。ただし、この特定のプロジェクトでは、コードをビルドして、リセットボタンをダウンロードして使用することで実行できます。HAL_FLASHEx_Erase()ルーチンを使用するとすぐに、プロジェクトでデバッガーを使用できません。そのルーチンを実行すると、IDEは「ターゲットにアクセスできません。デバッグセッションをシャットダウンしています」というダイアログをポップアップします。

コードのダウンロード後、リセットボタンを押してコードを実行すると機能するので、これはプログラミングエラーではないことがわかります。私はこれと同じデバッガをTIボードで使用しており、フラッシュをプログラムしてフラッシュルーチンを実行することもできました。フラッシュのコードが保存されている部分を消去していないと確信しているので、そうではありません。

main.cでこの行をまたぐと

if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)

その後、デバッグセッションをドロップします。代わりに同じ行にステップインしてから、フラッシュ消去ルーチンの各呼び出しをステップオーバーすると、それが機能し、最終的にルーチンからステップアウトし、残りのコードをデバッグできます。


確かではありませんが、CMSIS-DAPのUSB側の電源が再投入された可能性があります。そのボードには、外部デバッグコンポーネント用のかなり複雑な配電があります。ターゲットにアクセスできないのは、おそらくDAPへの(シリアルワイヤによる)接続が切断されていることを意味します。
Sean Houlihane 2017年

オンボードST-LINK / V2をデバッガーと呼んでいますか?
Bence Kaulics

コードイメージを共有できる場合、他の誰かが確認できる(そしてハードウェアの問題を除外できる)可能性があります。自分だけがM7ボードを持っている...
Sean Houlihane 2017年

stm32f072B-discoボードに組み込まれたデバッガー、Bence Kaulics。そのST-Linkデバッガであり、ST-LINK / V2であるKeil ULINK2デバッガではありません。Keil USB接続デバッガーの1つを持っていますが、リボンケーブルでボードに接続しています。リボンケーブルコネクタではなく、ボードのミニUSB ST-Linkコネクタを使用しています。ボードは、独立した電源ではなく、ミニUSBコネクタから電力を供給します。
netskink 2017年

1
コードサンプルについて。サンプルは、STMicroのDiscovery Repotから提供されます。STリポでのプロジェクトのパスは、Projects / STM32F072B-Discovery / Examples / FLASH / FLASH_EraseProgramです。そのディレクトリでMDK-ARMプロジェクトを使用しています。それはHAL_FLASHEx_Erase()はライン108上の失敗
netskink

回答:


7

私の推測では、これはあるレベルで関連する電源です。外部電源、または電源レールのオンボードスイッチング。

シナリオを明確にするために、ハードウェアリセット後にデバッグは正常に機能しますが、ターゲットがフラッシュのブロックを消去すると、デバッグ接続が切断されますか?

デバッグでは、コードが正しく実行されているかどうかは考慮されません。ロックアップ状態になっていても、デバッグの停止は機能します。デバッグをロックアウトするCPU側の唯一のものは、デッドロックされたAHBアクセスです。これは、STM32F7とオンボードUSB-SWDインターフェースチップの間のSWDインターフェース(STM32でもあると思います)に問題があることを意味します。このデバイスには、オンボードの電源レールスイッチングがいくつかあり、ボードを初めて使用したときに混乱しました。

フラッシュ消去はデバイスの現在のドレインを増加させることに注意する価値があります-外部PSUはその仕事に対応していますか?代替を使用できますか?

編集:問題のコードをステップオーバーするとデバッガーがクラッシュするが、シングルステップではクラッシュしないというフィードバックに基づいて、問題はこの質問に関連していると思います。

ステップオーバーは、ブレークポイント(および停止状態のポーリング)を使用して実装されますが、シングルステップはハードウェアでサポートされています。これは、デバッガーが混乱しているように見える理由をまだ説明していませんが、フラッシュコントローラーがアクティブなときにデバッガーが(フラッシュから)コードにアクセスしようとしている可能性はあります。

これらの観察に基づいて、消去にブレークポイントを設定し、このシナリオがトリガーされないようにすることをお勧めします。


正解ですが、正常に機能しますが、ブロックを消去すると、デバッガへのUSB接続が切断されます。電源が入っていないUSBハブを使用していたので、これは論理的に思えました。ただし、コンピュータに直接接続し、別のハブを使用しても同じ結果になります。
netskink 2017年

フラッシュアクセスの実行中にコードを実行している場合は、しばらくの間AHBをデッドロックします。このシナリオでの足踏みの画像処理は面倒かもしれません。stackoverflow.com/questions/3445598にはさらに多くの機能があります。
Sean Houlihane 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.