CAN总线详解

2023-05-16

目录

  • CAN 协议简介
    • 1,何为CAN?
      • 1.1 CAN的应用实例
      • 1.2 总线拓扑图
      • 1.3 CAN的特点
    • 2,CAN 电气属性
    • 3,CAN 协议
      • 3.1 数据帧
      • 3.2 遥控帧
      • 3.3 错误帧
      • 3.4 过载帧
      • 3.5 间隔帧
      • 3.6 优先级的决定
      • 3.7 位填充
      • 3.8 错误的种类
      • 3.9 错误帧的输出
      • 3.10 位时序
      • 3.11 取得同步的方法
      • 3.12 硬件同步
      • 3.13 再同步
      • 3.14 调整同步的规则
    • 4,错误
      • 4.1 错误状态的种类
      • 4.2 错误计数值

CAN是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车领域,汽车上大量的传感器与模块都是通过CAN总线连接起来的。CAN总线目前是自动化领域发展的热点技术之一,由于其高可靠性,CAN总线目前广泛的应用于工业自动化、船舶、汽车、医疗和工业设备等方面。目前主流控制器都自带CAN接口,因此可以开发CAN相关的设备。

CAN 协议简介

有关CAN协议详细内容请参考资料《CAN入门教程》,百度网盘可以下载:

链接:https://pan.baidu.com/s/1cQ-xXt9lgylTMyTxEtTKig 
提取码:98ip 

1,何为CAN?

CAN的全称为 Controller Area Network,也就是控制局域网络,简称为CAN。CAN最早是由德国 BOSCH(博世)开发的,目前已经是国际标准(ISO 11898),是当今应用最广泛的现场总线之一。BOSCH主要是做汽车电子的,因此CAN一开始主要是为汽车电子准备的,事实也是如此,CAN协议目前已经是汽车网络的标准协议。当然,CAN不仅仅应用于汽车电子,经过几十年的发展,CAN协议的高性能和高可靠性已经得到了业界的认为,目前除了汽车电子以外也广泛应用于工业自动化、医疗、工业和船舶等领域。

以汽车电子为例,汽车上有空调、车门、发动机、大量的传感器等,这些部件都是通过CAN总线连在一起形在一个网络,车载网络结构如下图:
在这里插入图片描述上图中的各个单元通过CAN总线连接在一起,每个单元都是独立的CAN节点。同一个CAN网络中所有单元的通信速度必须一致,不同的网络之间通信速度可以不同。如上图中的125Kbps的CAN网络下所有节点速度都是125Kbps的,整个网络由一个网关与其它网络连接。

1.1 CAN的应用实例

在这里插入图片描述

1.2 总线拓扑图

CAN控制器根据两根线上的电位差判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使用总线电平发生变化,将消息发送给接收方。
在这里插入图片描述

1.3 CAN的特点

CAN的特点主要有以下几点:
①、多主控制
在总线空闲时,所有单元都可以发送信息(多主控制),而两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID )决定优先级。ID并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可以继续发送消息,仲裁失利的单元则立刻停止发送转而进行接收工作。

②、系统的柔软性
与总线相连的单元没有类似于"地址"的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

③、通信速度快,距离远
最高 1Mbps (距离小于 40m),最远可达10km (速率低于 5Kbps)。

④、具有错误检测、错误通知和错误恢复功能
所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

⑤、故障封闭功能
CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

⑥、连接节点多
CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

2,CAN 电气属性

