問題タブ [stm32f4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
700 参照

c - CC3200 SPI スレーブ受信不良

解決済み: スレーブの CS/NSS ピンを処理する必要がありました。TX の前後に遅延を追加します。

私の問題は、SPI 経由で STM32F4 ボードから間違ったデータを受け取ることです。私の CC3200 ボード SPI スレーブ構成:

割り込み:

そして、SPIマスター用の私のSTM32F4ボード構成:

CC3200 から取得した結果は、マスター デバイスをリセットすると変化します。 受信データが間違っています。 6 を表示する必要があります。

どこが問題になる可能性がありますか?

0 投票する
1 に答える
2423 参照

c - window ウォッチドッグタイマー STM32F4

Edited DONE NOW ..コードを再構築しますが、これで完了してテストされました

x秒ごとに条件をチェックするタイマーを実装する必要があります..無限ループに入ったときにプログラムがリセットされないという問題に直面しています(システムが停止したかどうかなどのチェックのために離れています)...
これらのリンクは私を助けました.. マニュアル 74 ページからDM00031020.pdf/jcr:content/translations/en.DM00031020.pdf ..

そしてこのリンクhttp://www.programmershare.com/3518407/ よろしくお願いします

私は現在、このコードを持っています:

0 投票する
1 に答える
2272 参照

gcc - HAL_GetTick() クラッシュ MCU

nucleo-f446ZE(STM32F446ZET6) 用に STCubeMX を使用して簡単なプロジェクトを作成しました。

プロジェクトは USB デバイスの HID である必要がありますが、開始に失敗します。デバッガーをいじった後、MCU PC レジスターが 0x00000000 または 0xFFFFFFFF になるか、ランダムな無効な値になることがあることがわかりました。

私はコードを変更しませんでした。コードを MDK-ARM (変更された GCC、Vision IDE) と GCC (openSTM32) でコンパイルしたところ、同じことが起こりました。

コールスタック:

  • 主要
  • SystemClock_Config
  • HAL_RCC_ClockConfig (632)
  • Hal_GetTick

Ps: 0x080149A の後に RAM が破損したため、プログラムが奇妙なことを行う理由 Image デバッガ、アセンブリ

解決

CubeMX はクロックをうまくセットアップできませんでした。これが、USBを機能させるために使用したセットアップです。

0 投票する
3 に答える
4714 参照

linker - IAR EWARM 6.5 const 変数を特定のアドレスに格納するバグ?

stm32 にフラッシュ メモリの領域を保存して、独自の構成情報を保存したいと考えています。

これを行うには、フラッシュ メモリの 2 番目のセクターを STM32F2/STM32F4 (0x08004000-0x08007FFF に格納された 16kb) に保存します。

インターネットとstackoverflowをチェックすると、これを行う4つの方法があります

1)

#pragma location=0x08004000 __no_init const char ReservedArea[16*1024];

2)

__no_init const char ReservedArea[16*1024] @0x08004000;

3) セクションの作成 + #pragma location=

プロジェクト ICF:

place at address mem: 0x08004000 { readonly section ConfigSection };

cファイル:

#pragma location="ConfigSection" __no_init const char ReservedArea[16*1024];

4)

プロジェクト .icf ファイルでセクションを定義するIAR がカスタム データのメモリ領域を定義する

バグまたは問題が見つかりました

方法 1 ~ 3で問題ありません。リンカーには、変数用のスペース領域が含まれています。16 進エディタで生成された .bin ファイルを確認するか、デバッグして、変数が @ 0x08004000 であることを確認できます。

これらの方法で見つかった問題は、iar リンカが 0x08000800 ~ 0x08003FFF の間の 12k バイトを超える未使用のフラッシュ メモリを残すことです。これを確認する最善の方法は、var を削除してコンパイルし、bin ファイルのサイズをメモに書き込んでから、変数を追加することです。これを行うと、新しい bin ファイルのサイズが正確に 16kb でなければならないときに、16kb を超えていることがわかります。

アドレスを 0x08004000 から 0x0800C000 に変更せずに移動すると、ファイル サイズがさらに 32k バイト増加し、以前の領域はすべて 0x00 に設定され、bin ファイルでは使用されません。これは私たちのプロジェクトにとって大きな問題です。bin ファイルの残りの未使用領域を使用してファームウェアの更新を可能にするからです。

マップ ファイルを確認すると、予約ゾーンの前のエリアも未使用であることがわかります。

これを修正する方法をいくつか試しましたが、うまくいきませんでした。たとえば、アドレスで 2 つの変数を定義する、何時間もプレイする、リンカ オプションをチェックする、最適化する、他の #pragma オプションを使用するなどです。

4番目の方法については、変数をシステムに保存しますが、必要なアドレスを取得できません。おそらく問題は、両方の領域がアドレス空間を共有していたことです。

icf ファイル

cコード

それは私の問題ですか?バグですか?どんなヒントでも大歓迎です。

前もって感謝します。

0 投票する
1 に答える
702 参照

c - 入力文字列が 19 バイトを超えると、LwIP ソケット上の UDP サーバーがハード フォールトに陥る

NULLポインタ例外のせいだと思います。私の組み込みシステムは、STM32F4、FreeRTOS、および LwIP で構成されています。コアはSTの例から取られました。これは、単純な UDP サーバーのスレッドのコードです。

recvfrom()入力メッセージの長さが 19 バイトを超える場合、プログラム制御が関数から戻ることはありません。そして、行のファイルsys_arch_mbox_fetch(&conn->recvmbox, &buf, 0);内の関数内の関数から戻ることはありません。 この問題の解決にご協力ください。netconn_recv_data()api_lib.c371