打印

STM32F103 UART中断存在的怪问题

[复制链接]
2380|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 libinxtdj 于 2011-9-29 11:11 编辑

[localimg=180,135]1[/localimg][localimg=180,135]1[/localimg][localimg=180,135]1[/localimg][localimg=180,135]1[/localimg][localimg=180,135]1[/localimg][localimg=180,135]1[/localimg][localimg=180,135]1[/localimg][localimg=180,135]1[/localimg]
接受中断中明明存在奇偶效验错误,但是仍然能正常通信。也找不出奇偶效验错误的原因。。
其中1通道中得高电平表示奇偶错误的情况
2通道表示数据接收正常后的高低电平变化
3通道是单片机发送端的情况。
沙发
libinxtdj|  楼主 | 2011-9-29 11:11 | 只看该作者
为什么看不到我的第二张图呢?

使用特权

评论回复
板凳
libinxtdj|  楼主 | 2011-9-29 11:11 | 只看该作者
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//判断接受中断
    {
      
      if (USART_GetFlagStatus(USART1, USART_FLAG_PE) == SET)//判断是否存在PE错误
      {
        USART_ClearFlag( USART1, USART_FLAG_PE);//清除PE错误标志位
      
        GPIO_SetBits(GPIOC, GPIO_Pin_6);//置1
      }
      else
        
      {
        GPIO_ResetBits(GPIOC, GPIO_Pin_6);
      }//清0
      
   
      Rcv_buff =USART_ReceiveData(USART1);//读取接受到的数据
     
      USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除相应的中断标志位
      
        if(Rcv_buff==0xff)
                {
                RxCunt=0;
                Rcv[RxCunt] = Rcv_buff;
                return;
                }
                RxCunt ++;
                Rcv[RxCunt] = Rcv_buff;
        if(RxCunt<2)
                return;
                RxCunt=0;
        if(Rcv[0]!=0xff)
                {
               
                wGlobal_Flags |= UART_ERROR;//置标志位
               
                Flags.Rev_Flag=0;
               
                //RcvBuff_Clean();
               
                return;
                }       
        if(Rcv[1]==0x11||Rcv[1]==0x22||Rcv[1]==0x33||Rcv[1]==0x44||Rcv[1]==0x55||Rcv[1]==0x66)
                {
                  
                Flags.Rev_Flag=1;
               
                wGlobal_Flags  &= ~ UART_ERROR;//清除标志位
               
                return;//2011-4-6 17:34:01
                }
        else
                {
                wGlobal_Flags |= UART_ERROR;//置标志位  
               
                Flags.Rev_Flag=0;
               
                //RcvBuff_Clean();
               
                return;
                }       
    }

使用特权

评论回复
地板
fortunewyf| | 2011-10-3 12:26 | 只看该作者
USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除相应的中断标志位
这条语句应该不用吧,你读过数据BUFFER后,硬件应该自动就会清楚RXNE的

使用特权

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

本版积分规则

48

主题

181

帖子

0

粉丝