我用串口控制终端模块的灯,发送121(第一位1代表第一个模块,第三位1代表打开灯)和120(第三位0代表关灯),用串口调试助手发送到协调器,协调器发送到终端,但是发送一次没反应,需要连续点击发送很多次才有用,不知道原因(与波特率没关系),请大佬们指点,下面是代码:
协调器接收数据代码:
static void rxCB(uint8 port,uint8 event)
{
uint8 uartbuf[3];
HalUARTRead(0,uartbuf,3); //从串口读取三个字节的数据到uartbuf中
AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
3, //发送三个字节的数据
uartbuf, //发送的数据内容,其实就是从串口收到的3个字节的数据
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );
}
终端代码:
uint8 buffer[3];
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接受处理函数
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
osal_memcpy(buffer,pkt->cmd.Data,3);
break;
}
}
static void GenericApp_LED_Control(void)
{
if(buffer[0]=='1') //收到1则模块1进行判断,收到2则模块2进行判断
{
if((buffer[1] == '2') & (buffer[2] == '1'))//如果收到的是2和1,就点亮led1
{
HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);
}
if((buffer[1] == '2') & (buffer[2] == '0'))//如果收到的是2和0,就熄灭led1
{
HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);//熄灭led1
}
}
}
而如果我把终端程序改成下面这样就正常了,就会发送121立马亮灯,发送120立马熄灭,只不过我需要增加GenericApp_LED_Control这个函数,所以我才改成上面那种,希望大佬指点一下原因:
uint8 buffer[3];
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接受处理函数
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
osal_memcpy(buffer,pkt->cmd.Data,3);
if(buffer[0]=='1') //收到1则模块1进行判断,收到2则模块2进行判断
{
if((buffer[1] == '2') & (buffer[2] == '1'))//如果收到的是2和1,就点亮led1
{
HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);
}
if((buffer[1] == '2') & (buffer[2] == '0'))//如果收到的是2和0,就熄灭led1
{
HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);//熄灭led1
}
}
break;
}
}
|