本文介绍: > 16:最后将上一步的结果右移16位。因此,整个操作的目的是从32位的slave_id中提取出低16位,并将扩展帧和数据帧标志位添加到其中,最后进行掩码操作,得到最终的ID低位部分,并放置到CAN_FilterInitStructure.CAN_FilterIdLo中,以用作CAN过滤器的ID低位部分。因此,整个操作的目的是从32位的slave_id中提取出高16位,并放置到CAN_FilterInitStructure.CAN_FilterIdHigh中,以用作CAN过滤器的ID高位部分。
CAN
一、配置
(slave_id=0x18010001为只接收的id号):
1、对扩展数据帧进行过滤:(只接收扩展数据帧)
CAN_FilterIdHigh:
这一步是为了从32位的slave_id中提取出高16位作为CAN过滤器的ID高位部分。
(u32)slave_id << 3:首先将slave_id强制转换为32位的无符号整数(u32),然后将其左移3位。这是为了将slave_id向左移动3位,为后续的位运算做准备。
& 0xFFFF0000:然后将结果与0xFFFF0000进行按位与操作。0xFFFF0000是一个32位的十六进制数,它的二进制表示是11111111111111110000000000000000。这个操作会将结果的低16位全部变为0,只保留高16位的内容。>> 16:最后将上一步的结果右移16位。这个操作是为了将之前保留的高16位部分移到最低的16位中,这样就得到了最终的ID高位部分。
因此,整个操作的目的是从32位的slave_id中提取出高16位,并放置到CAN_FilterInitStructure.CAN_FilterIdHigh中,以用作CAN过滤器的ID高位部分。
CAN_FilterIdLow:
2、对扩展远程帧过滤:(只接收扩展远程帧)
3、对标准远程帧过滤:(只接收标准远程帧)
4、对标准数据帧过滤:(只接收标准数据帧)
5、对扩展帧进行过滤:(只接收扩展帧)
6、对标准帧进行过滤:(只接收标准帧)
二、CAN过滤器详解
2.1 过滤器
2.2 过滤器的过滤模式
2.2.1 屏蔽位模式
2.2.2 标识符列表模式
2.3 过滤器的位宽
2.3 过滤器组的过滤模式和位宽设置
2.4 过滤器匹配序号
2.5 过滤器优先级规则
三、CAN ID值的结构分析
3.1位宽为32位的屏蔽模式
3.2示例
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。