STM32之间CAN协议通讯

本教程将介绍 STM32 中的基本 CAN 协议。 在这里我们将看到,如何使用 CAN 协议在两个 STM32 板之间进行通信。

CAN协议介绍

我不打算在这里解释每一个小细节,而是只关注一些重要的事情。

CAN(Controlled Area Network)协议是不同设备之间的一种通信方式,但有一定的规则。当消息通过 CAN 总线传输时,必须遵循这些规则。在这里,我们将看到这些规则。

下面显示的是标准 CAN 帧

  • 这里,Identifier是发送设备的ID

  • RTR(远程传输请求)指定数据是远程帧还是数据帧

  • IDE 指定我们使用的是标准 ID 还是扩展 ID

  • r 是保留位

  • DLC 以 Bytes 为单位指定数据长度

  • 数据字段是我们可以发送数据的地方,最多应该是 8 个字节

  • Checksum 和 DEL 是 CRC 数据,它是分隔符

  • ACK 和 DEL 是确认位,它是分隔符

在本教程中,我们将只看到数据字段。 CRC 和 ACK 将由 HAL 库处理。

连接和配置
修改 CAN 数据帧
Filter配置

  • FilterActivation 指定我们是否要启用过滤器。显然我们必须启用它们

  • SlaveStartFilterBank 指定我们要为 CAN1 分配多少个滤波器组。 基本上带有双 CAN 外设的控制器有 28 个滤波器组,它们可以分布在这 2 个 CAN 之间。 在这里,我将 20 个滤波器组分配给 CAN1,其余分配给 CAN 2。该参数对于具有单个 CAN 外设的控制器无用。这些控制器有 14 个滤波器组(0 到 13)

  • FilterBank 指定我们要为过滤器进程使用哪个过滤器组。这里我为 CAN 1 分配了 20 个 Banks,我只能从这 20 个 Banks 中选择。所以我选择18号银行。如果是 Single CAN Peripheral,您可以选择 0 到 13 之间的任何值。

  • FilterFIFOAssignment 指定我们将用于接收消息的 FIFO。通常我们有 2 个 FIFO(FIFO 0 和 FIFO 1)。我选择 FIFO 0。

  • FilterMode 指定我们要使用哪种类型的过滤器。 我们在 STM32 中有两种类型的滤波器。 MASK MODE,其中掩码寄存器将用于将 ID 寄存器中的某些特定位与传入的 ID 进行比较。 和 LIST MODE,其中传入的 ID 直接与 ID 寄存器中设置的 ID 进行比较。我在这里使用 MASK 模式,因为它似乎更有用。

  • FilterScale 指定我们是否要使用一个 32 位过滤器寄存器,或 2 个 16 位过滤器寄存器。我在这里使用一个 32 位寄存器。

  • FilterIdHigh 是 ID 寄存器的高 16 位。该寄存器中设置的值将与传入标识符进行比较。这里我决定只比较传入消息的 STD ID,这就是我将值移动 5 的原因。 STD ID 从 ID HIGH 寄存器的第 5 位开始

  • FilterMaskIdHigh 是 MASK 寄存器的高 16 位。该寄存器中设置的值将使 ID 寄存器中的该特定位与传入 ID 的位进行比较。

最后 2 点可能难以理解,因此我建议您观看下面的视频。使用工作示例可以更好地解释它,这在视频中显示。

源代码

详情参阅 - 亚图跨际

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值