STM32F103 UART中断存在的怪问题

[复制链接]
2975|3
 楼主| libinxtdj 发表于 2011-9-29 11:01 | 显示全部楼层 |阅读模式
本帖最后由 libinxtdj 于 2011-9-29 11:11 编辑

TEK00003.png [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

粉丝
快速回复 在线客服 返回列表 返回顶部