CAN配置指南
驱动配置
c
Board options --->
[*] Using CAN0
[*] Using CAN1
1
2
3
2
3
Luban-Lite CAN的driver层是基于RT-Thread的CAN驱动框架实现的,所以需要使能RT-Thread的CAN驱动框架:
C
RT-Thread options --->
RT-Thread Components --->
Device Drivers --->
[*] Using CAN device drivers
[*] Enable CAN hardware filter
[ ] Enable CANFD support
1
2
3
4
5
6
2
3
4
5
6
注解
1.CAN模块不支持CANFD
2.为了使用方便,选择Using CAN0/1后会自动选择CAN驱动框架
过滤器配置
如果需要接收过滤功能,可以配置CAN模块的硬件过滤器。CAN支持两种过滤模式:单过滤模式和双过滤模式。 单过滤模式只有一个硬件过滤器,可以过滤某个特定的帧ID或某个区间范围内的帧ID。双过滤模式有两个硬件过滤器, 可以过滤两个特定的帧ID或不连续的区间范围的帧ID。
单过滤模式配置示例:
c
/* config can rx filter */
struct rt_can_filter_item items[1] =
{
//Only receive standard data frame with ID 0x100~0x1FF
RT_CAN_FILTER_ITEM_INIT(0x100, 0, 0, 0, 0x700, RT_NULL, RT_NULL),
};
struct rt_can_filter_config cfg = {1, 1, items};
ret = rt_device_control(can_rx_dev, RT_CAN_CMD_SET_FILTER, &cfg);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
双过滤模式配置示例:
c
/* config can rx filter */
struct rt_can_filter_item items[2] =
{
//Only receive standard data frame with ID 0x100~0x1FF
RT_CAN_FILTER_ITEM_INIT(0x100, 0, 0, 0, 0x700, RT_NULL, RT_NULL),
//Only receive standard data frame with ID 0x345
RT_CAN_FILTER_ITEM_INIT(0x345, 0, 0, 0, 0x7FF, RT_NULL, RT_NULL),
};
struct rt_can_filter_config cfg = {2, 1, items};
ret = rt_device_control(can_rx_dev, RT_CAN_CMD_SET_FILTER, &cfg);
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
如上所示,如果数组 struct rt_can_filter_item items[] 中只配置一个硬件过滤器, 那么CAN模块就会默认使用单过滤模式,如果配置了两个过滤器,CAN模块就会使用双过滤模式。
注意
1.使用双过滤模式时,两个过滤器只能同时过滤标准帧或扩展帧,而不能一个配置为过滤标准帧,另一个配置为过滤扩展帧
2.使用双过滤模式过滤扩展帧时,只能过滤扩展帧ID的bit28~bit13。如果需要过滤扩展帧ID的所有bit,必须使用单过滤模式