介绍关于CAN端口初始化、端口滤波器初始化、端口收发数据、关闭端口等功能所调用的一些抽象函数。

API列表

函数名称 功能描述
hal_can_init 初始化指定CAN端口
hal_can_filter_init 初始化指定CAN端口滤波器
hal_can_send 从指定CAN端口发送数据
hal_can_recv 从指定CAN端口获取数据
hal_can_finalize 关闭指定CAN端口

hal_can_init

定义描述
定义 描述
函数原型 int32_t hal_can_init(can_dev_t *can)
描述 初始化指定CAN端口
参数 can:CAN设备描述,定义需要初始化的CAN参数
返回值 返回成功或失败,返回0表示CAN初始化成功,非0表示失败

hal_can_filter_init

定义描述
定义 描述
函数原型 int32_t hal_can_filter_init(can_dev_t *can, const uint8_t filter_grp_cnt, can_filter_item_t *filter_config)
描述 初始化指定CAN端口滤波器
参数
  • i2c:CAN设备描述,定义需要初始化的I2C参数
  • filter_grp_cnt:滤波器计数值
  • filter_config:滤波器配置
返回值 返回成功或失败,返回0表示CAN端口滤波器初始化成功,非0表示失败

hal_can_send

定义描述
定义 描述
函数原型 int32_t hal_can_send(can_dev_t *can, can_frameheader_t *tx_header, const void *data, const uint32_t timeout)
描述 从指定的CAN端口发送数据
参数
  • can:CAN设备描述
  • tx_header:发送数据头
  • data:指向发送缓冲区的数据指针
  • timeout:超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER
返回值 返回成功或失败,返回0表示数据发送成功,非0表示失败

hal_can_recv

定义描述
定义 描述
函数原型 int32_t hal_can_recv(can_dev_t *can, can_frameheader_t *rx_header, void *data, const uint32_t timeout)
描述 从指定的CAN端口接收数据
参数
  • can:CAN设备描述
  • rx_header:接收数据头
  • data:指向接收缓冲区的数据指针
  • timeout:超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER
返回值 返回成功或失败,返回0表示数据接收成功,非0表示失败

hal_can_finalize

定义描述
定义 描述
函数原型 int32_t hal_can_finalize(can_dev_t *can)
描述 关闭指定CAN端口
参数 can:CAN设备描述
返回值 类型:int 返回成功或失败,返回0表示关闭成功,非0表示失败

can_dev_t数据结构

typedef struct {
    uint8_t      port;   /* can port */
    can_config_t config; /* can config */
    void        *priv;   /* priv data */
} can_dev_t;

can_config_t数据结构

typedef struct {
    uint32_t baud_rate;           /* baud rate of can */
    uint8_t  ide;                 /* 0:normal can, 1:extend can */
    uint8_t  auto_bus_off;        /* 1:enable auto bus off, 0:disable */
    uint8_t  auto_retry_transmit; /* 1:enable retry transmit, 0:disable */
} can_config_t;

can_frameheader_t数据结构

typedef struct {
    uint32_t id;  /* id of can */
    uint8_t  rtr; /* 0:data frame, 1:remote frame */
    uint8_t  dlc; /* must <=8 */
} can_frameheader_t;

can_filter_item_t数据结构

typedef struct{
    uint8_t  rtr;         /* 0:data frame, 1:remote frame */
    uint32_t check_id;    /* the filter identification number */
    uint32_t filter_mask; /* the filter mask number or identification number */
} can_filter_item_t;