STM32 CAN接收过滤和发送图文详解

上传人:东****0 文档编号:156467292 上传时间:2020-12-18 格式:PDF 页数:5 大小:1.30MB
返回 下载 相关 举报
STM32 CAN接收过滤和发送图文详解_第1页
第1页 / 共5页
STM32 CAN接收过滤和发送图文详解_第2页
第2页 / 共5页
STM32 CAN接收过滤和发送图文详解_第3页
第3页 / 共5页
STM32 CAN接收过滤和发送图文详解_第4页
第4页 / 共5页
STM32 CAN接收过滤和发送图文详解_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《STM32 CAN接收过滤和发送图文详解》由会员分享,可在线阅读,更多相关《STM32 CAN接收过滤和发送图文详解(5页珍藏版)》请在金锄头文库上搜索。

1、STM32STM32STM32STM32 CANCANCANCAN 发送和接收过滤原理发送和接收过滤原理 通过对 CANBUS 协议的理解,我们知道:CAN 总线上的节点接收或发送数据都是以帧为单 位的! ! !CAN 协议规定了好几种帧类型,但是对于我们应用来说,只有数据帧和远程帧可 以通过软件编程来控制。 (其他几种帧都是由 CAN 控制器硬件实现的, 我们想管也管不了)。 而数据帧和远程帧最大的区别在于: 远程帧没有数据域。 数据帧分为标准数据帧和扩展数据 帧,它们之间最大的区别在于:标识符(ID)长度不同(标准帧为 11 位,扩展帧为 29 位) 。 为了能更好地理解下面的内容,让我们

2、先来回忆一下标准数据帧是什么样子的: 我们首先来看发送: 前面已经强调了 CAN 总线上的节点接收或者发送数据都是以帧为单位。假如我们要发送一个字节的 数据:0 x5A,是不是像串口发送数据那样,直接把 0 x5A 写入发送缓冲寄存器,然后发送就可以了呢? NO! 刚才已经强调了, CAN总线上的数据都是以帧为单位的! ! ! 我们必须按照帧的格式填充它! TNND, 这么复杂?没关系,ST 库函数已经提供了一个结构,我们只需要填充该结构就可以了。我们来看一下 这个结构的样子: typedef struct uint32_t StdId;/标准帧 ID,如果您要发送扩展帧。可以不管它 uint

3、32_t ExtId;/扩展帧 ID,如果您要发送标准帧。可以不管它 uint8_t IDE;/您是想发送标准帧还是扩展帧? uint8_t RTR;/您是想发送数据帧还是远程帧? uint8_t DLC;/ 您想发送数据的长度。 uint8_t Data8;/您想要发送的数据。 CanTxMsg; StdIdStdIdStdIdStdId StdId 用来设定标准标识符。它的取值范围为 0 到 0 x7FF。 ExtIdExtIdExtIdExtId ExtId 用来设定扩展标识符。它的取值范围为 0 到 0 x1FFFFFFF。 IDEIDEIDEIDE IDE 用来设定消息标识符的类型。

4、 IDEIDEIDEIDE 值 IDEIDEIDEIDE描述描述 CAN_Id_Standard使用标准标识符 CAN_Id_Extended使用扩展标识符 北极星电子北极星电子: 提供提供 USBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CAN 协议分析仪等协议分析仪等 CANCANCANCAN BUSBUSBUSBUS相关产品相关产品 RTRRTRRTRRTR RTR 用来设定待传输消息的帧类型。它可以设置为数据帧或者远程帧。 RTRRTRRTRRTR 值 RTRRTRRTRRTR描述 CAN_RTR_Dat

5、a 数据帧 CAN_RTR_Remote远程帧 DLCDLCDLCDLC DLC 用来设定待传输消息的帧长度。它的取值范围是 0 到 0 x8。 Data8Data8Data8Data8 Data8包含了待传输数据,它的取值范围为 0 到 0 xFF。 先声明一个 CanTxMsg 类型的变量,然后按照自己具体的需要,填充此结构变量就可 以发送了(帧结构中其他没有填充的部分由硬件自动完成) 。 强调强调:这里的这里的 StdIdStdIdStdIdStdId 或者或者 ExtIdExtIdExtIdExtId 是根据自己的实际需要设置的是根据自己的实际需要设置的!我们先抛开它们所我们先抛开它们

6、所 代表的实际意义,认为它们存在的目的是为了代表的实际意义,认为它们存在的目的是为了“进攻进攻” 。( ( ( (发送出去让别人过滤发送出去让别人过滤) ) ) ) 接下来,我们来看接收,第一个问题就是它是怎样接收的?-过滤! ! !无数的初学 者都倒在了这里。 STM32 参考手册中提到:bxCAN 控制器为应用程序提供了 14 个位宽可变的、可配置的过 滤器组组(130)。 (互联型有 28 个) 。每个过滤器组的位宽都可以独立配置。可以配置成 16 位或者 32 位。 过滤器组还可配置为屏蔽位模式或标识符列表模式。 TNND,看起来好像很复杂! 先来理解一句话:共有14个过滤器组,每个过

7、滤器组每个过滤器组x x x x由由2 2 2 2个个32323232位寄存器位寄存器,CAN_FxRCAN_FxRCAN_FxRCAN_FxR1 1 1 1和和 CAN_FxRCAN_FxRCAN_FxRCAN_FxR2 2 2 2组成。组成。 搞定一个过滤器组,其他的都可以以此类推。搞定一个过滤器组,其他的都可以以此类推。 我们先来看1 个 32 位过滤器-标示符屏蔽的情况CAN_FxRCAN_FxRCAN_FxRCAN_FxR1 1 1 1 作作 IDIDIDID, CAN_FxRCAN_FxRCAN_FxRCAN_FxR2 2 2 2作屏蔽作屏蔽: 先看图: 这里的 ID 是什么意思?

