問題タブ [usart]
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.
c - ATmega16 プログラミング レジスタの不一致
ATmega16をプログラミングしていて、デバイス マネージャー ( atmel studio 6.2 ) でそのコントローラーを選択しましたが、レジスターが ATmega16 のデータシートのレジスターと一致しません。ICE3を使っていて、シミュレーターで試してみましたが同じ結果です。レジスタUCSRCは他のコントローラーとは異なり、 に設定MSB
しても書き込みできませんone
。
c - 組み込みソフトウェア プログラム ブロック、I2C?
ST Microelectronics iNemo 用のアプリケーションを開発しているときに、非常に奇妙な問題に遭遇しました。私のアプリケーションは次のもので構成されています。
- SPIによるジャイロスコープ読み取り
- I2C による加速度計と磁力計 (同じデバイス内) の読み取り
- 姿勢推定アルゴリズム
- PD機能
- USARTによるデータ受信、DMAなしの割り込みあり
- USARTによるロギングパケットの送信
ループは 100Hz のタイマーによってトリガーされます。USART でデータを送信し始めるまで、プログラムはうまく動作します (いくつかの USART デバッグ プリントでテストしました): 私の最初の推測では、これにより割り込みの受信が可能になるため、I2C バス アービトラージ メカニズムで問題が発生します。私の推測では、問題のデバッグに成功すると (時間に依存します)、USART 印刷で、最後の印刷が常に磁力計印刷の加速度計 (コードで最初に呼び出すもの) の前にあることがわかりました。さらに、USART を介して詳細なデバッグ プリントを有効にすると、問題が発生する機会は少なくなりますが、それを無効にしてロギング パケットのみを送信すると、問題は常にすぐに発生します。誰でもこの問題の原因を教えてもらえますか? ありがとう
編集: I2C コードを添付します。
microcontroller - STM32L1のダイレクトメモリアクセスRX
私はしばらくの間、コンピューターからSTM32L100C-DISCO
オーバー USART にデータのブロックを送信しようとしてきました。パフォーマンス上の理由から、これは DMA を使用して行われます。しかし、これまでのところ、私はそれを機能させることができませんでした。何が間違っているのかわからないので、ここで質問したいと思います。
私はlibopencm3を使用していますが、残念ながら、それ以外の優れた例のリポジトリには、STM32L1xxx
. ただし、一般的な DMA ヘッダー ファイルで使用可能な構成オプションに関しては、すべての基本をカバーしていることを確認しました。
当然のことながら、STM32L1xxx のリファレンス マニュアルを参照したところ、次の DMA1 の要求テーブルが記載されているため、使用する必要があるのはチャネル 6 であると確信しました。
メモリと周辺機器 (つまり USART2) のサイズがよくわからなかったので、8 ビット、16 ビット、32 ビットのすべての組み合わせを変更しましたが、役に立ちませんでした。
難しい話は抜きにして; これは、私がやろうとしていることの最小限の動作 (まあ、動作していません..) の抜粋です。USART 自体は正常に動作するため、DMA 構成で何かを見落としているように感じます。
この時点で、何でも感謝されます。
このコードの背後にある考え方は、基本的に、バッファ内のデータが完全に置き換えられるまで永久にループし、置き換えられたら出力するというものです。ホストから、非常に認識しやすい 1 キロバイトのデータを送信していますが、返ってきたのは不正な形式のゴミだけです。それは何かを書いていますが、私が書こうとしているものではありません。
編集:これはメモリマップの写真です。USART2_BASE
と評価される0x4000 4400
ので、それも問題ないようです。
c - Usart 割り込み登録
アプリケーションに AT32UC シリーズ (カスタム ボード) を使用していますが、現在、Usart RS485 割り込みが原因で困っています。Rx 割り込みをセットアップして動作させています。データを送信できる場合に呼び出される Tx 割り込みを追加しようとしています。私の問題は、tx 割り込みが呼び出されないことです。これのために数時間戦った後、私は奇妙なものを見つけました。
上記から、rx 割り込みが機能し、INTC rx 割り込みの順序を tx 割り込みで変更すると、tx 割り込みが機能し、rx 割り込みは発生しません。各割り込みを呼び出す関数もメインです。誰かが割り込みの実装における私の理解の何が問題なのかを説明できますか? さらに参照できるように、関連するコードのスニペットも添付しました。
前もって感謝します!
c - AVR32 uc3b Tx エンプティ割り込みが機能しない
現在、AT32UCB1258 カスタム ボードで RS485 usart 割り込みに取り組んでおり、txempty 割り込みに苦労しています。基本的には、5 バイト送信後に tx を無効にしたいと考えています。私の rx 割り込み (マスター ボードからの受信コマンド) と tx レディ割り込みは正しく発生していますが、tx empty 割り込みはまったく発生していません。USART2 割り込みハンドラで発生する割り込みを区別するために、チャネル ステータス レジスタをチェックしています。どんな助けでも大歓迎です。前もって感謝します!
現在、txempty 割り込みがある場合に gpio_pin06 が Low になるのを監視していますが、その段階に進むことはありません。他の割り込みが正しく起動しているため、usart の初期化、gpio 有効化モジュール、および割り込みレジスタが正しく設定されていると思います。
stm32 - STM32F427 の USART1 は、8 番目のデータ ビットをパリティ ビットであるかのように設定することがあります。
次のクラスを介してSTM32F427
UASRT1 を使用しています。
問題は、時々 USART が実際の 8 番目のデータ ビットを無視し始め、それをパリティ ビット (具体的には奇数パリティ) として設定し始めることです。最も奇妙なのは、事前の再プログラミングなどを行わなくても、長い電源オフの後でも時々発生することです。たとえば、昨日の夜はすべて問題ありませんでしたが、翌朝、仕事に来てデバイスの電源を入れると、説明されている方法で動作し始めます. ただし、これに限定されず、次の再起動後にランダムに表示される場合があります。
その効果は、オシロスコープや、さまざまなプログラムで使用されるさまざまな UART-USB コンバーターではっきりと確認できます。この効果が現れると、テスト データ セットを送信するようにマイクロコントローラを再プログラムすることさえ可能です。たとえば、エンドレス サイクルで 0x00 から 0xFF まで。問題には影響しません。速度の変更 (9600 bps まで)、ワードあたりのビット数、パリティ制御は役に立ちません - 再プログラミング後も効果はそのまま残ります (たとえば、1 バイトあたり 2 パリティ ビットという異常な値が発生します)。または、少なくとも、UASRT が初期化され、プログラムのワークフローに従って通常の順序で使用されている間。
これを修正する唯一の方法は、main() 関数を次のようにすることです。
これにより、再プログラミングと再起動の後、最初の数バイト (最大 5) が不正に送信されますが、その後はすべてがうまく機能し、さらに再起動と再プログラムを繰り返しても引き続きうまく機能します。
STM32F427
この影響は、同じレイアウトの 2 つの物理的に異なるボード上の2 つの異なる で観察されます。外観に規則性は見られません。信号の極性とレベルは USART 要件に準拠しており、調査中にノイズや接触不良は検出されません。私のプログラムで使用されている他のコード (私のプログラムまたはライブラリーのいずれか) の方向から UASRT1 への愛情がないように思われるか、深く埋もれています。CMSIS-OS
は、プロジェクトで RTOS として使用されKeil
uVision 5.0.5
ますRTX OS
。
助けが必要。