我开始使用xbee series 2处理lpc2148。 在发送方面,我在API模式下使用lpc2148和xbee协调器, 和Rx方面我在路由器AT模式下使用盾牌上的xbee。 我希望XBee激活一个D3引脚,可以用来打开Rx端的继电器
API帧格式如下代码使用c程序。
在这里输入代码
#define Delimeter 0x7E
void Init_UART1(void) //This function setups UART1
{
unsigned int Baud16;
U1LCR = 0x83; // DLAB = 1
Baud16 = (Fpclk / 16) / UART_BPS;
U1DLM = Baud16 / 256;
U1DLL = Baud16 % 256;
U1LCR = 0x03;
}
void main() {
Init_UART1();
LED1_ON();
setRemoteState(0x5);//AD3 config DOUT HIGH
Delay(25);
LED1_OFF();
setRemoteState(0x4);//AD3 config DOUT LOW
Delay(25);
void setRemoteState (char value) {
UART1_Write(Delimeter);//start byte
UART1_Write(0);//high part of length
UART1_Write(0X10);//low part of length
UART1_Write(0X17);//remote AT command
UART1_Write(0X0);//frame id 0 for no reply
UART1_Write(0X0);
UART1_Write(0X0);
UART1_Write(0X0);
UART1_Write(0X0);
UART1_Write(0X0);
UART1_Write(0X0);
UART1_Write(0XFF);// broadcast
UART1_Write(0XFF);// broadcast
UART1_Write(0XFF);
UART1_Write(0XFE);
UART1_Write(0X02);//apply changes immediately on remote
UART1_Write('D');//writing on AD3 pin
UART1_Write('3');
UART1_Write(value);
sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '3' + value;
UART1_Write(0xFF - (0xFF & sum));//checksum
Delay(25);
}
}
我无法在我的Rx端获得任何通信或数据。 D3引脚输出波动仍然很低。 请指导这一点...
使用Serial.write函数,这个程序可以正常使用arduino。
此致 维杰
答案 0 :(得分:0)
您使用的是正确的波特率吗?您确定已正确连接TX / RX并且没有越过它们吗?如果你启用了硬件流控制,那么进入XBee的RTS信号是否被断言? XBee模块是否通电并接收足够的电流?
如果您在另一台设备上监控XBee传输信号(计算机通过FTDI的TTL-to-USB线缆),您是否在启动时看到了字节(我相信它在启动时会发送调制解调器状态) ?如果您监视LPC2148发送信号,您是否看到了您认为正在发送的字节流(确认您正确地驱动UART1)?
您能否判断XBee模块是否正在接收您的请求,可能是通过在高输出和低输出之间切换ATD0
并检查LED或示波器?您是否有任何硬件可用于监控两个设备之间的串行流,以查看它是否发送您认为您正在发送的字节?你确定它正在计算正确的校验和(以某种方式转储字节并尝试通过X-CTU运行它们以查看它们是否有效)。
如果您要在LPC2148和XBee模块之间进行大量通信,您可能需要尝试将此Open Source ANSI C XBee Host Library移植到平台。它包括多层XBee帧处理,可以减少您需要编写的软件数量。