打印
[STM32F1]

STM32 CAN发送和接收过滤原理

[复制链接]
508|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
beacherblack|  楼主 | 2024-2-25 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32 CAN发送和接收过滤原理
通过对 CANBUS 协议的理解 , 我们知道 : CAN 总线上的节点接收或发送数据都是以帧为单位的 ! ! ! CAN 协议规定了好几种帧类型,但是对于我们应用来说,只有数据帧和远程帧可以通过软件编程来控制 。 ( 其他几种帧都是由 CAN 控制器硬件实现的 , 我们想管也管不了 ) 。而数据帧和远程帧最大的区别在于 : 远程帧没有数据域 。 数据帧分为标准数据帧和扩展数据帧,它们之间最大的区别在于:标识符 (ID) 长度不同(标准帧为 11 位,扩展帧为 29 位 ) 。为了能更好地理解下面的内容,让我们先来回忆一下标准数据帧是什么样子的:


1 :假如我们只想收到别人发过来的 ID 为 0x317 的标准数据帧:
0X317 二进制位: 011 0001 0111
那么可以这样设置 :


种标准数据帧了。
以上是 32 位模式下标识符屏蔽模式和标识符列表模式下的设置方法。
在 16 位模式下,只不过把两个 32 位寄存器拆成了 4 个 16 位的而已,原理和 32 位模式下是一样的。就不赘述了。
接收数据是通过指向 Can Can Can Can R R R R xMsg xMsg xMsg xMsg 结构体变量的指针传递的。直接调用 CAN_Receive 即可轻松完成。
typedef struct
{
uint32_t StdId;
uint32_t ExtId;
uint8_t IDE;
uint8_t RTR;
uint8_t DLC;
uint8_t Data[8];
uint8_t FMI;
} CanRxMsg;
CanRxMsg 结构与 CanTxMsg 差不多。只是多了一个 FMI 域。

FMI
FMI 设定为消息将要通过的过滤器索引 , 这些消息存储于邮箱中 。 该参数取值范围 0 到0xFF 。

使用特权

评论回复
沙发
tpgf| | 2024-3-4 15:32 | 只看该作者
就是那么多位数对0和1的过滤罢了

使用特权

评论回复
板凳
磨砂| | 2024-3-4 16:17 | 只看该作者
各个厂家的芯片can操作应该都是类似的

使用特权

评论回复
地板
xiaoqizi| | 2024-3-4 17:34 | 只看该作者
请问can总线的扩展帧会兼容标准帧吗

使用特权

评论回复
5
wowu| | 2024-3-4 18:06 | 只看该作者
对帧id的过滤方式和can的帧类型有关系吗

使用特权

评论回复
6
木木guainv| | 2024-3-6 17:34 | 只看该作者
我设置完成之后为什么不能拦截成功呢  是哪里没有开启吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

1245

帖子

1

粉丝