久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2756|回復: 2
打印 上一主題 下一主題
收起左側

從串口發送數據到終端為什么有時候能接收到數據有時候接收不到?

[復制鏈接]
跳轉到指定樓層
樓主
我用串口控制終端模塊的燈,發送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;
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2021-7-18 00:55 | 只看該作者
有可能是osal_memcpy(buffer,pkt->cmd.Data,3);這句會不斷更新buffer
  1. static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接受處理函數
  2. {
  3.    switch ( pkt->clusterId )
  4.    {
  5.     case GENERICAPP_CLUSTERID:
  6.                         if(pkt->cmd.Data=='1')//先驗證資料再處理
  7.                         {
  8.                                 osal_memcpy(buffer,pkt->cmd.Data,3);
  9.                         }
  10.             break;
  11.    }
  12. }
復制代碼
回復

使用道具 舉報

板凳
ID:954161 發表于 2021-7-18 09:16 | 只看該作者
本帖最后由 njtechlhr 于 2021-7-18 09:18 編輯
lkc8210 發表于 2021-7-18 00:55
有可能是osal_memcpy(buffer,pkt->cmd.Data,3);這句會不斷更新buffer

非常感謝lkc8210大佬,我按照您的分析和代碼進行了改動,問題得到了解決(但是您的代碼我在編譯的時候出錯,因為pkt->cmd.Data和‘1’的數據類型不同不能判斷,下面是我稍作的改動)。但是有一個新的問題,就是燈的反應時間變長了,即發送指令過去要4秒或者5秒左右(有時候很快)才能做出反應這是為什么呢?

  1. uint8 buffer[3];
  2. static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接受處理函數
  3. {
  4.   uint8 BUFFER[3];
  5.   switch ( pkt->clusterId )
  6.   {
  7.     case GENERICAPP_CLUSTERID:
  8.             osal_memcpy(BUFFER,pkt->cmd.Data,3);
  9.             if(BUFFER[0]=='1')
  10.             {  
  11.             osal_memcpy(buffer,pkt->cmd.Data,3);
  12.             }
  13.             break;

  14.   }
  15. }
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97日韩精品 | 亚洲人成人一区二区在线观看 | 国产一区日韩在线 | 日韩一级免费电影 | 欧美精品一区二区三区在线播放 | 9999久久| 国产精品毛片 | 成人在线看片 | 男人的天堂在线视频 | 欧美日韩成人影院 | 天天干成人网 | 91麻豆蜜桃一区二区三区 | 亚洲成人一区二区 | 91偷拍精品一区二区三区 | 亚洲欧美一区二区三区情侣bbw | 欧美国产日韩精品 | 日韩91在线| 久久久久久av | 黄色成人免费看 | 国产成人综合一区二区三区 | 在线观看成人av | 美女亚洲一区 | 亚洲精品久久久久中文字幕欢迎你 | 欧洲色综合 | www.一区二区三区 | 日韩欧美二区 | 在线免费91| 日韩一区二区精品 | 国产一区精品在线 | 免费毛片网 | 精品国产乱码久久久久久丨区2区 | 欧美精品久久久久久久久老牛影院 | 欧美日韩国产一区二区三区 | 中文在线а√在线8 | 久久久免费 | 粉嫩国产精品一区二区在线观看 | 超碰免费观看 | 91国自产 | 九色国产 | 妞干网视频 | 亚洲精品视频三区 |