問題タブ [uart]
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 - LPC1768のボーレートUARTxの変更が機能しない
lpc1768でUARTのボーレートを変更する方法に問題があります。
uartを初期化して構成するには、次のコードを使用します。これは、9600ボーまたは38400で正常に機能します。
しかし、ボーレートを9600から38400に変更するには、DLM / DLLおよびFDRレジスタを適切な値に変更しようとします(上記のコードと同じ)。しかし、それは機能しません...(ボーレートは定義されていません)。
私のpclkは18MHzです
これらの3つのレジスタだけを変更するだけでは不十分ですか?私が間違っている ?
python - pySerial は低い値を好まない
MCU で遊んで、RS232 リンクを介して PC デスクトップと通信しようとしています。
テスト プログラムを非常にシンプルにしました。「Hello world!\n」をnミリ秒ごとに送信します。
最も関連性の高いリンク接続パラメーターは次のとおりです。
- ポート: /dev/ttyUSB0
- ボーレート: 57600 bps
- 8データビット
- 1ビットストップ
- パリティおよびハードウェア制御なし
MCU から PC にデータを受信することを確認するために、/dev/ttyUSB0 を次のように設定します。
その後、
というわけで、ちゃんとMCUからデータを受信しています。
しかし、ここで問題は、pySerial モジュールで Python を使用したい場合、データが完全に間違っていることです。
この時点で、「Hello world!\n」出力文字列 (MCU 側) を次の文字列に変更しました: 0xde, 0xad, 0xbe, 0xef。そして、pySerial で得られるものは次のとおりです。
できます!今度は、0x00, 0x01, 0x02, 0x03, 0x80, 0x81, 0x82, 0x83 に変更しました。結果:
結論: pySerial は、同じ値に 128 を加えた値に対して、128 より小さいバイト値を変更します。
なぜこれが起こっているのかわかりません。他の機会(バージョン2.4)でpySerialモジュールを使用しましたが、すべて正常に機能しました。Ubuntu 11.10 および Ubuntu 10.04 で 2.5 および 2.6 バージョンを試しましたが、うまくいきません。どんな手掛かり?
PD: 私の英語の文章に共感してください。私は英語に堪能ではありません。
usb - JTAGなしでMSP430にコードを埋め込む
私はこのテーマの初心者であり、MSP430にコードを埋め込む方法を学びたいと思っています。ブレークアウトボードMSP430-H5438があり、JTAGインターフェイスを使用していません。IARで生成されたコード(16進ファイル)の準備ができています(ADC、SPIインターフェイス)が、ICにロードできませんでした。USB-UARTブリッジを使用して、デバイスをPC、ソフトウェア用のBSLスクリプターに接続していますが、結果がありません。JTAGインターフェイスなしでMSP430をPCに接続するのは間違った方法ですか?私はここで輪になって走っていますか?前もって感謝します。
c - C: 整数を分割して ASCII に変換する
整数を数字に分割し、各数字を (C プログラミング言語で) ASCII に変換したいと思います。
例:
また、整数が 2 桁 (16 進数) しかない場合でも、3 つの分割が必要です。
よろしくお願いします!
c++ - WriteFile 関数が実行されているかどうかを確認する方法
例外を発生させずに同じ ComDev で ReadFile を呼び出せるように、WriteFile 関数が UART への書き込みを完了しているかどうかを確認したいと考えています。
書き込みが完了する前にWriteFile 関数が返される可能性があるようです。
回避策として Sleep(1000) を使用しましたが、適切な時間を待つにはどうすればよいですか?
linux - Linuxユーザースペース:16550互換UARTを永続的にループバックモードにする方法
構成したい16550互換UARTが市場に出回っています。Linuxドライバーはメーカーから提供されており、ユーザースペースプログラムを介して(複数の)UARTを永続的に構成する必要があります。
永続性とは、コンフィギュレーターが終了した後も、構成がチップ内に残ることを意味します。
私が遭遇した問題は、カーネルドライバーのuart_ops操作が、.startupおよび.shutdown操作を通じてMCR(モデム制御レジスター)の内容に影響を与えているように見えることです。手元のタスクは、MCRレジスタのビット5(0から7)を1に設定することにより、UARTをループバックモードにすることです。これは、製造元が提供するIOCTLを介して行います(他に方法はありますか?)。しかし、IOCTLにアクセスするには、ファイル記述子を提供する必要があります。つまり、open()を意味します。次に、私のコンフィギュレーターが終了すると、システムはファイル記述子をclose()します。
そのため、uart_ops.shutdown()関数が呼び出され、MCRの内容が失われます。後続のアプリケーションはUARTをループバックモードで認識しないため、テストする方法はありません。
どうやってするか?ポート/関連デバイスノードを開き、MCRでループバックを有効にしてから、記述子を閉じないでください(スリープまたは無限ループを介して)?それは許容できる解決策ですか?後続のアプリケーションは、ループバックモードでUARTを認識できますか?
後続のアプリケーションがループバックモードをテストする前に、uart_ops.shutdown関数とそれが実行するMCR-overwriteの呼び出しを回避するにはどうすればよいですか?
ありがとうございました。
編集:
問題のUARTはExarXR17D158(http://www.exar.com/connectivity/uart-and-bridging-solutions/pci-uarts/pci-uarts-universal-3-3v-or-5v/xr17d158)であり、ドライバーはここにあります:http://www.exar.com/common/content/document.ashx? id = 20639&languageid = 1033 uart_ops.startupおよびuart_ops.shutdownメンバーとして渡されるserialxr_startupおよびserialxr_shutdownは、行806および902にあります。 xr17c15x.cファイル内。
microcontroller - 8051 マイクロコントローラの割り込みによる UART 送信
私のプラットフォームは c8051F120 マイクロコントローラーです。割り込みを使用して UART0 経由で (=tx) バイトを送信したいと考えています。これまでの私のデザインは次のとおりです。
ブロッキング関数を使用できるため、UART0 レジスタと Timer2 を介したタイミング (上記のコードの一部ではない) に関する初期化が正しいと確信しています。
もちろん、割り込み設計に切り替えたいときも設定します
割り込みを使用しようとする私の設計の欠陥を誰かが見つけますか? または、このためのサンプルコードを持っている人はいますか? ありがとうございました!そして、TCNT レジスターの読み取りに関する私の質問に答えてくれた jzakmeister に大声で叫びました。
embedded - USB経由でUARTをエミュレートする
USB経由でUART(単純なシリアル送信および受信)をエミュレートできるかどうか誰かが知っていますか?これはどのように達成されますか?
このリンクはMicrochipのWebサイトで見つけましたが、あまり公開されていません。
http://www.microchip.com/forums/m522571-print.aspx
何か案は?ありがとう。
c - UART DMA Tx/Rxアーキテクチャ
重複の可能性:
UART ISRTxRxアーキテクチャ
現在、DMAUARTドライバーと並列タスクをサポートするオペレーティングシステムを含むTIマイクロを使用しています。UARTドライバーの機能は次のとおりです。
- static void HalUARTInitDMA(void);
- static void HalUARTOpenDMA(halUARTCfg_t * config);
- static uint16 HalUARTReadDMA(uint8 * buf、uint16 len);
- static uint16 HalUARTWriteDMA(uint8 * buf、uint16 len);
- static void HalUARTPollDMA(void);
- static uint16 HalUARTRxAvailDMA(void);
- static void HalUARTSuspendDMA(void);
- static void HalUARTResumeDMA(void);
キャリッジリターンで終了したメッセージを受け入れ、その後キャリッジリターンでメッセージを応答する別の周辺機器と通信しようとしています。
このタイプの通信ステートマシンを設計するための最良の方法が何であるかを知りたいと思いました。私の問題は、UARTポートのコールバック関数を次のように設計することです...
- 応答を待ってシステムをハングさせません。(ある種のタイムアウト)
- 応答の読み取りが早すぎると、応答が連結されます
- キャリッジリターンはメッセージの終わりを意味します
基本的な理論は次のようなものです。
このアイデアには明らかな欠陥がいくつかあります。この種のコミュニケーションがどのように行われるかについて、誰かがアイデアを共有してくれることを望んでいましたか?
ありがとう!
windows - シリアル ポートのブレーク コンディション
COM ポート経由で複数のデバイスとの通信をセットアップしています。
存在チェックのために、現在のデバイスが UART TX にいわゆる BREAK 条件を設定できるように実装したいと思います。(ブレーク条件とは、送信側が 8 ビットを超えて TX を Low に設定する条件です。)
しかし、Windows の PC 側でこの状態を検出するにはどうすればよいでしょうか? ブレーク条件を設定したり、時間制限のあるブレークを送信したりする関数をいくつか見つけましたが、ブレークを検出するためのものではありません。