OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4040|回复: 4

请教一下,串口接收问题,为什么会自动收到第一个数据包

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-3-12
在线时间
1 小时
发表于 2021-11-18 14:20:23 | 显示全部楼层 |阅读模式
如题:因为我们公司是搞楼宇方面,所以串口都是单线制度的,发完数据,然后再打开串口来收数据,但是我刚刚才发现一个问题,例如我发串口数据AA  , BB , CC ,DD,发送完数据包后,我再次打开接收串口中断,我会收回AA ,即包的第一个数据。最主要的代码如下:

    int j = 0;

    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //开启串口接受中断
               
    for( j = 0; j < i_datalen; j++ )                         // 循环发送数据
    {
      while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
            ; //循环发送,直到发送完毕
      USART_SendData(USART1, i_data[j]);   
    }

  delay_ms(5);
               
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接受中断


  无论我是否接外部设备,效果一样,期待大神解答?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3399

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8674
金钱
8674
注册时间
2020-5-11
在线时间
4146 小时
发表于 2021-11-18 15:07:05 | 显示全部楼层
单线制,相当于RXD与TXD接一起?
自己发的数据自己也可以收,为避免收到自己发的数据所以发送前关闭了中断,发送完打开了中断?
这个情况的原因在于,虽关了中断使能,但接收电路仍在工作,且产生了中断标志位,在打开中断使能位时会产生中断。
两个建议:
1.不关中断,而是关CR1中的RE位。
2.不关中断,不关RE,接收到自己的数据也没关系,在发送期间收到的数据忽略就是,
  也可加以利用,通过对比收与发的数据是否相等来判断总线竞争,就像CAN总线。
专治疑难杂症
回复 支持 反对

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2021-7-17
在线时间
659 小时
发表于 2021-11-18 16:13:34 | 显示全部楼层
楼上的建议很棒
回复 支持 反对

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-11-18 16:45:27 | 显示全部楼层
2楼说得对   
回复 支持 反对

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2012-11-21
在线时间
61 小时
发表于 2021-11-18 20:10:06 | 显示全部楼层
2楼说的对
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 00:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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