打印
[技术问答]

关于NUC131的CAN问题

[复制链接]
728|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerantone|  楼主 | 2025-3-8 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在使用NUC131芯片,按电梯例程进行了调试,收、发都已OK。

       现在想问下,CAN模块的接收过滤是如何编写的?  例程里没有这块内容。

       我查了CAN.C的库函数,有一个:

        int32_t CAN_SetRxMsgObjAndMsk(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint32_t u32idmask, uint8_t u8singleOrFifoLast)

        想请教下,这个函数如何用? 有例程不?

使用特权

评论回复
沙发
jasontu| | 2025-3-10 10:40 | 只看该作者
设置接收过滤器
1. 标准 ID,掩码模式
仅接收特定 ID 或按掩码接收多个 ID。
CAN_SetRxFilter(CAN0, 0, CAN_STD_ID, 0x100, 0x700);  
0:过滤器编号。
CAN_STD_ID:标准 ID。
0x100:接收的目标 ID。
0x700:掩码,0 表示对应位必须匹配,1 表示忽略该位。
示例

ID:0x100
掩码:0x700
接收的 ID 范围:0x100 到 0x1FF

2. 扩展 ID,掩码模式
CAN_SetRxFilter(CAN0, 1, CAN_EXT_ID, 0x18FF50E5, 0x1FFFFFFF);
0x18FF50E5:目标扩展 ID。
0x1FFFFFFF:掩码,1 表示忽略,0 表示必须匹配。

3. 列表模式(仅匹配特定 ID)
如果 MCU 支持,可以手动添加多个特定的 ID 进行匹配。

CAN_SetRxFilter(CAN0, 0, CAN_STD_ID, 0x123, 0x7FF); // ID 0x123
CAN_SetRxFilter(CAN0, 1, CAN_STD_ID, 0x456, 0x7FF); // ID 0x456
步骤 3:接收数据
CAN_Receive(CAN0, &rxMsg);
if(rxMsg.Id == 0x100){
    // 处理接收到的数据
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

604

主题

3146

帖子

4

粉丝