你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
查看全部评分
yimingliang2019 发表于 2019-6-26 15:06 你好 !你这样能调通? 如果有一个while超时 代码就会死循环啊。 static HAL_StatusTypeDef ReceivePacket( ...
songshiqun2010 发表于 2019-6-26 16:31 波特率多少?数据位?校验?
yimingliang2019 发表于 2019-6-27 09:01 我的是115200 8 N 1 我真的调不通 方便留个QQ吗
评分
查看全部评分
{
uint8_t Number=0,temp[2];
temp[0]=Get_ID_command;
temp[1]=0xFF-Get_ID_command;
while(HAL_UART_Transmit(&huartx,temp,2,TimeOUT_USART)!=HAL_OK){}
while(HAL_UART_Receive(&huartx,&temp[0],1,TimeOUT_USART)!=HAL_OK){}
switch(temp[0]){
case ACK_MCU:
while(HAL_UART_Receive(&huartx,&Number,1,TimeOUT_USART)!=HAL_OK){}
//for(i=0;i<Number+1;i++)
while(HAL_UART_Receive(&huartx,PID,Number+1,TimeOUT_USART)!=HAL_OK){}
while(HAL_UART_Receive(&huartx,temp,1,TimeOUT_USART)!=HAL_OK){}
// printf("Get_ID ACK 1\n");
if(temp[0]==ACK_MCU){
// LED(ON);
// printf("Get_ID ACK 2\n");
}else{
// LED(OFF);
printf("Get_ID NACK 2\n");
}
break;
case NACK_MCU:
printf("Get_ID NACK 1\n");
break;
default:
break;
}
}
{
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就超时了 求解
波特率多少?数据位?校验?
huart3.Init.BaudRate = 115200;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.WordLength = UART_WORDLENGTH_9B;
huart3.Init.Parity = UART_PARITY_EVEN;
我的是115200 8 N 1 我真的调不通 方便留个QQ吗
改成 115200 9 even 1 啊。GD32f103 GD32F303 上验证过 OK.
你解决没?我也遇到同样的问题。 怎么都查不出原因。