|
我用串口控制終端模塊的燈,發(fā)送121(第一位1代表第一個模塊,第三位1代表打開燈)和120(第三位0代表關(guān)燈),用串口調(diào)試助手發(fā)送到協(xié)調(diào)器,協(xié)調(diào)器發(fā)送到終端,但是發(fā)送一次沒反應(yīng),需要連續(xù)點擊發(fā)送很多次才有用,不知道原因(與波特率沒關(guān)系),請大佬們指點,下面是代碼:
1.png (106.12 KB, 下載次數(shù): 54)
下載附件
2021-7-17 19:26 上傳
協(xié)調(diào)器接收數(shù)據(jù)代碼:
static void rxCB(uint8 port,uint8 event)
{
uint8 uartbuf[3];
HalUARTRead(0,uartbuf,3); //從串口讀取三個字節(jié)的數(shù)據(jù)到uartbuf中
AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
3, //發(fā)送三個字節(jié)的數(shù)據(jù)
uartbuf, //發(fā)送的數(shù)據(jù)內(nèi)容,其實就是從串口收到的3個字節(jié)的數(shù)據(jù)
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );
}
終端代碼:
uint8 buffer[3];
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接受處理函數(shù)
{
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進(jìn)行判斷,收到2則模塊2進(jìn)行判斷
{
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
}
}
}
而如果我把終端程序改成下面這樣就正常了,就會發(fā)送121立馬亮燈,發(fā)送120立馬熄滅,只不過我需要增加GenericApp_LED_Control這個函數(shù),所以我才改成上面那種,希望大佬指點一下原因:
uint8 buffer[3];
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接受處理函數(shù)
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
osal_memcpy(buffer,pkt->cmd.Data,3);
if(buffer[0]=='1') //收到1則模塊1進(jìn)行判斷,收到2則模塊2進(jìn)行判斷
{
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;
}
}
|
|