問題タブ [stm32f0]
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.
stm32 - CubeMX を使用する場合、PlatformIO で STM32 の NVIC を定義するファイルはどこにありますか?
私は最近、次のワークフローを使用して、STM32 の開発に PlatformIO を使用するように切り替えました。
- CubeMX ユーティリティを使用して .ioc ファイルを作成する
stm32pio
コマンド ライン ユーティリティを使用して、その .ioc ファイルからソース コードと PlatformIO 構成を生成します。- VSCode 用の PlatformIO プラグインを使用した編集、ビルド、およびデバッグ (Mac)
全体として、これは非常にうまく機能します。ただし、以前はSTのCubeMX IDEでCubeMXコード生成を使用していました.sファイルをソースディレクトリに配置し、(私が理解しているように)NVICを定義し、例外/割り込みに使用されるデフォルト関数を定義しました。明示的に定義されていません (つまり、デフォルトの弱い実装によって処理されるものです)。これが新しいワークフローのどこで定義されているかわかりません。これはビルド プロセスの一部として動的に生成されますか?
私が尋ねている理由は、(プロセス全体をよりよく理解したいという以外に)、EXTI0 の割り込みハンドラーを書きたいのですが、それをソフトウェア割り込みとしてトリガーし、それにピンを割り当てないようにしたいからです。それが不可能な場合、おそらく要点全体が議論の余地があります。
embedded - stm32 でシフト レジスタを設計する最良の方法は何ですか?
私は 40MHz で動作する STM32F031K6 を使用しており、ルーピング シフト レジスタとして機能するプログラムを設計したいと考えています。外部トリガを使用してクロックを供給し、シフト レジスタの値は立ち上がり/立ち下がりエッジが発生するたびに左にシフトします。受け取った。出力は、ハイまたはローのいずれかの 1 つのピンです。
クロッキング エッジと出力の間の時間を 0.5uS 未満にするか、できるだけ早く失敗する必要があります。シフト レジスタの値は変更でき、長さも変更できますが、今のところ 11000010 のようなバイトから始めています。
私は当初、これを外部割り込みで実装することを考えていましたが、それを実装するためのより良い方法があるかもしれないことが示唆されました
どんな助けでも大歓迎です
embedded - レジスタに直接書き込むことによる ADC の正しい使用
CubeIDE を使用して、STM32F031K6 で HAL (セットアップを除く) を使用せずに ADC を使用しようとしています。ADCを不連続モードで使用しています-私が知る限り、イベントのシーケンスは
- ADC がセットアップされ、ADEN で有効化されます
- ADSTART を設定して ADC の変換を開始する
- EOC フラグをチェックして、変換がいつ終了したかを確認します
- DR レジスタからデータが読み出されると、EOC フラグがクリアされます。
ここで私は混乱しています-その後、ADSTARTを再度設定する必要がありますか? 連続モードでは、リファレンスマニュアルは次の変換が自動的に行われることを示しているようですが、不連続モードでは、次の変換を手動で開始する必要があると述べています-これはADSTARTによって行われると思いますか? シミュレーションでは、これはうまくいかないようです。データシートには、ADSTART はソフトウェアによって設定されると書かれていますが、これは直接書き込めないということですか?
私のコードは次のとおりです。ステップバイステップでクリックすると正しく動作しないようです。実行を設定すると、ボード上のポットを変更すると ADC1_data 変数が変化するのがわかりますが、断続的に動作し、 0 と正しい値
HALのセットアップは
プログラム内のコードは読み取ります
私が間違いを犯しているかどうかを誰かが確認できますか? どんな助けでも大歓迎です
touch - STM32 TSC Slider_3 Ch_Capacitive Touch_STM32F072 Discovery_ 0 ~ 255 の範囲での位置の分解能と計算
静電容量式タッチ/TSC ライブラリ ベースのアプリケーションを理解するために、STM32F072B-Disco 評価ボード用の AN5105 に記載されているポーリング ベースのサンプル コードを調べてきました。コードを微調整してアプリケーション用にカスタマイズした後、ST からのさまざまなアプリケーション ノートを確認しても、理解できず、説明が見つからないいくつかの質問があります。TSC の概念を明確にするために、皆様からのご意見をお待ちしております。
- 0 ~ 255 の範囲のスライダー上のタッチ位置の解像度と計算:
TSC が提供するヘッダー ファイル tsl_conf.h には、次のパラメーターがあります。
#define TSLPRM_LINROT_RESOLUTION (7)
// ビット数での位置分解能 (範囲 = 1..8)
#define TSLPRM_USE_3CH_LIN_H (1)
//ハーフエンドの電極設計
MyLinRots[0].p_Data->Position 構造体を使用して、0...255 の範囲の位置値を比較していますが、値とスライダー/チャンネルのタッチ位置の相関関係がわかりません。解像度の値 1..8 はこの計算にどのように影響しますか? スライダーに触れたチャンネルに基づいて位置の値を計算するための解像度パラメーターに基づく式はありますか?
AN5105 に記載されているサンプル コードでは、次のコードを使用して 0 ~ 255 の範囲で 4 つの LED をスライダー全体に均等に分散させようとしていますが、比較に使用される値の計算を理解できません。 MyLinRots[0].p_Data->Position 構造体:
{
}
else //if(MyLinRots[0].p_Data->StateId == TSL_STATEID_RELEASE)
{
}
別の例では、同じ STM32F072B-Disco ボードのタッチ チャネルを 3 つの個別のタッチ キーとして再構成しました。tsl_conf.h ヘッダー ファイルの TSLPRM_TKEY_Detect_IN_TH および TSLPRM_TKEY_Detect_OUT_TH パラメータをデフォルトの 110 & 120 のままにしておくと、プロジェクトはエラーなしでコンパイルされます。
// TouchKeys Detect 状態入力しきい値 (範囲 = 0..255)
#定義 TSLPRM_TKEY_DETECT_IN_TH (110)
// TouchKeys Detect 状態出力しきい値 (範囲 = 0..255)
#定義 TSLPRM_TKEY_DETECT_OUT_TH (120)
これらのパラメーター値では、チャンネルを強く押す必要があり、多くの場合、タッチを検出するのが非常に困難だったので、検出しきい値を 50 の低い値に再構成しました。
この変更により、次のようなコンパイル エラーが発生します。
ユーザーコードは次のとおりです。
//プライベートマクロ #define TEST_TKEY(NB) ((MyTKeys[(NB)].p_Data->StateId == TSL_STATEID_DETECT) || (MyTKeys[(NB)].p_Data->StateId == TSL_STATEID_DEB_RELEASE_DETECT) || (MyTKeys[ (NB)].p_Data->StateId == TSL_STATEID_TOUCH) || (MyTKeys[(NB)].p_Data->StateId == TSL_STATEID_DEB_DETECT))
何が間違っているのかわかりません。また、このスライダーで 3 つのタッチ キーを調整可能な検出しきい値で構成するにはどうすればよいですか?
私はプロジェクトを Keil に準拠させました。これを共有して、問題をよりよく理解することができます。
これらの質問に対するあなたのサポートは非常に高く評価されており、私が TSC とタッチ アプリケーションを理解して学習するのに非常に役立ちます..
ありがとうございました。