CAN总线使用两根线来连接各个单元:CAN_H 和 CAN_L,CAN控制器通过判断这两根线上的电位差来得到总线电平,CAN总线电平分为显性电平和隐性电平两种。
显性电平 表示逻辑"0",此时CAN_H 电平比 CAN_L 高,分别为3.5V 和 1.5V,电位差为2V。
隐性电平 表示逻辑"1",此时CAN_H 和 CAN_L 电压都为2.5V,电位差为0V。
CAN总线就通过显性和隐性电平的变化来将具体的数据发送出去,如下图:
在这里插入图片描述
CAN总线上没有节点传输数据的时候一直处于隐性状态,也就是说总线空闲状态的时候一直处于隐性。CAN网络中的所有单元都通过 CAN_H 和 CAN_L 这两根线连接在一起,如下图:
在这里插入图片描述
途中所有的CAN节点单元都采用 CAN_H 和 CAN_L 这两根线连接在一上起,CAN_H 接 CAN_H、CAN_L接CAN_L,CAN总线两端要各接一个120Ω的端接电阻,用于匹配总线阻抗,吸收信号反射及回波,提高数据通信的抗干扰能力以及可靠性。

CAN总线传输速度可达 1Mbps/S,最新的CAN-FD最高速度可达 5M/bps/S,甚至更高,CAN-FD先不学习,后面需要补充的时候再补充。

CAN传输速度和总线距离有关,总线距离越短,传输速度越快。

3,CAN 协议

通过CAN总线传输数据是需要按照一定协议的,CAN协议提供了5种格式来传输数据:
数据帧、
摇控帧、
错误帧、
过载帧、
帧间隔

其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有11位标识符(ID),扩展格式有29个标识符(ID)。以下是这5种帧用途。

帧类型帧用途
数据帧用于CAN节点单元之间进行数据传输的帧
遥控帧用于接收单元向具有相同 ID 的发送单元请求数据的帧
错误帧用于当检测出错误时向其它单元通知错误的帧
过载帧用于接收单元通知其尚未做好接收准备的帧
间隔帧用于将数据帧及遥控帧与前面的帧分离开来的帧

3.1 数据帧

数据帧由7段组成:
①、帧起始,表示数据帧开始的段。
②、仲裁段,表示该帧优先级的段。
③、控制段,表示数据的字节数及保留位的段。
④、数据段,数据的内容,一帧可发送 0~8 个字节的数据。
⑤、CRC段,检查帧的传输错误的段。
⑥、ACK段,表示确认正常接收的段。
⑦、帧结束,表示数据帧结束的段。
数据帧结构如下图:
在这里插入图片描述上图给出了数据帧标准格式和扩展格式两种帧结构,图中 D 表示显性电平0、R表示隐性电平1、D/R表示显性或隐性,也就是0或1。下面分析这7个段。

①、帧起始
帧超始很简单,标准格式和扩展格式都是由一个位的显性电平0来表示帧起始。

②、仲裁段
仲裁段表示帧优先级,仲裁段结构如下图:
在这里插入图片描述标准格式和扩展格式的仲裁段不同,标准格式 的ID为11位,发送顺序是为ID10 到 ID0,最高7位 ID10 ~ ID4不能全为隐性(1),也就是禁止0x1111 111x xxx 这样的ID。扩展格式的ID为29位,基本ID从 ID28 到 ID18,扩展ID由 ID17 到 ID0,基本ID与标准格式一样,禁止最高7位都为隐性。

③、控制段
控制段由6个位构成,表示数据段的字节数,标准格式和扩展格式的控制段略有不同,如下图:
在这里插入图片描述上图中的 r1 的 r0 为保留位,保留位必须以显性电平发送。DLC 为数据长度码,高位在前,DLC 段有效值范围为 0 ~ 8。4位的DLC与数据字节数对应关系如下图:
在这里插入图片描述

④、数据段
数据段也就是帧的有效数据,标准格式和扩展格式相同,可以包含 0~8 个字节的数据,从最高位(MSB)开始发送,结构如下图:
在这里插入图片描述
注意,上图中数据段的 0~64为bit,对应到字节就是 0 ~ 8字节。

