没有合适的资源?快使用搜索试试~ 我知道了~
首页STM32 CAN详解
资源详情
资源评论
资源推荐

STM32
STM32
STM32
STM32 CAN
CAN
CAN
CAN 发送和接收过滤原理
通过对 CANBUS 协议的理解 , 我们知道 : CAN 总线上的节点接收或发送数据都是以帧为单
位的 ! ! ! CAN 协议规定了好几种帧类型,但是对于我们应用来说,只有数据帧和远程帧可
以通过软件编程来控制 。 ( 其他几种帧都是由 CAN 控制器硬件实现的 , 我们想管也管不了 )
。
而数据帧和远程帧最大的区别在于 : 远程帧没有数据域 。 数据帧分为标准数据帧和扩展数据
帧,它们之间最大的区别在于:标识符 (ID) 长度不同(标准帧为 11 位,扩展帧为 29 位 ) 。
为了能更好地理解下面的内容,让我们先来回忆一下标准数据帧是什么样子的:
我们首先来看发送:
前面已经强调了 CAN 总线上的节点接收或者发送数据都是以帧为单位。假如我们要发送一个字节的
数据 : 0x5A, 是不是像串口发送数据那样 , 直接把 0x5A 写入发送缓冲寄存器 , 然后发送就可以了呢?
NO ! 刚才已经强调了 , CA N 总线上的数据都是以帧为单位的 ! ! ! 我们必须按照帧的格式填充它 ! TNND
,
这么复杂?没关系 , ST 库函数已经提供了一个结构 , 我们只需要填充该结构就可以了 。 我们来看一下
这个结构的样子:
typedef struct
{
uint32_t StdId; // 标准帧 ID ,如果您要发送扩展帧。可以不管它
uint32_t ExtId; // 扩展帧 ID ,如果您要发送标准帧。可以不管它
uint8_t IDE; // 您是想发送标准帧还是扩展帧?
uint8_t RTR; // 您是想发送数据帧还是远程帧?
uint8_t DLC; // 您想发送数据的长度。
uint8_t Data[8]; // 您想要发送的数据。
} CanTxMsg;
StdId
StdId
StdId
StdId
StdId 用来设定标准标识符。它的取值范围为 0 到 0x7FF 。
ExtId
ExtId
ExtId
ExtId
ExtId 用来设定扩展标识符。它的取值范围为 0 到 0x 1FFF FFFF 。
IDE
IDE
IDE
IDE
IDE 用来设定消息标识符的类型 。
IDE
IDE
IDE
IDE 值
IDE
IDE
IDE
IDE
描述
CAN_Id_Standard
使用标准标识符
CAN_Id_Extended
使用扩展标识符
北极星电子 : http://shop100838061.taobao.com/
http://shop100838061.taobao.com/
http://shop100838061.taobao.com/
http://shop100838061.taobao.com/
提供 USBCAN/PCICAN/CAN
USBCAN/PCICAN/CAN
USBCAN/PCICAN/CAN
USBCAN/PCICAN/CAN 协议分析仪等 CAN
CAN
CAN
CAN BUS
BUS
BUS
BUS 相关产品



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0