你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

串口接收中断,出现接收包头的第一个字节重复接收的问题

[复制链接]
watercici 提问时间:2018-8-8 19:59 /
本帖最后由 watercici 于 2018-8-8 20:46 编辑

我用串口中断接收下位机的传来的回复包的时候,出现第一个字节重复接收2到3次,不知道这是怎么回事,但是直接将下位机回复的数据传到电脑串口助手的时候确实正常的,所以我不知道自己的代码里面出了什么问题,现在猜估计是溢出中断导致的,还没有验证?所以我想问一下,接收一个字节,读一个字节也会发生溢出中断吗?为什么?

复制代码


收藏 评论9 发布时间:2018-8-8 19:59

举报

9个回答
watercici 回答时间:2018-8-9 10:10:29
本帖最后由 watercici 于 2018-8-17 16:21 编辑
huangyanga 发表于 2018-8-9 10:04
你贴的代码我看不到,不好分析
  1. void UART5_IRQHandler(void)
  2. {   

  3. if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)
  4.   {
  5.     USART_ReceiveData(UART5);
  6.     USART_ClearFlag(USART2, USART_FLAG_ORE); //清除溢出中断
  7.   }

  8.   if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
  9. {
  10.       
  11.         uart5_index = uart5_index >= SIZE_REPLY_MAX ? 0 : uart5_index;
  12.         uart5_buffer_data[uart5_index] = USART_ReceiveData(UART5);
  13.               USART_ClearITPendingBit(UART5, USART_IT_RXNE);               
  14.         }
  15. }
复制代码
watercici 回答时间:2018-8-9 08:57:30
不是溢出的问题,有大神知道是怎么回事吗?在线等,谢谢!
watercici 回答时间:2018-8-9 09:59:26
比如我的下位机回复的是02 57 44 4E 0D,用串口助手接收是正确的,可是用STM32接收回来的数据总是02 02 57 44 4E 0D,有时候也会接收成02 02 02 57 44 4E 0D?我实在是不知道什么问题导致的,求指导。查了不是溢出错误,也不是RXNE中断未清除的错误,不知道是什么原因导致的!!!
huangyanga 回答时间:2018-8-9 10:04:12
你贴的代码我看不到,不好分析
watercici 回答时间:2018-8-9 10:10:47
huangyanga 发表于 2018-8-9 10:04
你贴的代码我看不到,不好分析
  1. void UART5_IRQHandler(void)
  2. {   

  3. if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)
  4.   {
  5.     USART_ReceiveData(UART5);
  6.     USART_ClearFlag(USART2, USART_FLAG_ORE); //清除溢出中断
  7.   }

  8.   if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)
  9. {
  10.       
  11.         uart5_index = uart5_index >= SIZE_XRAY_REPLY_MAX ? 0 : uart5_index;
  12.         uart5_buffer_data[uart5_index] = USART_ReceiveData(UART5);
  13.               USART_ClearITPendingBit(UART5, USART_IT_RXNE);                 
  14.   
  15.                 if(uart5_index>=1 && uart5_buffer_data[0]==0x02 && uart5_buffer_data[uart5_index]==0x0D)
  16.                 {
  17.         
  18.                     uart5_index += 1;
  19.                     memcpy(p_xray_reply_data, uart5_buffer_data, uart5_index);
  20.                     usart4_tx_nbytes(uart5_buffer_data, uart5_index);
  21.                     
  22.                     xray1_reply_status = 1;
  23.                     uart5_index = 0;
  24.                   
  25.                 }
  26.                 else if(uart5_index > 21)
  27.                 {
  28.                     memset(uart5_buffer_data, 0, SIZE_XRAY_REPLY_MAX);
  29.                     uart5_index = 0;
  30.                 }
  31.                 else
  32.                 {
  33.                     uart5_index++;
  34.                 }
  35.       
  36.         }
  37. }
复制代码
watercici 回答时间:2018-8-9 10:11:41

这是接收中断的代码,数据是从接收开始出错的
回答时间:2018-8-9 11:29:30
串口5接的设备,发送数据的频率是多高?可以考虑降低一些。
usart4_tx_nbytes(uart5_buffer_data, uart5_index);这个是中断发送,还是查询发送。如果是查询,这里可能会导致串口接收数据丢失。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jyl518-283289 回答时间:2018-8-9 12:41:09
本帖最后由 jyl518-283289 于 2018-8-9 12:43 编辑
给你个参考,下面接收绝对OK的。
void USART1_IRQHandler(void)    //USART1发送、接收中断函数
{
    uint8 temp;
    IWDG_Feed();

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        //ch = USART1->DR;
        temp = USART_ReceiveData(USART1);

        if((temp == 0x02) && (usart1.rx_start == 0))                //判断包头
        {
            usart1.rx_start = 1;
            usart1.rx_cnt = 0;
            usart1.rx_buf[usart1.rx_cnt] = temp ;
        }
        else if(usart1.rx_start == 1)                //开始接收数据
        {
            usart1.rx_cnt ++;
            usart1.rx_buf[usart1.rx_cnt] = temp ;
        }
    }
}

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

watercici 回答时间:2018-8-17 16:30:19
结贴:应该是溢出的问题,后来莫名其妙的就好了。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版