[CANBus]
描述
On an 86Duino platform, there are 32 group of CAN ID mask. When there are data from external CAN device, the mask is used to determine the range of device ID (0 ~ N) which their data is to be handled. Combine with the init_Filt() function, this function can limit the range of CAN ID to be handled, within the A ~ B range. When the init_Mask() and ini_Filt() function are not called within a sketch, the CAN function library is set to accept data from all CAN ID.
語法
CAN.init_Mask(num, ext, ulData)
參數
- num: Mask ID, within the 0 ~ 31 range.
- ext: One of the following 4 data transmission format.
- CAN_STDID: Standard data frame, comply with CAN 2.0A standard. ID range: 0 ~ 0x7FF
- CAN_EXTID: Extended data frame, comply with CAN 2.0B standard. ID range: 0 ~ 0x1FFFFFFF
- CAN_STDID_REMOTE: 3. CAN_STDID_REMOTE: Standard remote data frame, comply with CAN 2.0A standard. ID range: 0 ~ 0x7FF
- CAN_EXTID_REMOTE: 4. CAN_EXTID_REMOTE: Extended remote data frame, comply with CAN 2.0B standard. ID range: 0 ~ 0x1FFFFFFF
- ulData: Mask value. Refer to the following examples:
Without mask: 0 0 0 0 0 0 0 0 Filter ID value: 0x00 0 0 0 0 0 0 1 1 Mask: 0x03 Range of CAN ID to receive data: 0x00 ~ 0x03 With mask: 0 0 0 1 1 0 0 1 Filter ID value: 0x19 0 0 0 0 0 0 0 1 Mask: 0x01 Range of CAN ID to receive data:0x18、0x19 0 1 0 1 1 1 0 0 Filter ID value: 0x5C 0 0 0 0 0 1 1 1 Mask: 0x07 Range of CAN ID to receive data:0x58 ~ 0x5F
回傳
- CAN_FAIL: Setting failed
- CAN_OK: Setting success
範例
#include <CANBus.h> unsigned char buf[8] = {0, 1, 2, 3, 4, 5, 6, 7}; void setup() { Serial.begin(115200); CAN.begin(CAN_500KBPS); // Configure CAN bus transmission speed to 500KBPS CAN.init_Filt(0, CAN_STDID, 0x019); // Configure filter ID 0 to 0x019, using Standard data frame CAN.init_Mask(0, CAN_STDID, 0x01); // Configure mask for filter ID 0 to 0x01, using standard data frame } void loop() { CAN.beginTransmission(0x00, CAN_STDID); // Set external CAN ID to 0x00, using standard data frame CAN.write(buf, 8); // Transmit 8 bytes of data CAN.endTransmission(); // End transmission delay(10); }
參考
函式庫參考主頁面
86Duino 參考的文本是根據 Creative Commons Attribution-ShareAlike 3.0 License,部分文本是從 the Arduino reference 修改的。 參考中的代碼示例已發佈到公共領域。