找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3897|回复: 0
打印 上一主题 下一主题
收起左侧

关于STM32 st_link串口通信调试,中断接收到了数据但是无法发送

[复制链接]
跳转到指定楼层
楼主
ID:424805 发表于 2019-4-1 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  我在用st_link 在线调试时,串口中断接收到了数据,但是在main函数while里一直来回循环,发送不了。我退出调试,串口正常接收发送。这是怎么回事?
main:
while(1)
{
  if(USART_RX_STA&0x8000)
  {        
   len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
   printf("\r\n您发送的消息为:\r\n\r\n");
   for(t=0;t<len;t++)
   {
    USART_SendData(UART4, USART_RX_BUF[t]);//向串口4发送数据
    printf("\n");
    PCout(6)=1;
   // while(USART_GetFlagStatus(UART4,USART_FLAG_TC)!=SET);//等待发送结束
   }
   printf("\r\n\r\n");//插入换行
   USART_RX_STA=0;
  }


void UART4_IRQHandler(void)                 //串口4中断服务程序

{
u8 Res;
#if SYSTEM_SUPPORT_OS   //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();   
#endif
if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  {
  //Res =USART_ReceiveData(UART4); //读取接收到的数据
  
  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;//接收数据错误,重新开始接收   
     }   
    }
   }      
     }
#if SYSTEM_SUPPORT_OS  //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();              
#endif
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表