|
我在用st_link 在線調(diào)試時,串口中斷接收到了數(shù)據(jù),但是在main函數(shù)while里一直來回循環(huán),發(fā)送不了。我退出調(diào)試,串口正常接收發(fā)送。這是怎么回事?
main:
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長度
printf("\r\n您發(fā)送的消息為:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(UART4, USART_RX_BUF[t]);//向串口4發(fā)送數(shù)據(jù)
printf("\n");
PCout(6)=1;
// while(USART_GetFlagStatus(UART4,USART_FLAG_TC)!=SET);//等待發(fā)送結(jié)束
}
printf("\r\n\r\n");//插入換行
USART_RX_STA=0;
}
void UART4_IRQHandler(void) //串口4中斷服務(wù)程序
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
//Res =USART_ReceiveData(UART4); //讀取接收到的數(shù)據(jù)
if((USART_RX_STA&0x8000)==0)//接收未完成
{
Res =USART_ReceiveData(UART4);
//printf("%x\n",Res);
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始
else USART_RX_STA|=0x8000; //接收完成了
}
else //還沒收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN))USART_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收
}
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntExit();
#endif
}
|
|