打印
[STM32F0]

用STM32F0的串口接收中断,收数据的奇怪问题

[复制链接]
1563|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pigy0754|  楼主 | 2015-3-24 21:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用STM32F0芯片,做串口接收实验。初始化中只是开了接收中断。接收中断如下所示:
volatile uint8_t Usart1RxTerm = 0;
uint32_t Usart1RxCount = 0;
uint8_t Usart1RxBuffer[256];

void USART1_IRQHandler(void)
{

  if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
  {
    USART_ReceiveData(USART1);  //(1)
  }

  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    if (0 == Usart1RxTerm)
    {
      Usart1RxBuffer[Usart1RxCount++] =   SART_ReceiveData(USART1);
    }   

    if(Usart1RxCount==256)
    {
     Usart1RxCount = 0;    //(2)     
     Usart1RxTerm = 1;
    }
  }
}
程序运行后,在中断服务程序的(1)和(2)位置设置断点后全速运行。电脑使用串口助手首次发送256个字节到STM32F0可以正常运行到断点(2)。
然后电脑上串口助手再次发送256字节后,就停在断点(1)了。这是为什么?
网上说中断服务中判断到ORE时,读一次接收缓冲就行了。但是没作用啊
  if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
   {
     USART_ReceiveData(USART1);  
}

沙发
mmuuss586| | 2015-3-24 21:59 | 只看该作者
  /* USART in mode Receiver --------------------------------------------------*/
  if (USART_GetITStatus(USARTx, USART_IT_RXNE)  != RESET)
  {
                USART_ClearFlag(USART1, USART_IT_RXNE); //清除中断标志
               
                RxBuffer[ReceivCount]=USART_ReceiveData(USARTx);
                ReceivCount++;
                if(ReceivCount>=1024)       
                        {ReceivCount=0;RxOkFlag=1;}
                else;
  }
        else;
我的030串口程序,仅供参考;

使用特权

评论回复
板凳
pigy0754|  楼主 | 2015-3-25 21:09 | 只看该作者
mmuuss586 发表于 2015-3-24 21:59
/* USART in mode Receiver --------------------------------------------------*/
  if (USART_GetITSt ...

谢谢!问题自已找到了,是一个变量设错了

使用特权

评论回复
地板
mmuuss586| | 2015-3-26 12:04 | 只看该作者
pigy0754 发表于 2015-3-25 21:09
谢谢!问题自已找到了,是一个变量设错了

:loveliness:
解决了就好;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

26

帖子

1

粉丝