crystal1987 发表于 2014-12-27 17:38 
按照目前的情况看,应该还是串口1中断的问题。如果方便把你的串口通信代码贴出来,让大家帮忙看看。慢慢 ...
void USART1_IRQHandler(void)
{
u8 i;
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除接收标志位
USART1_ReceData=USART1->DR;
if(USART1_ReceFlag==0)
{
if(USART1_ReceData==0xEB)
{
USART1_Recebuf[0]=USART1_ReceData;
USART1_ReceFlag++;
}
}
else if(USART1_ReceFlag==1)
{
if(USART1_ReceData==0x90)
{
USART1_Recebuf[1]=USART1_ReceData;
USART1_ReceFlag++;
}
else
{
USART1_ReceFlag=0; //重新接收
}
}
else if(USART1_ReceFlag==2)
{
USART1_Recebuf[2]=USART1_ReceData;
USART1_Len=USART1_ReceData; //帧长度
USART1_ReceFlag++;
}
else if(USART1_ReceFlag==3)
{
USART1_Recebuf[3]=USART1_ReceData;
USART1_Cmd=USART1_ReceData; //帧命令
USART1_ReceFlag++;
}
else
{
/*接收剩余数据中*/
if(USART1_ReceFlag<USART1_Len-1)
{
USART1_Recebuf[USART1_ReceFlag]=USART1_ReceData;
USART1_ReceFlag++;
}
/*接收完成*/
else if(USART1_ReceFlag==USART1_Len-1)
{
USART1_Recebuf[USART1_ReceFlag]=USART1_ReceData; //接收最后一个校验字节
/*计算校验位*/
for(i=0,USART1_CountData=0;i<USART1_ReceFlag;i++)USART1_CountData+=USART1_Recebuf;
/*校验OK,解析*/
if((USART1_CountData&0x00ff)==USART1_Recebuf[USART1_ReceFlag])
{
USART1_ReceOK=1;
USART1_ReceFlag=0;
/*数据帧单独处理*/
if(USART1_Cmd==CONTINUS_READ_AD7730_DATA)
{
receive_dataframe_ok_flag=1;
}
/*其他帧处理*/
else
{
receive_cfgframe_ok_flag=1;
}
}
/*校验错误,丢弃*/
else
{
USART1_ReceFlag=0;
}
}
else
{
USART1_ReceFlag=0;
}
}
}
|