8、难道就是前面所说的发送数据帧里面的 ID?NO!这里的 ID 和自己发 送的帧里面的 ID 没有一点关系。完全是两个东西,在硬件上属于不同的寄存器。强调强调:这这 里的里的 IDIDIDID 也是也是根据自己的实际需要设置的根据自己的实际需要设置的!我们先抛开它们所代表的实际意义我们先抛开它们所代表的实际意义,认为它认为它 们存在的目的是为了们存在的目的是为了“防守防守” 。( ( ( (过滤别人发送过来的帧的过滤别人发送过来的帧的 ID)ID)ID)ID) 这里的屏蔽是什么意思?这里的屏蔽和 ID 共同配合完成过滤。 这里的映像是什么意思?映像的意思就是假定收到的帧收到的帧的 ID 信息。

9、下面举个例子,一切都会一目了然: 北极星电子北极星电子: 提供提供 USBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CAN 协议分析仪等协议分析仪等 CANCANCANCAN BUSBUSBUSBUS相关产品相关产品 1:假如我们只想收到别人发过来的 ID 为 0 x317 的标准数据帧: 0X317 二进制位:011 0001 0111 那么可以这样设置: CAN_FxR1:0110 0010 111X XXXX XXXX XXXX XXXX X00X(ID) CAN_FxR2:1111 1111 1110 0

10、000 0000 0000 0000 0110(屏蔽) 这里是我们设置的想要收到的数据帧的 ID。 这里为 1 的位,意味着收到的数据帧中相应的 ID 位必须和设置的 ID 位一样(必须匹 配)。 2:假如我们想收到别人发过来的 ID 为 0 x310 到 0 x317 的标准数据帧: 那么可以这样设置: CAN_FxR1:0110 0010 xxxX XXXX XXXX XXXX XXXX X00X(ID) CAN_FxR2:1111 1111 0000 0000 0000 0000 0000 0110(屏蔽) 这里的红色 xxx 就代表 000 到 111 的任意组合。 这里为 0 的位,

11、 意味着收到的数据帧中的相应位的 ID 不一定非要与设置的ID 一样(不 用关心)。 这里红色部分表明必须是标准数据帧。 3:假如我们想收到别人发过来的 ID 为 0 x000 到 0 x7FF 的标准数据帧: 那么可以这样设置: CAN_FxR1:xxxx xxxx xxxX XXXX XXXX XXXX XXXX X00X(ID) CAN_FxR2:0000 0000 0000 0000 0000 0000 0000 0110(屏蔽) 接下来看 2 个 32 位过滤器-标识符列表模式,CAN_FxRCAN_FxRCAN_FxRCAN_FxR1 1 1 1 和和 CAN_FxRCAN_FxR

12、CAN_FxRCAN_FxR2 2 2 2 都作为都作为 ID.ID.ID.ID. 这种情况就很简单了。只有收到的帧的 ID 必须和 CAN_FxR1 或者 CAN_FxR2 完全一 样才接收。这样的话,就只能接收两种不同的 ID。 举个例子: 如果我们把 CAN_FxR1 和 CAN_FxR2 设置为下面的样子。 CAN_FxR1:0110 0010 1110 0000 0000 0000 0000 0000(ID) CAN_FxR2:0000 0001 1110 0000 0000 0000 0000 0000(ID) 这样的话,就只能过滤出 ID 为 0 x317(与CAN_FxR1 必

13、须一样)和 0 x00F(与CAN_FxR2 必须一样)两 北极星电子北极星电子: 提供提供 USBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CAN 协议分析仪等协议分析仪等 CANCANCANCAN BUSBUSBUSBUS相关产品相关产品 种标准数据帧了。 以上是 32 位模式下标识符屏蔽模式和标识符列表模式下的设置方法。 在 16 位模式下,只不过把两个 32 位寄存器拆成了 4 个 16 位的而已,原理和 32 位模式下是一 样的。就不赘述了。 接收数据是通过指向CanCanCanCanR R R RxM

14、sgxMsgxMsgxMsg结构体变量的指针传递的。直接调用 CAN_Receive 即可轻松 完成。 typedef struct uint32_t StdId; uint32_t ExtId; uint8_t IDE; uint8_t RTR; uint8_t DLC; uint8_t Data8; uint8_t FMI; CanRxMsg; CanRxMsg 结构与 CanTxMsg 差不多。只是多了一个 FMI 域。 FMIFMIFMIFMI FMI 设定为消息将要通过的过滤器索引, 这些消息存储于邮箱中。该参数取值范围 0 到 0 xFF。 - 北极星电子 CANBUS 周边产品介

15、绍:下面有更详细的产品介绍链接。欢迎大家咨询了解。 PCI8510:基于 PCI 总线的 PC CAN 接口卡。CAN 控制器为 SJA1000.工业级。收发速度达 8000 帧/秒以上。 USBCAN:基于 USB 总线的 PC CAN 接口卡。CAN 控制器为 SJA1000 或者 STM32。并有一路或者两 路 CAN 通道。工业级。接收速度可达 7500 帧/秒。 CANBUS 协议分析仪:基于 USB 总线的 CAN 协议分析仪。可解析 CANOpen J1939 DeviceNet 协议。 以及常规的 CAN 数据分析。 北极星电子北极星电子: 提供提供 USBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CAN 协议分析仪等协议分析仪等 CANCANCANCAN BUSBUSBUSBUS相关产品相关产品 北极星电子北极星电子: 提供提供 USBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CAN 协议分析仪等协议分析仪等 CANCANCANCAN BUSBUSBUSBUS相关产品相关产品

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号