RS232経由でメッセージを正常に送信できないのはなぜですか?


9

先週、私はSTM32F407からUARTメッセージを送信し、シロアリを使用したugreen RS232-USBケーブルを介してラップトップでそれを読み取ることに取り組んできました。

私はSTMCubeを使用してコードを生成し、「stm32f4xx_hal_uart.c」ファイルの上部にある関連する説明を読んで(そして、たくさんのビデオを見てオンラインで読んで)、コードを追加しました。

送信されたメッセージをオシロスコープで確認したところ、ASCII表現と一致しています。

たとえば、0101 0001である「Q」を送信し、0101 0111である「W」を受信します。スコープの読み取り値は、

ここに画像の説明を入力してください

オシロスコープに表示されるのと同じ信号のシロアリ出力。 ここに画像の説明を入力してください

私は、ボーレート/パリティ/ HWcontrolがシロアリと私のコードで一致していることを確認しました。

正しい文字を受け取るために、ボーレートを下げたり上げたりしてみました。
間違った文字が表示される原因となるパターンを見つけるために、さまざまな文字セットを試しました。
さらに、PuttyやTeratermなどの別の端末を試しました。


8
「RS232-USBケーブル」はRS232電圧レベルまたは「TTL」電圧レベルで動作しますか。STM32F407ボードはそれらのレベルに適切なドライバ/レシーバを使用していますか?質問2の答えが「いいえ」であるとほぼ確信しています。「間違ったレベルと極性」フィルターを通してスコープトレースを解釈すると、「W」も表示されるためです。おそらく、ボードにはドライバー/レシーバーハードウェア(TTLレベルを使用)がなく、「RS232-USBケーブル」にはRS232ドライバー/レシーバーハードウェア(RS232レベルを使用)があります。
brhans '20

3
いくつかの異なる文字を試すと、@ brhans仮説が即座に確認されます。異なる結果を期待しながら、何度も何度も同じ文字を送信すると...狂気の定義の一つである
デイブ・ツイード

3
FeraTaTa-これまで述べたことがないと思う1点だけ:一見すると、スコープトレースは0Vでアイドル状態のように見える信号を示しています(1トレースの左側にある黄色の背景のシンボルを見てください-それは0Vレベル)、次に0V未満のパルス。これは、STM32からの論理信号には当てはまりませんし、実際には当てはまりません。左下隅を見ると、チャネル1がAC結合に設定されています(これ~が表示されている記号です)。信号は実際に高くアイドリングしており、約0Vまで脈動しています。その信号を正しく表示するには、DC結合を使用します。
SamGibson

回答:


22

RS232の主要な詳細を見逃しました。論理レベルは次のとおりです。

ここに画像の説明を入力してください

図1. RS232信号レベル。出典:ウィキメディアコモンズ

  • ロジック1 = -3〜-12V。
  • ロジック0 = +3〜+12V。
  • -3から+3の間の論理レベルは未定義です。
  • RS232スタートビットはロジック0です。

TTL(5 V)ロジックからRS232に変換するには、ドライバーが必要です。MAX232などのチップは、ロジックレベルの反転と電圧ブーストを行います。

論理レベルが反転していれば、時々「チート」してTTL信号をRS232入力に供給することが可能です。この方法の信頼性は、RS232入力で使用されるチップに依存します。

ここに画像の説明を入力してください

図2.送信された波形。一番上は、送信した「Q」のビットパターンです。下部には、RS232入力がそれを読み取る方法があります。

RS232入力は、開始ビットを示すポジティブエッジを探していることに注意してください。これはデータの2番目のビットまで発生しないため、その後はすべて1ビット右になり、レシーバーがそれを見ると反転します。運がよければ、MSBはストップビットの正しいロジックレベルであるため、レシーバーはそれを有効なフレームとして解釈し、デコードして「W」を表示しました。

テスト目的で、TTL出力を反転できます。これは、現時点では「機能」しているため、おそらく機能します。

ここに画像の説明を入力してください

図3. MAX232チップは、チャージポンプ回路のコンデンサを使用して、RS232レベルの5 V電源をブーストします。

信頼性のために、適切なRS232レベルの信号を送受信するMAX232チップを追加します。


3
おそらくより良い代替案として、USBからTTL UARTへのケーブルが利用可能です。いずれにしても、OPがUSBアダプターを使用している場合は、レベルシフト用のチップを追加しても意味がありません。
グラハム

1
RS-232はロジック0 =バイポーラV +で、2Vを超えるもので、TTL等価しきい値は1.5V typ。です。74HCTxxのようなCMOSでヒステリシスが小さい(50mV ??)
Tony Stewart Sunnyskyguy EE75

6
英語でお願いしますトニー?
トランジスタ

3
それはEEにとって英語です、あなたはどの部分を理解していませんか?RS232はアイドル時に-Vで、起動時に> + 2Vですが、データに対しては負論理で電圧(0 = V +、1 = V-)になり、V-で停止します。RS-232のしきい値が
1.4〜1.5Vであることをご存じなかったと思い

8
ありがとう、トニー。それははるかに読みやすく、賢明です。速攻の返信の多くに句読点、キーワード、活用形を省きます。私は40年近くのEEを持つあなたのような老人です。私の図1は、RXのしきい値電圧を示しています。オメガアナログウィキペディアマキシムも参照してください。すべての状態で、TXの場合は±5 V、RXの場合は±3V。
トランジスタ

7

9600の短距離および低ビットレートを考慮すると、TTLおよびCMOSレベルは正常に機能します。@Transistorによって雄弁に詳細に示されている問題は、UARTデータが負の論理0〜5Vであり、RS-232が正の論理+/- V V +/- 3から+/- 15V(?)

したがって、*彼も示唆しているように、インバーターが機能します。

問題は、ビットエラーレート(BER)の問題やシグナルインテグリティではなく、反転ロジックです。

また、「グレーゾーン」は長距離ノイズマージン用です。ケーブルが短いため、+ /-3V はありません。RS-232 Rxの実際のロジックしきい値は、古いTTL(2つのVbeドロップ)または1.4V +/- 20%(?)の許容範囲とまったく同じです。

ノイズグリッチとエッジリンギングによるすべての距離とボーレートの仕様を満たすために、これらはグレーゾーンと呼ばれています。

より長いケーブルの場合は、MAX232を取得します。変動は電圧速度と機能に依存する場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.