問題タブ [libopencm3]

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 投票する
1 に答える
9830 参照

c - stm32f4discoverでボタンの押下を検出するには?

ボタンの押下を検出して、ボード上の 4 つの LED を切り替えるのが好きです。

私がこれを持っている限り、ボタンのクリック検出は期待どおりに機能していません:

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

c++ - I2c 操作に演算子を使用する

STM32F2 コントローラと FRAM デバイス FM24V10-G が I2C 経由で接続されています。通常、I2C デバイスと通信するために、libopencm3 に基づくライブラリを使用します。ただし、FRAM を使用するには、I2C アクションの順序が少し異なります (送信開始、7 ビット アドレスなど)。これは、読み取りや書き込みなどの標準ライブラリ関数を使用できないことを意味し、他の I2C デバイスで役立ちました。このライブラリでは、I2C はクラスとして実装されており、これらの I2C コマンドを目的の順序で送信するためにオーバーロードされたストリーム オペレーターがあります。

例えば:

場合によっては、これらのコマンドの一部が実行に失敗し、CPU が何らかのフラグを待機して (Wait_End の場合など)、システム全体の機能が停止することがあります。

ここに私の質問があります: 上記のコードである種のタイムアウト フラグを返す方法はありますか? 私にとって、システムが常に機能していることは非常に重要です。I2C 操作が失敗してタイムアウトに達した場合は、1 つのコマンドをスキップするだけで問題ありません。

これを読んでいるすべての人に感謝します!

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

c - Makefile は複数の c ファイルでは機能しませんが、単一の c ファイルでは機能します

この makefile は、ARM マイクロコントローラ用の hex ファイルを作成するためのものです。私のmakefileは、フォルダーに保持されているすべてのcファイルを取得し、hexファイルを生成します。hex ファイル、.obj ファイルなどは bin フォルダーに配置されます。

フォルダー内に c ファイルが 1 つしかない場合、makefile は正常に動作します (つまり、hex ファイル、.obj ファイルなどを表示できます)。しかし、フォルダーに複数の c ファイルを配置すると、ビルドが失敗します。以下は、複数の c ファイルがある場合に発生するエラーです。

参照用にメイクファイルを添付しています。

複数の c ファイルで機能しない理由を教えてください。

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

c++ - C++ での関数への未定義参照

私は検索を行いましたが、私が見ているものを実際に説明した回答はありませんでした。

正しくコンパイルされたファイルがあり、新しいインクルードを追加しました。

もう一度コンパイルしてください。次に、関数を追加します。

今私は得る:

usart.h ファイルは次のとおりです。

行をコメントアウトするとvoid usart_set_baudrate(u32 usart, u32 baud);、追加の警告が表示されます。

したがって、少なくとも何らかの方法で機能を取得しているようです。C ++にはやや新しいので、他に何を試すことができるかわかりません。ポインタはありますか?

メイクファイル:

0 投票する
0 に答える
2403 参照

arm - STM32 USB OTG: Tx FIFO を適切にフラッシュするにはどうすればよいですか?

F4xx シリーズ チップの STM32 マニュアルには、アプリケーションがレジスタにTXFFLSHビットを書き込みOTG_FS_GRSTCTL、TxFIFO をフラッシュすると書かれています。注意として、アプリケーションは、コアが TxFIFO への書き込みも TxFIFO からの読み取りも行っていないことを確認した後にのみ、このビットを書き込む必要があることに言及しています。その手段として、NAK有効割り込みが設定されていることを確認し(これはレジスタのGINAKEFFビットを意味すると思いOTG_FS_GINTSTSます)、コアがFIFOを読み取っていないことを確認し、AHBIDL(AHBアイドル)ビットOTG_FS_GRSTCTLが設定されていることを確認しますFIFO に何も書き込まれていないことを保証します。STM自体が提供する(ひどい)USB OTGライブラリは、これらのチェックの両方を無視しますが、無料のlibopencm3ライブラリはAHBアイドルビットのみをチェックします。私の質問は次のとおりです。

  1. TXFFLSHマニュアルでは、上記のチェックを実行してビットを書き込む前に USB OTG コアを無効にすることは推奨されていません。これにより、チェックが実行されてからTXFFLSH.

  2. 「NAK 有効」ビットは、非周期エンドポイントの TxFIFO からデータが読み取られないことのみを保証します。これにより、コアが無効にされない限り、コアがアイソクロナス エンドポイントに FIFO を使用できるようになるのではないでしょうか?

