您的位置 首页 设计

STM32 CAN过滤器设置

看来还是很多人不会设置过滤器,我也看了很久才会,大家先去看一个寄存器CAN_TIxR(x=0~2)发送邮箱标识寄存器标准帧在31~21位共11位ST

看来仍是很多人不会设置过滤器,我也看了好久才会,我们先去看一个寄存器CAN_TIxR(x=0~2) 发送邮箱标识寄存器

规范帧在 31~21位共11位 STID[10:0]

扩展帧在 20~3 位共29位 EXID[17:0]+STID[10:0]

0~2 位分别为 TXRQ ,RTR ,IDE

uint16_t CAN_ID = 0x0101
uint32_t ExCAN_ID= 0x10001

所以设置标位帧ID过滤应该这样设:

CAN_FilterInitStructure.CAN_FilterIdHigh = CAN_ID<<5;
CAN_FilterInitStructure.CAN_FilterIdLow= 0;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC;//RTR 可认为数据帧也能够远帧
//留意接纳到对方的数据帧的标志寄存器中的TXRQ肯定是为0的,IDE表明标志符形式(标志or扩展),RTR表明是数据帧仍是长途帧

扩展帧ID过滤应该这样设:
CAN_FilterInitStructure.CAN_FilterIdHigh = (uint16_t)(ExCAN_ID>>(29-16));//取高16位
CAN_FilterInitStructure.CAN_FilterIdLow= (uint16_t)(ExCAN_ID<<3)|CAN_ID_EXT;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow0xFFFC;//RTR 可认为数据帧也能够远帧

今日刚学会,我们有不明白能够问,不过一般官方材料里就有,仔细阅读就能够了,假如你想两种帧都接纳,那就把IDE位也屏蔽掉

能够这样CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC&(~CAN_ID_EXT);

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/258408.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部