⑤、CRC 段
CRC段保存CRC校准值,用于检查帧传输错误,标准格式和扩展格式相同,CRC段结构如下图:
在这里插入图片描述从上图中可以看出,CRC段由15位的CRC值与1位的CRC界定符组成。CRC值的计算范围包括:帧超始、仲裁段、控制段、数据段,接收方以同样的算法进行计算,然后用讲得到的CRC值与此CRC段进行比较,如果不一致就报错。

⑥、ACK 段
ACK段用来确认接收是否正常,标准格式和扩展格式相同,ACK段结构如下图:
在这里插入图片描述从上图可以看出,ACK段由ACK槽(ACK Slot) 和 ACK 界定符两部分组成。发送单元的ACK,发送2个隐性位,而接收到正确消息的单元在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫 发送ACK/返回ACK。发送ACK的是所有接收单元中接收到正常消息的单元,所谓正常消息是指不包含填充错误、格式错误、CRC错误的消息,这些接收单元既不处于总线关闭也不处于休眠态的所有接收单元中。

⑦、帧结束
最后就是帧结束段,标准格式和扩展格式相同,帧结束段结构如下图:
在这里插入图片描述
从上图可以看出,帧结束段很简单,由7位隐性位构成。

3.2 遥控帧

接收单元向发送单元请求数据的时候就用遥控帧,遥控帧有6个段组成:
①、帧起始,表示数据帧开始的段。
②、仲裁段,表示该帧优先级的段。
③、控制段,表示数据的字节数及保留位的段。
④、CRC段,检查帧的传输错误的段。
⑤、ACK段,表示确认正常接收的段。
⑥、帧结束,表示数据帧结束的段。
遥控帧结构如下图:
在这里插入图片描述从上图可以看出,遥控帧结构基本和数据帧一样,最主要的区别就是遥控帧没有数据段。遥控帧的 RTR 位为隐性的,数据帧的 RTR 位为显性,因此可以通过RTR位来区分遥控帧和没有数据的数据帧。遥控帧没有数据,因此DLC表示的是所请示的数据帧数据长度,遥控帧的其他段参考数据帧的描述即可。

3.3 错误帧

当接收或发送消息出错的时候使用错误帧来通知,错误帧由错误标志和错误界定符两部分组成,错误帧结构如下图:
在这里插入图片描述错误标志有主动错误标志和被动错误标志两种,主动错误标志是6个显性位,被动错误标志是6个隐性位,错误界定符由8个隐性位组成。

3.4 过载帧

接收单元尚未完成接收准备的话就会发送过载帧,过载帧由过载标志和过载界定构成。过载帧结构如下图:
在这里插入图片描述过载标志由6个显性位组成,与主动错误标志相同,过载界定符由8个隐性位组成,与错误帧中的错误界定符构成相同。

3.5 间隔帧

帧间隔用于分隔数据帧和遥控帧,数据帧和遥控帧可以通过插入帧间隔来将本帧与前面的任何帧隔开,过载帧和错误帧前不能插入帧间隔,帧间隔结构如下图:
在这里插入图片描述上图中间隔由3个隐性位构成,总线空闲为隐性电平,长度没有限制,本状态下表示总线空闲,发送单元可以访问总线。延迟发送由8个隐性位构成,处于被动错误状态的单元发送一个消息后的帧间隔中才会有延迟发送。

3.6 优先级的决定

在总线空闲态,最先开始发送消息的单元获得发送权。
当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可以继续发送。实现过程如下图:

在这里插入图片描述上图中,单元1和单元2同时开始向总线发送数据,开始部分他们的数据格式是一样的,故无法区分优先级,直到T时刻,单元1输入隐性电平,而单元2输出显性电平,此时单元1仲裁失利,立刻转入接收状态工作,不再与单元2竞争,而单元2则顺利获得总线使用权,继续发送自己的数据。这就是实现了仲裁,让连续发送显性电平多的单元获得总线使用权。

