2012-09-18 36 views
0

我試圖在兩個使用RS-485的LPC1765設備之間實現簡單的通信。我用這個例子添加到我的菜單系統(它是LPC17xx一個基本的例子):兩個通過RS-485通信的LPC1765設備

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不會改變)

現在硬件應該正確連接,所以我只列出一些參考信息,上面有一個U59 SN65HVD1781D驅動程序RS485_TXD/RXD,有RS485_OF,RS485_MASTER_PWR,RS485_MASTER_MFAS和一個電壓調節器,有一個RS485從機檢測電路和UP/DOWN連接,每個設備連接與四個聯繫人,他們是(我認爲)RS485_UP,RS485_A +,RS485_B-和RS485_DOWN。在頂部和底部都有一個4針連接器,用於按順序連接設備,如果一切正常,最頂層的設備將承擔所有底層設備上主設備的狀態。

回答

0

我讓RS485工作。

使用LPC17xx用戶手冊在http://www.nxp.com/documents/user_manual/UM10360.pdf

在功能RS485Init rs485.c,方向控制位錯與PINSEL1代替PINSEL4;根據手冊頁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); 
} 

第二設備已經收到了我的緩衝區。