请选择 进入手机版 | 继续访问电脑版
搜索

facelist

您需要登录后才可以留言 登录 | 立即注册


yimingliang2019 2019-6-26 16:16
你好 !你这样能调通? 如果有一个while超时 代码就会死循环啊。 static HAL_StatusTypeDef ReceivePacket(uint8_t *p_data, uint32_t *p_length, uint32_t timeout)
{
   uint32_t crc;
   uint32_t packet_size = 0;
   HAL_StatusTypeDef status;
   uint8_t char1;

   *p_length = 0;
   status = HAL_UART_Receive(&UartHandle, &char1, 1, timeout);
   if (status == HAL_OK)
   {
     switch (char1)
     {
       case SOH:
         packet_size = PACKET_SIZE; //128
         break;
       case STX:
         packet_size = PACKET_1K_SIZE;  //1024
         break;
       case EOT:
         break;
       case CA:
         if ((HAL_UART_Receive(&UartHandle, &char1, 1, timeout) == HAL_OK) && (char1 == CA))
         {
           packet_size = 2;
         }
         else
         {
           status = HAL_ERROR;
         }
         break;
       case ABORT1:
       case ABORT2:
         status = HAL_BUSY;
         break;
       default:
         status = HAL_ERROR;
         break;
     }
     *p_data = char1;

     if (packet_size >= PACKET_SIZE )
     {
      status = HAL_UART_Receive(&UartHandle, &p_data[PACKET_NUMBER_INDEX], packet_size + PACKET_OVERHEAD_SIZE, timeout);//这里超时 收不到数据

      /* Simple packet sanity check */
       if (status == HAL_OK )
       {
         if (p_data[PACKET_NUMBER_INDEX] != ((p_data[PACKET_CNUMBER_INDEX]) ^ NEGATIVE_BYTE)) // 有问题了
        {
           packet_size = 0;
           status = HAL_ERROR;
         }
         else
         {
           /* Check packet CRC */
           crc = p_data[ packet_size + PACKET_DATA_INDEX ] << 8;
           crc += p_data[ packet_size + PACKET_DATA_INDEX + 1 ];
           if (HAL_CRC_Calculate(&CrcHandle, (uint32_t*)&p_data[PACKET_DATA_INDEX], packet_size) != crc )
           {
             packet_size = 0;
             status = HAL_ERROR;
           }
         }
       }
       else
       {
         packet_size = 0;
       }
     }
   }
   *p_length = packet_size;
   return status;
}

串口发送一帧数据下来  只能收到第一个字节  第二个HAL_UART_Receive就超时了     求解
关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2019-8-20 16:40 , Processed in 0.129503 second(s), 7 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部