(1) 数据帧和遥控帧的优先级
具有相同的ID的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性的数据帧具有优先权,可继续发送。如下图:
在这里插入图片描述(2) 标准格式和扩展格式的优先级
标准格式ID与具有相同ID的遥控帧或者扩展的数据帧在总线上竞争时,标准格式的RTR位为显性的具有优先权,可继续发送,如下图:
在这里插入图片描述

3.7 位填充

位填充是为了防止突发错误而设定的功能。当同样的电平持续5位时则添加一个位的反型数据。如下图:
在这里插入图片描述(1) 发送单元的工作
在发送数据帧和遥控帧时,SOF ~ CRC段间的数据,相同电平如查持续5位,在下一个位(第6个位)则要插入1位与前5位反型的电平。

(2)接收单元的工作
在接收数据帧和遥控帧时,SOF ~ CRC段间的数据,相同电平如果持续5位,需要删除下一个位(第6个位)再接收。如果这个第6个位的电平与前5位相同,将被视为错误并发送错误帧。

3.8 错误的种类

错误共有5种。多种错误可能同时发生。
· 位错误
· 填充错误
· CRC错误
· 格式错误
· ACK错误
错误的各类、错误的内容、错误检测帧 和 检测单元如下图:
在这里插入图片描述(1) 位错误
—— 位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出ACK的单元、输出错误的单元来检测。
—— 在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。
—— 在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
—— 发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误。
—— 输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同6个位的值(显性或隐性),并不视为位错误。

