你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103 CAN通讯过滤器如何设置?

[复制链接]
qazplm3218 提问时间:2019-8-24 16:03 /
代码:
CAN_FilterInitStructure.CAN_FilterIdHigh= (((((u32)0x01 <<21)&0xFFFF0000)>>16));  
CAN_FilterInitStructure.CAN_FilterIdLow= ((((u32)0x01<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xFFFF) ;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;                        
CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFF;
问题1:以上代码设置是只要ID为0x01发送过来的数据,才会触发接收中断,其他ID发送过来的数据都不会触发接收中断?

问题2:为什么要左移21位,右移16位??
问题3:如果接收多个ID要这么设置,比如:0x01,0x02,0x03

<
收藏 1 评论3 发布时间:2019-8-24 16:03

举报

3个回答
tanic 回答时间:2019-8-24 16:36:21
没用过,不过好像是换一种滤波模式吧
哀歌与世无争 回答时间:2019-8-24 17:04:40

1. 标准帧ID是11位放在寄存器位31:21,所以左移21
2. 32位被拆分成高低16字节,所以在设置CAN_FilterIdHigh的时候要右移16位才能取到高16位


3.你说只有收到0x01才能触发中断,看来设置的是屏蔽位模式,如果要接收0x02,0x03,可以将相应位设置为不关心,例如
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;                        
CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC;
就能接收0x00-0x03的报文了

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

qazplm3218 回答时间:2019-8-25 21:45:58
哀歌与世无争 发表于 2019-8-24 17:04
1. 标准帧ID是11位放在寄存器位31:21,所以左移21
2. 32位被拆分成高低16字节,所以在设置CAN_FilterIdHig ...

谢谢您的解惑!!!

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版