HW CAN

来自拉普兰德Wiki
跳转至: 导航搜索

固件说明

HW_CAN.c和HW_CAN.h是CAN模块的固件驱动文件,这里定义了CAN初始化函数、CAN发送接收函数等相关函数。

结构体

CAN_InitTypeDef

该结构体应用于CAN模块初始化
变量 描述 取值 初始化
CAN_Type *CAN_Canx 选择CANx CAN0、CAN1 必须初始化
uint32 CAN_BaudRate 设置FlexCAN波特率 CAN_BAUD_RATE_50KBPS - 波特率50KBPS

CAN_BAUD_RATE_100KBPS- 波特率100KBPS
CAN_BAUD_RATE_250KBPS- 波特率250KBPS
CAN_BAUD_RATE_500KBPS- 波特率500KBPS
CAN_BAUD_RATE_1MBPS - 波特率1MKBPS

必须初始化
uint8 CAN_RxMaskMode 设置FlexCAN Msg接收匹配方式 CAN_MSGOBJ_INDIVIDUAL_MASKING-每一路Msg独立进行匹配

CAN_MSGOBJ_GLOBAL_MASKING-采用RXMGMASK, RX14MASK and RX15MASK, RXFGMASK匹配机制

不必须初始化,默认为CAN_MSGOBJ_INDIVIDUAL_MASKING
PortPinsEnum_Type CAN_TxPin 发送引脚,每个CANTx对应不同的TxPin CAN0-*PTA12,PTB18

CAN1-*PTE24,PTC17

不必须初始化、默认值为带*的引脚
PortPinsEnum_Type CAN_RxPin 接收引脚,每个CANRx对应不同的RxPin CAN0-*PTA13,PTB19

CAN1-*PTE25,PTC16

不必须初始化、默认值为带*的引脚

CAN_MSGOBJ_InitTypeDef

该结构体应用于CAN模块MSG初始化
变量 描述 取值 初始化
CAN_Type *CAN_Canx 选择CANx CAN0、CAN1 必须初始化
uint8 CAN_MsgNum 设置FlexCAN外设中的MSG number MSG_NUM_0 - Msg-Msg缓冲区0

......
MSG_NUM_15 - Msg-Msg缓冲区15

必须初始化
uint8 CAN_MsgIdLength 设置ID长度 CAN_MSGOBJ_ID_STD-标准帧

CAN_MSGOBJ_ID_EXT-扩展帧

必须初始化
uint8 CAN_MsgDataLength 设置数据长度 CAN_DATA_0_BYTES-0个字节数据长度

......
CAN_DATA_7_BYTES-7个字节数据长度
CAN_DATA_MAX_BYTES- 8个字节数据长度

必须初始化
uint8 CAN_MsgSRR 设置Substitute Remote Request(SRR) 1 - 使能

0 - 禁止

必须初始化
uint8 CAN_MsgRTR 设置Remote Transmission Request(RTR) 1 - 使能

0 - 禁止

必须初始化
uint8 CAN_MsgDirection 设置FlexCAN外设中的MSG方向 FLEXCAN_MSGOBJ_DIR_RX-接收消息

FLEXCAN_MSGOBJ_DIR_TX-发送消息

必须初始化
uint8 CAN_MsgInterrupt 设置Msg缓冲区是否中断 TRUE - 使能

FALSE - 禁止

必须初始化
CAN_ISR_CALLBACK CAN_Isr MSG中断回调函数 函数必须为无返回值,无参数(eg. void isr(void);) 不必须初始化、如未初始化则不会触发中断

CAN_MessageFormat_TypeDef

该结构体应用于MSG发送或者接收的数据帧定义
变量 描述 取值 初始化
uint32 CAN_MsgID CAN帧的ID 如果该结构体用于发送功能,需要根据标准帧/扩展帧来设置ID

