找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4294|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

關(guān)于STM32 st_link串口通信調(diào)試,中斷接收到了數(shù)據(jù)但是無法發(fā)送

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424805 發(fā)表于 2019-4-1 15:06 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
  我在用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
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表