0

我正在尝试使用 RS-485 在两个 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 连接。每个设备都连接了四个触点,它们是(我认为)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 中,方向控制位错误的是 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);
} 

第二台设备收到了我的缓冲区。

于 2012-09-21T13:12:26.393 回答