ID的长度分为11位标准帧和29位扩展帧两种
CAN_MSGOBJ_ID_STD 表示标准帧,如CAN_MSGOBJ_InitTypeDef中设置id长度为CAN_MSGOBJ_ID_STD
此时CAN_MsgID最长为11位,不能超过0x07FF;
CAN_MSGOBJ_ID_EXT 表示扩展帧,如CAN_MSGOBJ_InitTypeDef中设置id长度为CAN_MSGOBJ_ID_EXT
此时CAN_MsgID最长为29位,不能超过0x1FFFFFFF;
如果该结构体用于接收数据,接收函数会将接收的ID赋值给这个变量

根据该结构体的用途而定,如果用于发送功能,ID必须初始化;
uint16 CAN_MsgTimeStamp CAN帧的时间戳 如果该结构体用于发送功能,该变量没有作用

如果该结构体用于接收数据,接收函数会将接收的Msg缓冲区的时间戳给这个变量

不必须初始化
uint8 CAN_MsgDataBuffer[8] CAN帧的数据区域 如果该结构体用于发送功能,需要根据向该缓冲区写入要发送的数据

如果该结构体用于接收数据,接收函数会将接收的数据复制到这个缓冲区

根据该结构体的用途而定,如果用于发送功能,缓冲区必须初始化;
uint8 CAN_MsgDataLength CAN帧的数据长度 如果该结构体用于发送功能,需要设定要发送的数据长度

如果该结构体用于接收数据,接收函数会将接收的数据长度赋值给这个变量

根据该结构体的用途而定,如果用于发送功能,要发送数据长度必须初始化
uint8 CAN_MsgPriority CAN帧的本地优先级 0--7 应用本地仲裁优先级时, MCR[LPRIO_EN]必须使能

变量

函数

LPLD_CAN_Init()

函数原型

uint8 LPLD_CAN_Init(CAN_InitTypeDef )

描述

CAN初始化函数

形参

类型 名称 描述 取值
CAN_InitTypeDef can_init_structure CAN初始化结构体 结构体定义见CAN_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_CAN_Deinit()

函数原型

uint8 LPLD_CAN_Deinit(CAN_InitTypeDef );

描述

CAN反初始化函数

形参

类型 名称 描述 取值
CAN_InitTypeDef can_init_structure CAN初始化结构体 结构体定义见CAN_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_CAN_EnableIrq()

函数原型

uint8 LPLD_CAN_EnableIrq(CAN_InitTypeDef )

描述

CAN使能外设中断

形参

类型 名称 描述 取值
CAN_InitTypeDef can_init_structure CAN初始化结构体 结构体定义见CAN_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_CAN_DisableIrq()

函数原型

uint8 LPLD_CAN_DisableIrq(CAN_InitTypeDef )

描述

CAN禁止外设中断

形参

类型 名称 描述 取值
CAN_InitTypeDef can_init_structure CAN初始化结构体 结构体定义见CAN_InitTypeDef

输出

0--配置错误
1--配置成功

LPLD_CAN_InitMessageObject()

函数原型

void LPLD_CAN_InitMessageObject(CAN_MSGOBJ_InitTypeDef ,uint32 )

描述

CAN Msg缓冲区初始化

形参

类型 名称 描述 取值
CAN_MSGOBJ_InitTypeDef can_msg_init_structure CAN MSG初始化结构体 结构体定义见CAN_MSGOBJ_InitTypeDef
uint32 message_id 设置message的ID 设置message_id,id长度根据CAN_MSGOBJ_InitTypeDef的参数而定,id的长度分为11位标准帧和29位扩展帧两种

CAN_MSGOBJ_ID_STD 表示标准帧,如CAN_MSGOBJ_InitTypeDef中设置id长度为CAN_MSGOBJ_ID_STD,此时message_id最长为11位,不能超过0x0FFF;
CAN_MSGOBJ_ID_EXT 表示扩展帧,如CAN_MSGOBJ_InitTypeDef中设置id长度为CAN_MSGOBJ_ID_EXT,此时message_id最长为29位,不能超过0x1FFFFFFF;

