init_Mask()
描述
CAN ID 的遮罩。在 86Duino 中,有 32 组 CAN ID 遮罩,从外部设备进来的 CAN 资料中,遮罩可以决定要接收的 CAN ID 范围(0 ~ N 区间);此函式还可以配合 init_Filt(),将 CAN ID 限制在 A ~ B 区间。如果在 sketch 中没有呼叫 init_Mask() 或 init_Filt(),CAN 函式库会自动接收来自所有 CAN ID 的资料。
语法
CAN.init_Mask(num, ext, ulData)
参数
num
:第几组遮罩,值的范围: 0 ~ 31
ext
:传送资料的格式,有以下 4 种:
- CAN_STDID:标准资料帧,符合 CAN 2.0A 规范,ID 范围:0 ~ 0x7FF
- CAN_EXTID:扩展资料帧,使用 CAN 2.0B 规范,ID 范围:0 ~ 0x1FFFFFFF
- CAN_STDID_REMOTE:标准远端帧,符合 CAN 2.0A 规范,ID 范围:0 ~ 0x7FF
- CAN_EXTID_REMOTE:扩展远端帧,符合 CAN 2.0B 规范,ID 范围:0 ~ 0x1FFFFFFF
ulData
:遮罩值。请看以下范例:
没有设定过滤器:
0 0 0 0 0 0 0 0 过滤器值 0x00
0 0 0 0 0 0 1 1 遮罩值 0x03
CAN ID 的接收区间为:0x00 ~ 0x03
有设定过滤器:
0 0 0 1 1 0 0 1 过滤器值 0x19
0 0 0 0 0 0 0 1 遮罩值 0x01
CAN ID 的接收区间为:0x18、0x19
0 1 0 1 1 1 0 0 过滤器值 0x5C
0 0 0 0 0 1 1 1 遮罩值 0x07
CAN ID 的接收区间为:0x58 ~ 0x5F
回传
CAN_FAIL:设定失败
CAN_OK:设定成功
范例
#include <CANBus.h> unsigned char buf[8] = {0, 1, 2, 3, 4, 5, 6, 7}; void setup() { Serial.begin(115200); CAN.begin(CAN_500KBPS); // 设定 CAN 的传输速度为 500KBPS CAN.init_Filt(0, CAN_STDID, 0x019); // 设定第 0 过滤器,值为 0x019,使用标准资料帧 CAN.init_Mask(0, CAN_STDID, 0x01); // 设定第 0 遮罩,值为 0x01,使用标准资料帧 } void loop() { CAN.beginTransmission(0x00, CAN_STDID); // 外部 CAN device 的 ID 为 0x00,使用标准资料帧 CAN.write(buf, 8); // 送出 8 bytes 资料 CAN.endTransmission(); // 结束传送 delay(10); }
See also
- init_Filt()
- beginTransmission()
- write()
- endTransmission()
The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.