(2) 格式错误
—— 即使接收单元检测出 EOF(7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误。
—— 即使接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误。

3.9 错误帧的输出

检测出满足错误条件的单元输出错误标志通报错误。
处于主动错误状态的单元输出的错误标志为主动错误标志;处于被动错误状态的单元输出的错误标志为被动错误标志。
发送单元发送完错误帧后,将再次发送数据帧或遥控帧。(关于错误见第4节)
错误标志输出时序如下图:
在这里插入图片描述

3.10 位时序

CAN总线以帧形式发送数据,但是最终到总线上的就是“0”和“1”这样的二进制数据,这里就涉及到了通信速率,也就是每秒钟发送多少位数据,前面说了CAN2.0最高速率为1Mbps/S。对于CAN总线,一个位分为4个段:
①、同步段(SS)
②、传播时间段(PTS)
③、相位缓冲段 1(PBS1)
④、相位缓冲段 2(PBS2)
这些段由Tq(Time Quantum)组成,Tq是CAN总线的最小时间单位。帧由位构成,一个位由4个段构成,每个段又由若干个Tq组成,这个就是位时序。1位由多少个Tq构成、每个段又由多少个Tq构成等,可以任意设定位时序。通过设定位时序,多个单元同时采样,也可任意设定采样点。各段的作用和Tq数如下图:
在这里插入图片描述1个位的构成如下图:
在这里插入图片描述上图中采样点是指读取总线电平,并将读到的电平作为位值的点。位置在PBS1结束处。根据这个位时序,我们就可以计算CAN通信的波特率了。

3.11 取得同步的方法

CAN协议的通信方法为 NRZ(Non-Return to Zero) 方式。各个位的开头或者结尾没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。

但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。

3.12 硬件同步

接收单元在总线空闲状态检测出帧起始时进行的同步调整。
要检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。
硬件同步的过程如下图:
在这里插入图片描述

3.13 再同步

在接收过程中检测出总线上的电平变化时进行的同步调整。

每当检测出边沿时,根据SJW值通过加长PBS1段,或缩短PBS2段,以调整同步。但如果发生了超出SJW值的误差时,最大调整量不能超过SJW值。

再同步如下图:
在这里插入图片描述

3.14 调整同步的规则

硬件同步和再同步遵从如下规则:
(1) 1 个位中只进行一次同步调整。
(2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
(3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
(4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条 件。
(5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
(6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。

4,错误

4.1 错误状态的种类

单元始终处于 3 种状态之一。
(1) 主动错误状态
主动错误状态是可以正常参加总线通信的状态。

处于主动错误状态的单元检测出错误时,输出主动错误标志。

(2) 被动错误状态
被动错误状态是易引起错误的状态。

处于被动错误状态的单元虽然能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。

处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。

处于被动错误状态的单元检测出错误时,输出被动错误标志。

另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8个位的隐性位)。

(3) 总线关闭态
总线关闭态是不能参加总线上通信的状态。

信息的接收和发送均被禁止。

这此状态依靠发送错误计数接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系如下图:
在这里插入图片描述
在这里插入图片描述

4.2 错误计数值

发送错误计数值和接收错误计数值根据一定的条件发生变化。
错误计数值的变动条件如下图:
一次数据的接收和发送可能同满足多个条件。
错误计数器在错误标志的第一个位出现的时间点上开始计数。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAN总线详解 的相关文章

  • 学习CANopen --- [9] CAN总线的状态检查

    本文讲述如何判断CAN总线是否存在以及是否bus off xff0c 以vcan0进行讲解 xff0c vcan0是虚拟的CAN接口 xff0c 可以把它看做一个软件CAN适配器 xff08 区别于硬件CAN适配器 xff0c 如PeakC
  • CAN扩展帧详解

    寻址方式
  • socketcan_bridge 包 设置多路CAN口 小记

    参考链接 xff1a socketcan bridge ROS Wiki 基于ROS 43 CANopen的SocketCAN驱动在Ubuntu下的应用说明 SzZhangfq的博客 CSDN博客 ros socketcan socketc
  • Linux内核Socket CAN中文文档

    自己在年假中空闲之余翻译的内核中Socket CAN的文档 xff0c 原文地址在 xff1a http lxr linux no linux 43 v2 6 34 Documentation networking can txt 但是这篇
  • ubuntu 使用虚拟can 与 socketCAN使用

    原文链接 xff1a https blog csdn net xiandang8023 article details 127990159 创建虚拟CAN接口 在Linux上能使用虚拟CAN接口之前 xff0c 需要在终端执行以下三个步骤
  • RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

    分析一 xff1a 232串口信号 要点 xff1a RS232 xff0c 全双工 xff0c 采用三线制传输分别为TXD RXD GND xff0c 其中TXD为发送信号 xff0c RXD为接收信号 在RS232中任何一条信号线的电压
  • STM8 CAN总线的IdMask模式的讲解

    http www stmcu org article id 328212 STM8 CAN总线的IdMask模式的讲解 发布时间 xff1a 2016 08 27 来源 xff1a ST社区 标签 xff1a STM8 CAN总线 IdMa
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3
  • CAN总线通信协议详讲

    CAN简介 CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986 年率先提出 此后 xff0c CAN 通过IS
  • CAN为什么会发送失败

    CAN总线调试过程中出现报文发送失败 xff0c 很多工程师都对此只知其一不知其二 xff0c 这里就CAN报文发送失败的问题我们来做一次探讨 在了解CAN报文为什么会发送失败之前我们先看看一条正确的CAN报文到底应该是怎么样的 xff0c
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • linux的socket CAN驱动介绍

    https blog csdn net linyangspring article details 27186911 在linux中 xff0c CAN总线的驱动有两种实现方式 xff1a 字符设备以及socket can驱动 Socket
  • 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

    1 CAN总线的基本概念以及由来 CAN Controller Area Network 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 它起初用于实现汽车内ECU之间可靠的通信 后因其简单实用可靠等特点 而广泛应用于工
  • STMCubeMX5.10版本CAN使用loopback模式自测

    使用芯片 STM32F103C8T6 cube软件版本 5 10 软件包版本为 STM32Cube FW F1 V1 7 0 一 配置时钟为使用外部晶振 并配置为72M 二 使能 can 并配置参数 设置can波特率为500k 并设置为lo
  • 【汽车电子】浅谈汽车四大总线:LIN、CAN、FlexRay、MOST

    目录 1 前言 2 汽车四大总线 2 1 LIN总线 2 1 1 LIN总线概述 2 1 2 LIN总线工作原理 2 2 CAN总线 2 2 1 CAN总线概述 2 2 2 CAN总线工作原理 2 2 3 CAN总线的优点 2 3 Flex
  • CAN资料整理(三):CAN的位时间、同步、位定时

    目录 一 位时间 二 同步 1 硬同步 2 重新同步 三 位定时 1 传播段延迟时间的确定 2 位定时参数确定 由于CAN属于异步通讯 没有时钟信号线 连接在同一个总线网络中的各个节点会像串口异步通讯那样 节点间会使用约定好的波特率进行通讯
  • CAN总线的EMC设计方案

    一 CAN接口EMC设计概述 Controller Area Network简称为CAN 多用于汽车以及工业控制 用于数据的传输控制 在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响 单板内部的干扰也可能通过电缆形成对外辐射
  • STM32学习心得三十二:CAN通信基础知识、原理、配置及实验

    记录一下 方便以后翻阅 主要内容 1 CAN通信基础知识 2 STM32 CAN控制器简介 3 相关实验代码解读 参考资料 STM32中文参考手册 V10 第22章 控制器局域网 bxCAN 实验功能 CAN实验需要两个开发板 系统启动后
  • CAN 为什么需要收发器

    在RTL代码中集成了两个CAN node 打算直接连接将两个node的Rx和Tx对接 发现两个CAN Node无法通信 询问技术支持后才知道必须要收发器 那为什么一定需要收发器呢 除了转换单端的CAN信号用于不同的传输 收发器也会将CANT
  • STM32 CAN/CANFD软件快速配置(HAL库版本)

    STM32 CAN CANFD软件快速配置 HAL库版本 目录 STM32 CAN CANFD软件快速配置 HAL库版本 前言 1 软件编程 1 1 建立工程 1 2 初始化 1 2 1 引脚设置 1 2 2 CAN基本参数设置 1 2 3

随机推荐

  • 基于LLVM的C编译器--lcc——以CLion用SSH连接WSL Ubuntu22.04为例

    Windows 10 22H2CLion 2022 3 1Ubuntu 20 04 xff08 Microsoft Store内的WSL发行版 xff09 一 下载WSL xff0c 换源 xff0c 切换到WSL2 1 1 保证windo
  • Windows有CUDA但是没有nvcc命令

    明明有CUDA xff0c 但是cmd中输入nvcc V无效 但是如果打开anaconda prompt xff0c 输入nvcc V就有效 这可能是因为直接用的pytorch官网命令conda下载安装的 xff0c 然后又没有把anaco
  • win下配置pytorch3d

    一 配置好的环境 xff1a py 3 9 43 pytorch 1 8 0 43 cuda 11 1 cudnn 8 0 43 pytorch3d 0 6 0 43 CUB 1 11 0 你可能觉得pytorch3d 0 6 0版本有点低
  • 【pytorch3d】running build_ext error: [WinError 2] 系统找不到指定的文件

    在win10上安装pytorch3d时 xff0c 遇到如下错误 xff1a running build ext error span class token punctuation span WinError span class tok
  • windows下安装jax

    一 首先下载jaxlib 需要去这个非官方网站去找到适合自己的版本 xff0c 下载到本地 然后使用对应的虚拟环境pip install 该文件名即可 二 然后下载对应的jax 一行命令即可 pip span class token fun
  • STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是 xff1a 单片机给传感器发送一帧数据 xff0c 然后传感器返回单片机一帧有用数据 xff0c 所以串口的收发功能十分重要 STM32cubeMX的配置 时钟和下载方式就不讲了 串
  • W7,显卡型号nvidia geforce 840M,安装tensorflow-gpu

    记录一下 xff0c 以防忘记 1 首先我拿驱动精灵把显卡驱动升到最新 xff0c 然后在NVIDIA 控制面板里查看支持CUDA9 1 xff0c 但是我下载了CUDA9 0 43 cudnn7 0 xff0c 先不用安装 注意 xff0
  • IP和MAC的作用

    IP地址的作用以及MAC地址的作用 MAC地址是一个硬件地址 xff0c 用来定义网络设备的位置 xff0c 主要是数据链路层负责 IP地址是IP协议提供的统一的地址格式 xff0c 为互联网上的每一个网络和每一台主机分配一个逻辑地址 xf
  • SPI简介

    SPI全称是Serial Perripheral Interface xff0c 也就是串行外围设备接口 SPI是Motorola公司推出的一种同步串行接口技术 xff0c 是一种高速 xff0c 全双工的同步通信总线 SPI时钟频率相比I
  • npm 错误码 EMISSINGARG

    EMISSINGARG Error npm ERR node v6 6 0 npm ERR npm v3 10 3 npm ERR code EMISSINGARG npm ERR typeerror Error Missing requi
  • axios.response返回数据格式

    axios response接口中存储的是如下内容 xff1a 96 data 96 是服务器的提供的回复 xff08 相对于请求 xff09 data 96 status 96 是服务器返回的http状态码 status 200 96 s
  • flask实现下载文件、前后端

    采用前后端分离的过程中 xff0c 前端只能下载静态文件中的文件或者url下载文件 但是 xff0c 一般情况下文件要么是远程或者存在于其他文件夹 这种情况就需要采用后端预先下载文件 xff0c 传递给前端 flask有几种文件传输方式 x
  • python+flask 简单并发,使用gevent库

    pip install geventfrom gevent wsgi import WSGIServer 关键这个WSGIServer 127 0 0 1 5000 app serve forever
  • java中Array.remove()方法,源码中不对负索引进行检查

    public E remove int index 检查remove源码是 xff0c 发现 其中对index 的检查仅限于上溢出检查 没有显示的对下溢出进行检查 xff1f rangeCheck index modCount 43 43
  • java- 类名.this.成员 和 this.成员 的区别

    this 成员 xff1a this用于本类中 xff0c 自身的引用 xff0c 调用自身对象属性 类名 this 成员 用于内部内 xff0c 调用外部类的成员 用 外部类 this 表示外部类的引用 xff0c 用以 和 自身类进行区
  • java异常 Exception in thread “main“ java.lang.IllegalArgumentException: Comparison method violates its

    Exception in thread 34 main 34 java lang IllegalArgumentException Comparison method violates its general contract at jav
  • 速查matplotlib-python中画图曲线的形状和颜色

    速查matplotlib python中画图曲线的形状和颜色 在属性值先写颜色 xff0c 后写形状如 xff1a r 红色曲线 b 蓝色短横线 等 字符描述 39 39 实线样式 39 39 短横线样式 39 39 点划线样式 39 39
  • python-pyplot直方图,标注直方图数据

    话不多说 由于自己一直忘记直方图的一些细节 xff0c 经常不用 xff0c 老得百度 xff0c 干脆自己记下来好了 这是直方图的写法与标注直方图的数据写法 如下 from matplotlib import pyplot as plt
  • 从零开始学JetsonTX2----can bus开发

    step by step implementation 搞硬件开发 xff0c 先把技术手册搞到手 这个网页把几乎Jetson tx2的开发资料都汇总了一下 找教程开始配置can所需要系统环境 NIVIDA社区的教程 xff1a https
  • CAN总线详解

    目录 CAN 协议简介1 xff0c 何为CAN 1 1 CAN的应用实例1 2 总线拓扑图1 3 CAN的特点 2 xff0c CAN 电气属性3 xff0c CAN 协议3 1 数据帧3 2 遥控帧3 3 错误帧3 4 过载帧3 5 间