0

RS-485 を使用して 2 つの LPC1765 デバイス間の簡単な通信を実装しようとしています。メニューシステムに追加されたこの例を使用しています (これは LPC17xx の基本的な例です):

http://www.codeforge.com/read/155431/rs485.c__html
http://www.codeforge.com/read/155431/rs485.h__html
http://www.codeforge.com/read/155431/rs485test.c__html

したがって、両方のデバイスは RS485Init() を使用して適切に初期化されます。最初のバイトとしてスレーブ アドレスを使用して RS485Send を使用してデータを送信すると、結果は次のようになります。

(1) デバイスが切断された場合、送信機は自身の通信を受信します (UARTBuffer の内容が更新されます)。

(2) デバイスが接続されている場合、何も起こりません -- 送信されたバッファがどこかで失われます (UARTBuffer は変化しません)

これでハードウェアが適切に接続されたはずなので、参照用にリストします。RS485_TXD/RXD には U59 SN65HVD1781D ドライバーがあり、RS485_OF、RS485_MASTER_PWR、RS485_MASTER_MFAS、および電圧レギュレーターがあります。RS485 スレーブ検出回路と UP/DOWN 接続があります。各デバイスは 4 つの接点で接続されており、それらは (私が思うに) RS485_UP、RS485_A+、RS485_B-、および RS485_DOWN です。上部と下部の両方に 4 ピン コネクタがあり、デバイスを順番に接続します。すべてが機能する場合、一番上のデバイスがすべての下部デバイスのマスターのステータスを想定します。

4

1 に答える 1

0

RS485を動作させました。

http://www.nxp.com/documents/user_manual/UM10360.pdfで LPC17xx ユーザーマニュアルを使用する

関数 RS485Init の rs485.c で、PINSEL4 ではなく PINSEL1 の方向制御ビットが間違っていました。マニュアル 110 ページによると、これは正しいはずです (まあ、多くの方法で 0x800 を書き込むことができますが、これは簡単な修正にすぎません)。

if (DIR_CTRL == 1){
  LPC_PINCON->PINSEL4 |= 0x800;         
  LPC_UART1->RS485CTRL |= (RS485_DCTRL|RS485_SEL|RS485_OINV);
}else{
  LPC_PINCON->PINSEL4 |= 0x8000;            
  LPC_UART1->RS485CTRL |= (RS485_DCTRL|RS485_SEL|RS485_OINV);
} 

2 番目のデバイスがバッファを受け取りました。

于 2012-09-21T13:12:26.393 に答える