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详情
相关结数据结构
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"
使用示例
无
移植说明
无