请选择 进入手机版 | 继续访问电脑版

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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版