CAN

介绍

对于不同底层驱动的can操作实现,统一封装成本文所述can hal接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/

API列表

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

API详情

请参考include/aos/hal/can.h

相关结数据结构

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;

hal_can_init

初始化指定CAN端口

函数原型

int32_t hal_can_init(can_dev_t *can);

参数

参数名称 出入参 参数描述 参数示例
can_dev_t *can 入参 CAN设备描述,定义需要初始化的CAN参数 用户自定义一个can_dev_t结构体

返回值

返回成功或失败, 返回0表示CAN初始化成功,非0表示失败

调用示例

hal_can_filter_init

初始化指定CAN端口滤波器

函数原型

int32_t hal_can_filter_init(can_dev_t *can, const uint8_t filter_grp_cnt, can_filter_item_t *filter_config);

参数

参数名称 出入参 参数描述 参数示例
can_dev_t *can 入参 CAN设备描述 传入hal_can_init时参数
const uint8_t filter_grp_cnt 入参 滤波器计数值
can_filter_item_t *filter_config 入参 滤波器配置

返回值

返回成功或失败, 返回0表示CAN滤波器初始化成功,非0表示失败

调用示例

hal_can_send

从指定的CAN端口发送数据

函数原型

int32_t hal_can_send(can_dev_t *can, can_frameheader_t *tx_header, const void *data, const uint32_t timeout);

参数

参数名称 出入参 参数描述 参数示例
can_dev_t *can 入参 can设备描述 使用hal_can_init初始化时传入值
can_frameheader_t *tx_header 入参 发送数据头
const void *data 入参 指向发送缓冲区的数据指针
uint32_t timeout 入参 超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER 50

返回值

返回成功或失败, 返回0表示数据发送成功,非0表示失败

调用示例

hal_can_recv

从指定的CAN端口接收数据

函数原型

int32_t hal_can_recv(can_dev_t *can, can_frameheader_t *rx_header, void *data, const uint32_t timeout);

参数

参数名称 出入参 参数描述 参数示例
can_dev_t *can 入参 CAN设备描述 使用hal_can_init初始化时传入值
can_frameheader_t *rx_header 出参 接收数据头
void *data 出参 指向接收缓冲区的数据指针
const uint32_t timeout 入参 超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER 50

返回值

返回成功或失败, 返回0表示成功接收,非0表示失败

调用示例

hal_can_finalize

关闭指定CAN端口

函数原型

int32_t hal_can_finalize(can_dev_t *can);

参数

参数名称 出入参 参数描述 参数示例
can_dev_t *can 入参 CAN设备描述 使用hal_can_init初始化时传入值

返回值

类型:int 返回成功或失败, 返回0表示关闭成功,非0表示失败。

调用示例

使用

添加该组件

在相应的platform/mcu的mk内,添加对应hal文件的编译包含。

包含头文件

#include "aos/hal/can.h"

使用示例

移植说明

results matching ""

    No results matching ""