我用串口控制終端模塊的燈,發送121(第一位1代表第一個模塊,第三位1代表打開燈)和120(第三位0代表關燈),用串口調試助手發送到協調器,協調器發送到終端,但是發送一次沒反應,需要連續點擊發送很多次才有用,不知道原因(與波特率沒關系),請大佬們指點,下面是代碼:
1.png (106.12 KB, 下載次數: 54)
下載附件
2021-7-17 19:26 上傳
協調器接收數據代碼:
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;
}
}
|