数据帧的格式如上所示:
接收中断代码为:
[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
//////////////////////usart rcv handle////////////////////////////
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
if (!Rcv_Finish)
{
if (recept_bit1)//recept_bit1??????0
{
if (Rev_num < recp_num1)
{
rcv_data = USART_ReceiveData(USART1);
RecData[Rev_num] = rcv_data;
Rev_num++;
}
if (Rev_num >= recp_num1)
{
recept_bit1=0;
Rev_num=0;
Rcv_Finish = 1;
}
}
else
{
///////////////////////////////////////
if (sig_head1==0)
{
rcv_data = USART_ReceiveData(USART1);
if (rcv_data==0x55)//'U'
{
sig_head1++;
}
else
{
sig_head1=0;
return;
}
}
///////////////////////////////////////
else if (sig_head1==1)
{
rcv_data = USART_ReceiveData(USART1);
if (rcv_data==0x70)//'p'
{
sig_head1++;
}
else
{
sig_head1=0;
return;
}
}
///////////////////////////////////////
else if (sig_head1==2)
{
rcv_data = USART_ReceiveData(USART1);
if (rcv_data==0x01)//gprs
{
sig_head1++;
}
else
{
sig_head1=0;
return;
}
}
///////////////////////////////////////
else if (sig_head1==3)//length low
{
recp_num1 = USART_ReceiveData(USART1);
sig_head1++;
}
///////////////////////////////////////
else if (sig_head1==4)//length hight
{
rcv_data = USART_ReceiveData(USART1);
recp_num1 += rcv_data * 256;
sig_head1=0;
recept_bit1=1;
}
}
}
else
{
//???????í???????????????????ù????°?????????????????
rcv_data = USART_ReceiveData(USART1);
rcv_data = rcv_data;
return;
}
}[/mw_shl_code]
[mw_shl_code=c,true]}[/mw_shl_code]
然后假如在上图的1处打个断点,然后再按单步执行,代码会一直走到3处。
不知道是什么问题??
求帮助,谢谢~~
|