串口只能接收第一个字节,求教!
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是checksum[0] checksum[1]结尾)
{
USART_ClearFlag(USART1,USART_FLAG_RXNE); //清除中断标志
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了checksum[1]
{
if(Res != USART_RX_BUF[USART_REC_LEN-1])USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成
}
else //还没收到chucksum[1]
{
if(Res == USART_RX_BUF[USART_REC_LEN-2])USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if (USART_RX_STA >=2)
{
USART_RX_BUF[USART_REC_LEN-2] += Res;
USART_RX_BUF[USART_REC_LEN-1] += USART_RX_BUF[USART_REC_LEN-2];
}
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
while(1)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
USART_ClearFlag(USART1,USART_FLAG_RXNE); //清除中断标志
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if ((Res == 0xB5) && (USART_RX_STA == 0))
{
USART_RX_BUF[USART_RX_STA] = Res;
USART_RX_STA++;
}
else if ((Res == 0x62) && (USART_RX_STA == 1))
{
USART_RX_BUF[USART_RX_STA] = Res;
USART_RX_STA++;
}
else
{
if ((USART_RX_STA >= 2) && (USART_RX_STA < 36))
{
USART_RX_BUF[USART_RX_STA] = Res;
USART_RX_STA++;
}
else
{
USART_RX_STA=0;
}
}
}
}
我这么写就可以接收到36个字节,但是用了while(1),跳不出中断了
一周热门 更多>