本教程将介绍 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 之间的任何值。
FilterMode 指定我们要使用哪种类型的过滤器。 我们在 STM32 中有两种类型的滤波器。 MASK MODE,其中掩码寄存器将用于将 ID 寄存器中的某些特定位与传入的 ID 进行比较。 和 LIST MODE,其中传入的 ID 直接与 ID 寄存器中设置的 ID 进行比较。我在这里使用 MASK 模式,因为它似乎更有用。
本教程将介绍 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 之间的任何值。
FilterMode 指定我们要使用哪种类型的过滤器。 我们在 STM32 中有两种类型的滤波器。 MASK MODE,其中掩码寄存器将用于将 ID 寄存器中的某些特定位与传入的 ID 进行比较。 和 LIST MODE,其中传入的 ID 直接与 ID 寄存器中设置的 ID 进行比较。我在这里使用 MASK 模式,因为它似乎更有用。