これらが「つまらない」タイプの質問であることは承知していますが、私が取り組んでいるプロジェクトは非常に信頼性の高いハードウェアになるはずであり、顧客はデバイスを何年もチェックする余裕がないため、これらの微妙な点が重要です (はい、ウォッチドッグを有効にしています)などですが、ほとんどの場合、リセットせずにコアが動作する必要があります)。

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

eclipse - PX4 ソフトウェアのダウンロード エラー

Windows 7 32 ビット OS を使用しています。Eclipse、Java、minGW、GIT Bash をダウンロードしましたが、ファームウェアをダウンロードできません。ツールチェーンのインストールの手順では、px4 ツールチェーン -> px4 ソフトウェアのダウンロードに移動すると、ファームウェア、ブートローダー、libopencm3 の 3 つのディレクトリが C:/px4 に自動的にダウンロードされます。これは役に立ちません、私は初心者です。私は何をすべきか?

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

arm - libopencm3 を使用して STM32L0 で i2c プログラムを作成できますか?

STM32L0 (検出キット) で実行する非常に単純な i2c テスト プログラムを作成しようとしています。libopencm3-examples/examples/stm32/l0/stm32l0538-disco の miniblink プログラムを修正しました。

しかし、i2c ヘッダー ファイルだけをインクルードすると、次のようになります。

make を実行すると、次のエラーが表示されます。

このファイルを調査すると、他のモデルごとにルールが定義されているようですが、l0 にはルールが定義されていないようです。これはなぜですか? libopencm3 は STM32L0 シリーズで i2c をサポートしていませんか?

libopencm3/stm32/l1/i2c.h を見てみましたが、共通の i2c ライブラリをインポートするだけのようです。l1にi2cライブラリを使用する方法はありますか?

ありがとう

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

microcontroller - STM32L1のダイレクトメモリアクセスRX

私はしばらくの間、コンピューターからSTM32L100C-DISCOオーバー USART にデータのブロックを送信しようとしてきました。パフォーマンス上の理由から、これは DMA を使用して行われます。しかし、これまでのところ、私はそれを機能させることができませんでした。何が間違っているのかわからないので、ここで質問したいと思います。

私はlibopencm3を使用していますが、残念ながら、それ以外の優れた例のリポジトリにはSTM32L1xxx. ただし、一般的な DMA ヘッダー ファイルで使用可能な構成オプションに関しては、すべての基本をカバーしていることを確認しました。

当然のことながら、STM32L1xxx のリファレンス マニュアルを参照したところ、次の DMA1 の要求テーブルが記載されているため、使用する必要があるのはチャネル 6 であると確信しました。

DMA 要求テーブル

メモリと周辺機器 (つまり USART2) のサイズがよくわからなかったので、8 ビット、16 ビット、32 ビットのすべての組み合わせを変更しましたが、役に立ちませんでした。

難しい話は抜きにして; これは、私がやろうとしていることの最小限の動作 (まあ、動作していません..) の抜粋です。USART 自体は正常に動作するため、DMA 構成で何かを見落としているように感じます。

この時点で、何でも感謝されます。

このコードの背後にある考え方は、基本的に、バッファ内のデータが完全に置き換えられるまで永久にループし、置き換えられたら出力するというものです。ホストから、非常に認識しやすい 1 キロバイトのデータを送信していますが、返ってきたのは不正な形式のゴミだけです。それ何かを書いていますが、私が書こうとしているものではありません。

編集:これはメモリマップの写真です。USART2_BASEと評価される0x4000 4400ので、それも問題ないようです。

メモリマップ