LPLD_CAN_TransmitMessage()

函数原型

uint8 LPLD_CAN_TransmitMessage(CAN_MSGOBJ_InitTypeDef, CAN_MessageFormat_TypeDef * )

描述

CAN 发送MSG函数

形参

类型 名称 描述 取值
CAN_MSGOBJ_InitTypeDef can_msg_init_structure CAN MSG初始化结构体 结构体定义见CAN_MSGOBJ_InitTypeDef
CAN_MessageFormat_TypeDef* can_tx_msg 该结构体用于定义CAN的消息格式,当CAN发送消息时,会从CAN_MessageFormat_TypeDef定义的结构体对象中提取信息并存储到MSG中,MSG会将消息发送到CAN总线上。该结构体中的主要变量为 消息ID、时间戳、数据长度、存储数据的缓冲区 结构体定义见CAN_MessageFormat_TypeDef

输出

0--发送失败
1--发送成功

LPLD_CAN_ReceivedMessage()

函数原型

void LPLD_CAN_ReceivedMessage(CAN_MSGOBJ_InitTypeDef, CAN_MessageFormat_TypeDef * )

描述

CAN 发送MSG函数

形参

类型 名称 描述 取值
CAN_MSGOBJ_InitTypeDef can_msg_init_structure CAN MSG初始化结构体 结构体定义见CAN_MSGOBJ_InitTypeDef
CAN_MessageFormat_TypeDef* can_tx_msg 该结构体用于定义CAN的消息格式,当CAN成功接收消息以后,会从MSG中将信息存储到CAN_MessageFormat_TypeDef定义的结构体对象中。该结构体中的主要变量为 消息ID、时间戳、数据长度、存储数据的缓冲区 结构体定义见CAN_MessageFormat_TypeDef

其他

CAN波特率宏定义

配置CAN波特率宏定义
宏定义名 描述
CAN_BAUD_RATE_50KBPS 波特率50KBPS
CAN_BAUD_RATE_100KBPS 波特率100KBPS
CAN_BAUD_RATE_250KBPS 波特率250KBPS
CAN_BAUD_RATE_500KBPS 波特率500KBPS
CAN_BAUD_RATE_1MBPS 波特率1MBPS

CAN_Msg_CodeEnum_Type枚举

CAN MSG中CODE段状态枚举
枚举名 描述
CAN_MSGOBJ_RX_INACTIVE 接收INACTIVE
CAN_MSGOBJ_RX_BUSY 接收BUSY
CAN_MSGOBJ_RX_FULL 接收FULL
CAN_MSGOBJ_RX_EMPTY 接收EMPTY
CAN_MSGOBJ_RX_OVERRUN 接收OVERRUN
CAN_MSGOBJ_TX_INACTIVE 发送INACTIVE
CAN_MSGOBJ_TX_REMOTE 发送REMOTE
CAN_MSGOBJ_TX_UNCONDITIONAL 发送UNCONDITIONAL
CAN_MSGOBJ_TX_REMOTE_MATCH 发送REMOTE_MATCH

CAN_MSGOBJ_DIR_T枚举

CAN MSG收发方向枚举
枚举名 描述
CAN_MSGOBJ_DIR_NULL 方向无定义
CAN_MSGOBJ_DIR_RX MSG接收
CAN_MSGOBJ_DIR_TX MSG发送

CAN_MSGOBJ_IDEnum_Type枚举

CAN MSG ID枚举
枚举名 描述
CAN_MSGOBJ_ID_STD 11位标准帧
CAN_MSGOBJ_ID_EXT 29位扩展帧

CAN_MSGOBJ_RxMaskingEnum_Type枚举

CAN MSG 匹配方式枚举
枚举名 描述
CAN_MSGOBJ_INDIVIDUAL_MASKING MSG独立匹配
CAN_MSGOBJ_GLOBAL_MASKING MSG全局匹配

wangsong