当前位置: 首页 > article >正文

STM32 CAN学习(一)

CAN总线应用最多的是汽车领域。

CAN(Controller Area Network)控制器 局域 网

局域网:把几台电脑连接到一台路由器上,这几台电脑就可以进行通讯了。

控制器在汽车中的专业术语叫做ECU(Electronic Control Unit),可以看做是一台超小型计算机,内部集成了供电系统,单片机,驱动系统,是汽车里面最小的控制模块。

为了能让ECU之间进行通信,人们设计了一种CAN协议。

在这里插入图片描述
CAN总线在最开始是为了减少铜线的长度而开发的。

如果不使用CAN总线,就会使用数倍长的铜线,而且线束还非常杂乱。
在这里插入图片描述
而通过CAN,这么多ECU只需要挂载到CAN总线上,就可以组成局域网通信了。
在这里插入图片描述
要进行CAN通讯,需要专门的CAN收发芯片。
在这里插入图片描述
在这里插入图片描述
经过CAN收发器后,普通信号会被转化为差分信号。
在这里插入图片描述
差分线是用两根线表示一个信号。

如果我们给CAN收发器发送一个低电平,它的两根线分别输出3.5V和1.5V,它们的电压差是2V,这是显性电平,表示逻辑0。
在这里插入图片描述
发送高电平时,两根线都输出2.5V,压差是0V,表示逻辑1。
在这里插入图片描述
同样的,CAN收发器也可以把接收到的差分信号,转化为普通电平信号。

如果是普通信号,它只有一根线,当某一点受到干扰,它的电平就会发生跳变,这样就会导致传输出现错误。
在这里插入图片描述
长距离传输时,很容易出现错误。

CAN通讯采用的差分信号是两根线共同作用,而且是双绞线缠绕。这样即使受到干扰,也是两根线同时受到干扰,它们的压差也会保持不变。

在这里插入图片描述

所以CAN信号可以传输的距离很长,可达1000米。

CAN通讯传递的数据帧

第一位是起始位,一定是逻辑0。
接下来的11位是识别码,根据11位识别码,就可以知道这一帧数据是发送给哪个设备的。
在这里插入图片描述
每一个设备都有属于自己的11位识别码。

RTR位是用来区分是数据帧还是远程请求帧。

  • 如果是远程请求帧,这一位是1。
  • 数据帧,就是0。

接下来六位是控制码,用于控制数据长度。

  • IDE位用于区分标准格式和拓展格式。
    在这里插入图片描述

在这里插入图片描述
因为CAN总线上挂载了很多ECU,如果两个ECU同时发送信息,哪一个设备发送的信息优先呢?
这就得看11位的识别码,它不仅是设备的唯一识别码,还代表了优先级。

在这里插入图片描述
当总线同时出现逻辑0和逻辑1时,总线会被置为逻辑0,此后上面的数据帧就不会再发送了。


http://www.kler.cn/a/613549.html

相关文章:

  • [C++开发经验总结]何时用push?/何时用emplace?
  • 鸿蒙学习笔记(3)-像素单位、this指向问题、RelativeContainer布局、@Style装饰器和@Extend装饰器
  • 【NLP 50、损失函数 KL散度】
  • Unity 简单使用Addressables加载SpriteAtlas图集资源
  • java使用aspose添加多个图片到word
  • 3.27-1 pymysql下载及使用
  • Stable Diffusion 基础模型结构超级详解!
  • 用 pytorch 从零开始创建大语言模型(七):根据指示进行微调
  • TextGrad:案例
  • 横扫SQL面试——事件流处理(峰值统计)问题
  • SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)
  • CSS回顾-Flex弹性盒布局
  • Vue $bus被多次触发
  • 【WPF】ListView数据绑定
  • 【AI工具开发】Notepad++插件开发实践:从基础交互到ScintillaCall集成
  • C语言之链表
  • 分布式光伏防逆流如何实现?
  • 每日免费分享之精品wordpress主题系列~DAY16
  • 云原生四重涅槃·破镜篇:混沌工程证道心,九阳真火锻金身
  • 可视化图解算法:递归基础