【RS485 - 总线冲突】

news2024/10/7 12:23:32

最近写了一个小小的串口通信程序,逻辑上感觉没什么问题,但就是数据与设定值不对。最后发现应该是总线冲突的问题。

在RS485通信中,如果在接收完数据后立即发送数据,可能会引发总线冲突问题。这是因为在RS485通信中,设备是共享同一个通信总线的,当多个设备同时尝试在总线上发送数据时,可能会导致数据冲突和干扰,从而造成通信失败。

情景解释:

假设有两个设备 A 和 B,它们通过共享的RS485总线进行通信。设备 A 正在接收来自设备 B 的数据,当接收完成后,设备 A 需要发送一组响应数据给设备 B。然而,如果设备 A 在接收完数据后立即发送响应数据,而此时设备 B 正好也在尝试发送数据,就会发生总线冲突。

问题示例

下面代码的初衷是,如果我接收到 1F ,就发送0x1F, 0x08, 0x01, 0x06, 0x41, 0x43, 0x54, 0x34, 0x33, 0x30, 0xAE, 0x04

int main(void)
{
  	uint8_t send_data[] = {0x1F, 0x08, 0x01, 0x06, 0x41, 0x43, 0x54, 0x34, 0x33, 0x30, 0xAE, 0x04};
	uint8_t read_data = 0x00;

  /* Placeholder for user application code. The while loop below can be replaced with user application code. */
 while(1U)
 {
      UART_Receive(&UART_0, &read_data, 1); //此函数定义由DAVE直接生成
      //delay_100us();
      if(read_data==0x1F)
	  {
    		UART_Transmit(&UART_0, send_data, sizeof(send_data));//此函数定义由DAVE直接生成
    		read_data = 0x00;
      }
 }
}

然而实际收到的数据是这样的,发送的数据完全不是设定值
在这里插入图片描述

解决办法:

为了解决总线冲突问题,通常会在发送数据之前引入一定的延时,以确保其他设备有足够的时间完成它们的操作。这样可以有效避免数据冲突,提高通信的可靠性。以下是一些可能的解决办法:

  1. 随机延时: 在发送数据之前,引入一个随机的短暂延时。这样可以减小多个设备在同一时间尝试发送数据的可能性,从而降低冲突的概率。

代码示例

只要在接收数据后加延时delay_5ms;就可以解决这个问题。

void delay_100us(void)
{
    for (volatile uint32_t i = 0; i < 1000; ++i)
    {
        // Empty loop to create delay
    }
}
void delay_5ms(void)
{
    for (volatile uint32_t i = 0; i < 50000; ++i)
    {
        // Empty loop to create delay
    }
}

int main(void)
{
  	uint8_t send_data[] = {0x1F, 0x08, 0x01, 0x06, 0x41, 0x43, 0x54, 0x34, 0x33, 0x30, 0xAE, 0x04};
	uint8_t read_data = 0x00;

  /* Placeholder for user application code. The while loop below can be replaced with user application code. */
 while(1U)
 {
      UART_Receive(&UART_0, &read_data, 1); //此函数定义由DAVE直接生成
      delay_100us();
      if(read_data==0x1F)
	  {
	  		delay_5ms();
    		UART_Transmit(&UART_0, send_data, sizeof(send_data));//此函数定义由DAVE直接生成
    		read_data = 0x00;
      }
 }
}

如图
在这里插入图片描述

  1. 轮询方式: 设备之间可以通过轮询的方式进行通信,即每个设备在特定的时间间隔内依次发送数据。这样可以确保每个设备都有机会在总线上发送数据,减少冲突。

  2. 主从架构: 在系统中设定一个主设备,其他设备作为从设备,只有在主设备允许的情况下才能发送数据。主设备可以控制从设备发送数据的时机,从而避免冲突。

  3. 通信协议: 设计合理的通信协议,定义数据传输的时序和规则,确保每个设备都遵循协议要求,避免冲突发生。

总之,为了避免RS485通信中的总线冲突,需要在设计通信系统时充分考虑设备之间的通信时序,并采取适当的措施,如引入延时、采用轮询方式或设计合理的通信协议。这样可以确保通信的稳定性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/949523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经典问题解析四

关于动态内存分配 new 和 malloc 的区别是什么&#xff1f; delete 和 free 的区别是什么&#xff1f; new 关键字与 malloc 函数的区别 new 关键字是 C 的一部分 malloc 是由 C 库函数提供的函数 new 是以具体类型为单位进行内存分配 malloc 以字节为单位进行内存分配 …

webrtc-m79-msvc编译H264

0 写在前面 本文主要参考&#xff1a;webrtc 4577版本vs编译_tusong86的博客-CSDN博客 感谢作者的付出&#xff1b; 1 编译参数 powershell运行&#xff1a; // debug 需要编译参数 enable_iterator_debuggingtrue gn gen h264-debug-m79 --argsis_debugtrue use_lldfalse …

电脑日历怎么添加日程?如何在电脑上设置日程提醒?

在办公室使用电脑办公时&#xff0c;我们需要在电脑日历上添加日程&#xff0c;以便及时提醒自己工作中的重要事件。比如&#xff0c;我们需要安排明天的会议时间、发送重要文件的截止日期&#xff0c;或者是提醒自己去参加一个重要的客户洽谈会。这些日程安排对于我们的工作效…

财报解读:上半年GMV超50亿元,交个朋友瞄准了更广阔的市场

于今年7月曲线上市的交个朋友交出了首份“答卷”。 近日&#xff0c;交个朋友控股披露了2023年上半年财报&#xff0c;营收4.33亿元&#xff0c;同比增长215.5%&#xff1b;经调整净利润约9463.5万元&#xff0c;同比暴增1798%&#xff1b;全网合计GMV超50亿元。 图源&#xf…

strtok函数

目录 分隔函数 strtok 函数原型&#xff1a; 参数&#xff1a; 返回值&#xff1a; 代码演示&#xff1a; 函数解析&#xff1a; 注意事项&#xff1a; 分隔函数 strtok 函数原型&#xff1a; char * strtok ( char * str, const char * sep); 参数&#xff1a; str—要…

vue-drag-resize实现拖拽,座椅摆放

插件&#xff1a; vue-drag-resize <div class"drag-resize"><!-- https://juejin.cn/post/6844903713430061063isActive 是否激活状态 Default: falsew,h 组件宽度,高度 Default: 200--><VueDragResize :isActive"true" :w"100&qu…

筑牢数据隐私安全底线,ADSCOPE通过ISO隐私信息管理体系认证!

数字时代&#xff0c;信息安全尤其是数据隐私信息保护已经成为社会共识。近日&#xff0c;ADSCOPE&#xff08;上海倍孜网络技术有限公司&#xff09;已通过相关组织机构评审&#xff0c;符合ISO/IEC 27701&#xff1a;2019标准&#xff0c;获得隐私信息管理体系认证证书&#…

Zabbix“专家坐诊”第202期问答汇总

问题一 Q&#xff1a;请问一下 zabbix 里面怎么能创建出和sh文件有关联的监控项&#xff1f; A&#xff1a; 1.使用 Zabbix Agent 主动模式&#xff1a;如果你在目标主机上安装了 Zabbix Agent&#xff0c;并且想要监控与 sh 文件相关的指标&#xff0c;可以创建一个自定义的…

学乐多光屏 P90:打开儿童学习新视界

随着科技迅猛发展&#xff0c;儿童教育正在迎来一场前所未有的革命。在这个数字化时代的浪潮中&#xff0c;学乐多光屏P90凭借其卓越的特性和深远的教育理念&#xff0c;成为智能儿童学习领域的引领者&#xff0c;为孩子们创造了崭新的学习体验。 创新科技&#xff0c;引领学习…

(数字图像处理MATLAB+Python)第十章图像分割-第四,五节:分水岭分割和综合案例

文章目录 一&#xff1a;分水岭分割&#xff08;1&#xff09;原理&#xff08;2&#xff09;程序 二&#xff1a;综合案例&#xff1a;答题卡图像分割&#xff08;1&#xff09;设计思路&#xff08;2&#xff09;各模块设计&#xff08;3&#xff09;代码 一&#xff1a;分水…

通信原理板块——基础知识(四)

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 10、确知信号的时域性质主要包括自…

自然语言处理(NLP)是什么?

NLP(自然语言处理) 和 Phoebe Liu 的简介 您有没有和聊天机器人互动过&#xff1f;或者您是否向虚拟助手&#xff0c;例如 Siri、Alexa 或您车上的车载娱乐系统发出过某些请求&#xff1f;您使用过在线翻译吗&#xff1f;我们大多数人都曾与这些人工智能 (AI) 互动过&#xff…

校园用电安全管理系统可以识别违规电器吗

校园用电安全管理系统是处理恶意用电问题有效手段之一&#xff0c;系统具有实时监测、异常预警、监测设备运行状态、远程控制用电等功能&#xff0c;可以从根本上管理学校用电量&#xff0c;制定合理的用电计划&#xff0c;限制用电成本&#xff0c;避免各种恶意用电行为&#…

windows环境搭建ELK

目录 资源下载&#xff08;8.9.1&#xff09; ES安装、注册、使用 Kibana安装、注册、使用 Logstash安装、注册、使用 Filebeat安装、使用&#xff08;如果只有一个数据流&#xff0c;则不需要使用filebeat&#xff0c;直接上logstash即可&#xff09; 资源下载&#xff0…

关于商品活动的H5页面技术总结

背景 在单个html文件里面使用vue3、jquery等其他第三方js库&#xff0c;实现规定的页面效果&#xff0c;其中主要功能是从商品json数据中读取数据&#xff0c;然后可以通过搜索框、下拉框、左侧菜单来筛选商户信息。 页面布局 技术要点&#xff1a; 1、通过路由来进行页面布…

Django实现音乐网站 ⒁

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是歌手页-全部歌手页功能开发。 目录 分出首页样式内容 创建首页样式文件 首页引入样式文件 全部歌手列表 创建路由 显示视图 引入分页实现库 视图方法 创建歌手首页 增加歌手跳转 导航条改活 首页增加…

移动端通讯录相关代码

vue3更新版本 附件地址 代码在附件里噜 太多了不好贴

EMC 性能优异的ISO7761QDBQQ1、ISO7762QDWQ1、ISO7741QDWWQ1、ISO7710QDRQ1汽车类数字隔离器

一、EMC 性能优异的 ISO776x-Q1 高速、增强型六通道数字隔离器 ISO776x-Q1 器件是高性能六通道数字隔离器&#xff0c;可提供符合 UL 1577 的 5000VRMS&#xff08;DW 封装&#xff09;和 3000VRMS&#xff08;DBQ 封装&#xff09;隔离额定值。该系列器件还通过了VDE、CSA、T…

2023_Spark_实验二:IDEA安装及配置

一、下载安装包 链接&#xff1a;百度网盘 请输入提取码 所在文件夹&#xff1a;大数据必备工具--》开发工具(前端后端)--》后端 下载文件名称&#xff1a;ideaIU-2019.2.3.exe &#xff08;喜欢新版本也可安装新版本&#xff0c;新旧版本会存在部分差异&#xff09; IDEA …

极智AI | 地平线天工开物工具链部署流程详解

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 地平线天工开物工具链部署流程详解。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 地平线天工开物工具链从完备…