Canfd模块用户手册
Canfd模块用户手册
目录
- 1. 简介
- 2. 文件结构
- 3. 数据结构
- 4. 驱动函数
- 4.1 函数接口
- 4.1.1 HLI_Canfd_Init
- 4.1.2 HLI_Canfd_Deinit
- 4.1.3 HLI_Canfd_SetMode
- 4.1.4 HLI_Canfd_Write
- 4.1.5 HLI_Canfd_MainFunctionWrite
- 4.1.6 HLI_Canfd_MainFunctionRead
- 4.1.7 HLI_Canfd_GetMailboxRxStatus
- 4.1.8 HLI_Canfd_GetMailboxTxStatus
- 4.1.9 HLI_Canfd_ReadRxMailbox
- 4.1.10 HLI_Canfd_AbortTransmit
- 4.1.11 HLI_Canfd_TxQueue_Init
- 4.1.12 HLI_Canfd_TxQueue_Write
- 4.1.13 HLI_Canfd_TxQueueTriggerTransmit
- 4.1.14 HLI_Canfd_TxQueue_DeInit
- 4.1.15 HLI_Canfd_TxQueue_Clear
- 4.2 中断回调
- 4.1 函数接口
- 5. 使用示例
- 6. 限制与假设
- 7. 变更记录
1. 简介
本模块提供了对 CANFD (Controller Area Network with Flexible Data-Rate) 的抽象接口,旨在简化CANFD/CAN通信的配置和使用。
主要功能包括:
- 初始化与反初始化:
- 通过
HLI_Canfd_Init初始化CANFD模块,配置波特率、邮箱、接收FIFO、通知模式等。 - 通过
HLI_Canfd_Deinit反初始化CANFD模块。
- 通过
- 模式控制:
- 通过
HLI_Canfd_SetMode设置CANFD控制器的工作模式(启动/停止)。
- 通过
- 消息发送:
- 通过
HLI_Canfd_Write发送CAN/CANFD消息。 - 提供
HLI_Canfd_MainFunctionWrite轮询发送状态。
- 通过
- 消息接收:
- 支持接收邮箱和接收FIFO(普通型和增强型)。(部分型号支持)
- 通过
HLI_Canfd_MainFunctionRead轮询接收状态和处理接收数据。 - 提供
HLI_Canfd_ReadRxMailbox读取指定接收邮箱的数据。
- 状态查询:
- 提供
HLI_Canfd_GetMailboxTxStatus和HLI_Canfd_GetMailboxRxStatus查询邮箱状态。
- 提供
- 发送队列 (额外功能):
- 提供软件发送队列功能,支持
HLI_Canfd_TxQueue_Write写入队列,HLI_Canfd_TxQueueTriggerTransmit触发发送。
- 提供软件发送队列功能,支持
1.1 支持的设备
当前软件适用于以下芯片:
- KF32A158xxxSF
1.2 名词及缩写
| 缩写 | 解释 |
|---|---|
| MCU | 微控制器 |
| ISR | 中断服务例程 |
| CAN | 控制器局域网 |
| CANFD | 数据速率可变控制器局域网 |
2. 文件结构
| 文件名称 | 描述 |
|---|---|
kf32axxx_hli_canfd.c | 此文件包含CANFD驱动程序的通用功能 |
kf32axxx_hli_canfd.h | 此头文件输出CANFD驱动程序的宏、类型定义和函数原型 |
kf32axxx_hli_canfd_cfg.h | 此头文件输出CANFD驱动程序的配置宏 |
kf32axxx_hli_canfd_Lcfg.h | 此头文件输出CANFD驱动程序的配置结构体声明 |
kf32axxx_hli_canfd_Lcfg.c | 此头文件输出CANFD驱动程序的配置结构体定义 |
kf32axxx_hli_canfd_extra.c | 此文件包含CANFD队列驱动程序的通用功能 |
kf32axxx_hli_canfd_extra.h | 此头文件输出CANFD队列驱动程序的宏、类型定义和函数原型 |
kf32axxx_hli_canfd_extra_cfg.h | 此头文件输出CANFD队列驱动程序的配置 |
kf32axxx_hli_canfd_extra_Lcfg.h | 此头文件输出CANFD队列驱动程序的配置结构体声明 |
kf32axxx_hli_canfd_extra_Lcfg.c | 此头文件输出CANFD队列驱动程序的配置结构体定义 |
3. 数据结构
3.1 数据类型
3.1.1 宏定义
Canfd 邮箱最大数量
宏定义名称 解释 HLI_CANFD_MAX_MAILBOX_NUMBERCanfd 支持最大邮箱数量 注
KF32A158xxxSF系列支持64个邮箱(8字节负载),14个邮箱(64字节负载)。
Canfd 最大数据长度
宏定义名称 解释 HLI_CANFD_MAX_DATA_LENGTHCanfd 最大数据长度64字节 虚拟邮箱序号
宏定义名称 解释 HLI_CANFD_ENHANCED_RX_FIFO_VIRTUAL_MB_INDEX增强型Rx FIFO虚拟邮箱序号 HLI_CANFD_NORMAL_RX_FIFO_VIRTUAL_MB_INDEX普通型Rx FIFO虚拟邮箱序号
3.1.2 枚举
Canfd 控制器模块 (HLI_Canfd_ControllerType)
枚举值 解释 HLI_CANFD6CANFD6编号 HLI_CANFD7CANFD7编号 HLI_CANFD8CANFD8编号 HLI_CANFD9CANFD9编号 Canfd 返回值类型 (HLI_Canfd_ReturnType)
枚举值 解释 HLI_CANFD_OK执行成功 HLI_CANFD_NOT_OK执行不成功 HLI_CANFD_BUSYCANFD模块正在使用中 Canfd 邮箱负载大小 (HLI_Canfd_MBSizeType)
枚举值 解释 HLI_CAN_8_BYTE_DATALENGTH邮箱大小: 8字节数据长度 HLI_CAN_16_BYTE_DATALENGTH邮箱大小: 16字节数据长度 HLI_CAN_32_BYTE_DATALENGTH邮箱大小: 32字节数据长度 HLI_CAN_64_BYTE_DATALENGTH邮箱大小: 64字节数据长度 Canfd 消息ID类型 (HLI_Canfd_MsgIDType)
枚举值 解释 HLI_CANFD_DATA_STD标准帧 HLI_CANFD_DATA_EXT扩展帧 Canfd 通知方式 (HLI_Canfd_NotifyType)
枚举值 解释 HLI_CANFD_NOTIFY_INTERRUPT中断通知模式 HLI_CANFD_NOTIFY_POLLING轮询通知模式 Canfd 帧类型 (HLI_Canfd_MsgFrameType)
枚举值 解释 HLI_CANFD_FRAME_CLASSICAL经典CAN帧 HLI_CANFD_FRAME_FDCANFD帧 Canfd 接收FIFO类型 (HLI_Canfd_RxFifoType)
枚举值 解释 HLI_CANFD_NORMAL_RX_FIFO普通型接收FIFO HLI_CANFD_ENHANCED_RX_FIFO增强型接收FIFO Canfd 采样点次数 (HLI_Canfd_SampleTimeType)
枚举值 解释 HLI_CANFD_SAMPLE_ONE_TIME一次采样 HLI_CANFD_SAMPLE_THREE_TIME三次采样 Canfd 目标模式 (HLI_Canfd_ModeType)
枚举值 解释 HLI_CANFD_T_START开始 HLI_CANFD_T_STOP停止 普通Rx FIFO过滤元素数量
枚举值 解释 HLI_CANFD_NORMAL_RX_FIFO_ID_FILTERS_88个过滤元素 HLI_CANFD_NORMAL_RX_FIFO_ID_FILTERS_1616个过滤元素 ... ... HLI_CANFD_NORMAL_RX_FIFO_ID_FILTERS_128128个过滤元素 普通型Rx FIFO 过滤ID类型
枚举值 解释 HLI_CANFD_NORMAL_RX_FIFO_ID_FORMAT_A过滤ID类型A,一个完整ID HLI_CANFD_NORMAL_RX_FIFO_ID_FORMAT_B过滤ID类型B,两个ID HLI_CANFD_NORMAL_RX_FIFO_ID_FORMAT_C过滤ID类型C,四个ID RX FIFO事件
枚举值 解释 HLI_CANFD_NORMAL_RX_FIFO_EVENT_WARNING普通型Rx FIFO警告 HLI_CANFD_NORMAL_RX_FIFO_EVENT_OVERFLOW普通型Rx FIFO溢出 HLI_CANFD_ENHANCED_RX_FIFO_EVENT_OVERFLOW增强型Rx FIFO溢出 HLI_CANFD_ENHANCED_RX_FIFO_EVENT_UNDERFLOW增强型Rx FIFO下溢 HLI_CANFD_ENHANCED_RX_FIFO_EVENT_WATERMARK增强型Rx FIFO水位警告 增强型Rx FIFO过滤元素类型
枚举值 解释 HLI_CANFD_ENHANCED_RX_FIFO_FILTER_ELEMENT_FILTER_MASKID+掩码过滤方式 HLI_CANFD_ENHANCED_RX_FIFO_FILTER_ELEMENT_FILTER_RANGEID范围类型 HLI_CANFD_ENHANCED_RX_FIFO_FILTER_ELEMENT_TWO_FILTER两个ID
3.1.3 类型定义
Canfd 波特率配置 (HLI_Canfd_BaudRateType)
成员 解释 Canbrp仲裁时钟分频 BrsPrescale数据段时钟分频 TPts仲裁段相位传播段 HtPts数据段相位传播段 TSeg1仲裁段Tseg1 HtSeg1数据段Tseg1 TSeg2仲裁段Tseg2 HtSeg2数据段Tseg2 Tsjw仲裁段SJW Hsjw数据段SJW SampleTimes采样点 EnableTdc使能TDC功能 TdcOffsetTDC offset TxArbitrationDelay发送仲裁延时 Canfd 消息结构体 (HLI_Canfd_MessageType)
成员 解释 ID报文ID DataPtr指向数据的指针 IDTypeID类型 (标准/扩展) FrameType帧类型 (经典CAN/FD) FdPadding填充数据
当数据长度小于DLC对应负载时, 会使用该数据进行填充DataLength数据长度 BrsEnable是否使能比特率切换 (仅CANFD帧有效) IsRemote是否为远程帧 Canfd 接收邮箱配置 (HLI_Canfd_RxMBType)
成员 解释 MBIndex邮箱索引号
使用普通型接收FIFO时, 第一个可用邮箱发生变化, 并非从邮箱0开始. 第一个可用的邮箱序号计算方法为: 8 + (过滤元素数量 * 2)
注意: 此处的过滤元素数量指实际值, 即枚举的值. 如: 过滤器元素数量为HLI_CANFD_NORMAL_RX_FIFO_ID_FILTERS_16, 则第一个可用的邮箱为 8+(1*2)=0xAIDType接收邮箱帧类型 (标准/扩展) EnableMBFilter是否使能邮箱过滤 (仅在开启硬件滤波功能时有效) RxID接收ID MaskCode邮箱掩码 注
- 开启滤波功能后, 通过邮箱配置项内的
EnableMBFilter可配置使能/禁止每个接收邮箱的滤波功能. - 使能邮箱滤波功能(EnableMBFilter = true)时, 通过
RxID邮箱接收ID和MaskCode邮箱滤波掩码过滤的报文会存入当前邮箱.- 过滤机制:
MaskCode指定关心接收ID的那些位;RxID中对应MaskCode置1的位与接收报文的ID对应位数值相等时, 接收报文通过过滤, 存入当前邮箱. - 例: 邮箱配置为扩展ID,
RxID = 0x123; MaskCode = 0x1F0;, 则该邮箱可以接收ID为0x120~0x12F的所有扩展帧报文. - 使能邮箱滤波功能, 但配置掩码设置为0x0时, 该邮箱可以接收对应该ID类型的所有ID报文
- 配置为扩展ID的邮箱, 可以接收ID为0x0~0x1FFFFFFF的所有扩展帧报文
- 配置为标准ID的邮箱, 可以接收ID为0x0~0x7FF的所有标准帧报文
- 过滤机制:
- 禁止邮箱滤波功能(
EnableMBFilter = false)后, 该邮箱可以接收对应该ID类型的所有ID报文- 配置为扩展ID的邮箱, 可以接收ID为0x0~0x1FFFFFFF的所有扩展帧报文
- 配置为标准ID的邮箱, 可以接收ID为0x0~0x7FF的所有标准帧报文
- 禁止滤波功能后, 所有配置的接收邮箱均可以接收ID为0x0~0x1FFFFFFF的全部报文, 无论该报文ID类型是扩展ID还是标准ID.
- 开启滤波功能后, 通过邮箱配置项内的
增强型Rx FIFO 标准ID过滤元素
成员 解释 bits.ID1FSCH为0b00时,为ID掩码;其余时候为ID1。 bits.RTR1FSCH为0b00或者0b01时,为RTR掩码;其余时候为RTR1。 bits.ID2任何时候均代表ID。 bits.RTR2任何时候均代表RTR。 bits.FSCH过滤元素类型。 reg以上成员的32bit组合内容。 增强型Rx FIFO 扩展ID过滤元素
成员 解释 bits.ID1FSCH为0b00时,为ID掩码;其余时候为ID1。 bits.RTR1FSCH为0b00或者0b01时,为RTR掩码;其余时候为RTR1。 bits.ID2任何时候均代表ID。 bits.RTR2任何时候均代表RTR。 bits.FSCH过滤元素类型。 reg[2]以上成员的组合内容。 普通型Rx FIFO过滤元素
成员 解释 IsRemoteFrame是否为远程帧 IsExtendedFrame是否为扩展帧 ID报文ID 普通型Rx FIFO过滤掩码
成员 解释 FormatA.ID格式A的ID FormatA.IDE格式A的IDE位 FormatA.RTR格式A的RTR位 FormatB.ID0格式B的ID FormatB.IDE0格式B的IDE0位 FormatB.RTR0格式B的RTR0位 FormatB.ID1格式B的ID1 FormatB.IDE1格式B的IDE1位 FormatB.RTR1格式B的RTR1位 FormatC.ID0格式C的ID0 FormatC.ID1格式C的ID1 FormatC.ID2格式C的ID2 FormatC.ID3格式C的ID3 reg以上成员的32bit组合内容。 注
- 使用 FormatA 时,标准帧ID使用
FormatA.ID的18到28位。如果是一个标准的帧ID, 将其左移18位再填入ID. - 使用 FormatB 时,标准帧ID使用
FormatB.ID的3到13位。如果是一个标准的帧ID, 将其左移3位再填入ID.
- 使用 FormatA 时,标准帧ID使用
3.2 配置项说明
静态配置
宏定义 解释 HLI_CANFD_HARDWARE_FILTER硬件滤波使能开关 ( HLI_ON/HLI_OFF)HLI_CANFD_ENABLE_TX_CALLBACK发送完成回调使能开关 ( HLI_ON/HLI_OFF)HLI_CANFD_CLOCK_SOURCECANFD模块工作时钟: HLI_CANFD_CLOCK_SOURCE_OSCILLATOR, 外部晶振(需要在MCU模块选择使用HSE)HLI_CANFD_CLOCK_SOURCE_SCLK, 系统时钟(已分频到40MHz)HLI_CANFD_CONFIGURATION_OPTIONS可选配置项组合 (远程帧存储, BUSOFF恢复, 协议异常, 边缘过滤器, ISO CANFD, EACEN) HLI_CANFD_OPTIONS_REMOTE_STORE, 远程帧请求存储, 设置时表示仅存储远程帧请求HLI_CANFD_OPTIONS_BUSOFF_RECOVERY, BUSOFF自动恢复, 设置时表示不自动恢复HLI_CANFD_OPTIONS_PROTOCOL_EXCEPTION, 协议异常启用HLI_CANFD_OPTIONS_EDGE_FILTER, 边缘过滤器使能, 设置时表示禁用HLI_CANFD_OPTIONS_ISO, 设置时表示使用ISO CANFDHLI_CANFD_OPTIONS_EACEN, 帧仲裁域比较使能, 设置时表示使能HLI_CANFD_ENHANCED_RX_FIFO_INTR_MASK增强型Rx FIFO中断掩码 HLI_CANFD_MAX_TX_QUEUE_NUMBER发送队列列表个数, 默认1个, 与CANFD模块个数对应 HLI_CANFD_MAX_TX_QUEUE_CAPACITY发送队列长度, 默认10个 HLI_CANFD_FEATURE_INTERNAL_BUS_ENABLE使能/禁止 CANFD Rx连接到内部总线的特性 HLI_CANFD_INDEX_CONNECT_TO_EXTERNAL_BUS使能 CANFD Rx连接到内部总线时,需要需要对外连接到外部CAN总线的CANFD模块.
可选择HLI_CANFD6~HLI_CANFD9HLI_CANFD_MAX_TX_QUEUE_NUMBERCANFD发送队列数量 HLI_CANFD_MAX_TX_QUEUE_CAPACITYCANFD发送队列深度 Canfd 初始化配置结构体 (HLI_Canfd_ConfigType)
成员 解释 取值范围 EnableFd使能或禁止Canfd功能 true: 使能,false: 禁止MBSize邮箱负载大小 参考 HLI_Canfd_MBSizeTypeBaudRate指向波特率配置的指针 指向 HLI_Canfd_BaudRateType结构体RxMBConfigLength配置接收邮箱数量 根据 MBSize不同而不同RxMBConfig邮箱配置结构体指针 指向 HLI_Canfd_RxMBType数组RxFifoConfig指向接收FIFO配置的指针 指向 HLI_Canfd_RxFifoConfigType结构体NotifyMode通知模式 (中断/轮询) 参考 HLI_Canfd_NotifyTypeEnableRxConnectInternalBus使能/禁止当前 CANFD 模块的 Rx 连接到内部总线 (仅当 HLI_CANFD_FEATURE_INTERNAL_BUS_ENABLE为 true 时有效)true/falseBusOffCallbackFuncBUS OFF回调函数指针 HLI_Canfd_BusOffCallbackTypeTxConfirmationCallbackFuncTX发送完成回调函数指针 (仅当 HLI_CANFD_ENABLE_TX_CALLBACK为HLI_ON时有效)HLI_Canfd_TxConfirmationCallbackTypeRxIndicationCallbackFunc接收完成回调函数指针 HLI_Canfd_RxIndicationCallbackTypeErrorAlarmCallbackFunc错误警告回调函数指针 HLI_Canfd_ErrorAlarmCallbackTypeRxFifoEventCallbackFunc接收FIFO事件回调函数指针 HLI_Canfd_RxFifoEventCallbackTypeRx FIFO配置(HLI_Canfd_RxFifoConfigType)
成员 解释 取值范围 TypeOfRxFifo 接收邮箱类型 HLI_CANFD_NORMAL_RX_FIFO, 普通型接收FIFOHLI_CANFD_ENHANCED_RX_FIFO, 增强型接收FIFOEnhancedRxFifo 指向增强型接收FIFO配置的指针 指向增强型接收FIFO配置的指针 NormalRxFifo 指向普通型接收FIFO配置的指针 指向普通型接收FIFO配置的指针 增强型Rx FIFO配置(HLI_Canfd_EnhancedRxFifoType)
成员 解释 取值范围 StandardIDFilter 指向增强型接收FIFO 指向标准帧过滤元素配置的指针 ExtendedIDFilter 指向增强型接收FIFO 指向扩展帧过滤元素配置的指针 StandardIDFilterNumber 用于过滤标准帧的过滤元素数量 0 ~ 增强型Rx FIFO过滤寄存器数量 ExtendedIDFilterNumber 用于过滤扩展帧的过滤元素数量 0 ~ 增强型Rx FIFO过滤寄存器数量/2 WaterMark 接收FIFO水位 0 ~ (增强型Rx FIFO最大深度 - 1) 注
StandardIDFilterNumber + (ExtendedIDFilterNumber * 2)需要小于增强型Rx FIFO过滤寄存器数量。
普通型Rx FIFO配置(HLI_Canfd_NormalRxFifoType)
成员 解释 取值范围 FilterNumber 过滤元素数量 可选范围参考 HLI_Canfd_NormalRxFifoFilterNumberTypeFilterPtr 指向过滤元素配置的指针 HLI_Canfd_NormalRxFifoFilterType类型的数组
过滤元素配置数组长度需要与设置的过滤元素数量相匹配(注意: 并非相同)
过滤元素配置数组长度 = 过滤元素数量 * 过滤元素结构类型对应的元素数量
Format_A, 1个过滤元素设置1个ID
Format_B, 1个过滤元素设置2个ID
Format_C, 1个过滤元素设置4个ID
注意: 过滤元素数量并非实际填写的数值, 而是转换后的数量IndividualMaskPtr 指向独立掩码配置的指针 HLI_Canfd_NormalRxFifoMaskType类型的数组
独立掩码配置数组长度需要与设置的过滤元素数量相匹配(注意: 并非相同)
独立掩码的数量 = 8 + (过滤元素数量 * 2)
注意: 过滤元素数量并非实际填写的数值, 而是转换后的数量IDFormat 过滤元素结构类型 可选范围参考 HLI_Canfd_NormalRxFifoIDFormatTypeGlobalIDType 全局ID类型 可选范围参考 HLI_Canfd_MsgIDTypeGlobalMask 全局掩码 uint32_t类型的数据 发送队列通用配置 (HLI_Canfd_TxQueueGeneralConfigType)
成员 解释 取值范围 TxQueueID队列ID 需小于 HLI_CANFD_MAX_TX_QUEUE_NUMBERController队列绑定的Controller 参考 HLI_Canfd_ControllerTypeMBIndex队列绑定邮箱索引 0 ~ (最大邮箱数量-1) (受 MBSize限制)Capacity队列容量 2 ~ HLI_CANFD_MAX_TX_QUEUE_CAPACITY
4. 驱动函数
4.1 函数接口
4.1.1 HLI_Canfd_Init
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_Init |
| 语法 | HLI_Canfd_ReturnType HLI_Canfd_Init(HLI_Canfd_ControllerType Controller, const HLI_Canfd_ConfigType *ConfigPtr) |
| 同步/异步 | 同步 |
| 重入性 | 针对不同Controller不可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 形参(输入) | ConfigPtr : 配置结构体指针 |
| 返回值 | HLI_CANFD_OK: 初始化成功 HLI_CANFD_NOT_OK: 初始化失败 |
| 描述 | 初始化Canfd驱动、初始化接收邮箱、接收FIFO等。 |
| 注意事项 | 仅支持未完成初始化的控制器模块执行初始化。 |
4.1.2 HLI_Canfd_Deinit
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_Deinit |
| 语法 | void HLI_Canfd_Deinit(HLI_Canfd_ControllerType Controller) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 返回值 | 无 |
| 描述 | 反初始化Canfd驱动。 |
| 注意事项 | 仅允许反初始化已完成初始化的控制器模块。 |
4.1.3 HLI_Canfd_SetMode
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_SetMode |
| 语法 | HLI_Canfd_ReturnType HLI_Canfd_SetMode(HLI_Canfd_ControllerType Controller, HLI_Canfd_ModeType Mode) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 形参(输入) | Mode: 控制器目标模式 (HLI_CANFD_T_START / HLI_CANFD_T_STOP) |
| 返回值 | HLI_CANFD_OK: 执行成功 HLI_CANFD_NOT_OK: 执行失败 |
| 描述 | 设置控制器的工作模式。 |
| 注意事项 | 初始化完成后控制器默认处于停止模式,需调用此函数启动。 |
4.1.4 HLI_Canfd_Write
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_Write |
| 语法 | HLI_Canfd_ReturnType HLI_Canfd_Write(HLI_Canfd_ControllerType Controller, uint8_t MBIndex, const HLI_Canfd_MessageType *const MsgPtr) |
| 同步/异步 | 异步 |
| 重入性 | 对不同Controller可重入;对相同邮箱索引不可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 形参(输入) | MBIndex: 邮箱索引 |
| 形参(输入) | MsgPtr: 消息指针 |
| 返回值 | HLI_CANFD_OK: 邮箱写入成功 HLI_CANFD_NOT_OK: 邮箱写入出错 HLI_CANFD_BUSY: 邮箱忙 |
| 描述 | 将PDU写入指定邮箱,硬件仲裁后发送。 |
| 注意事项 | 1. 返回值为邮箱状态,非发送完成状态。 2. PDU数据长度应符合配置限制。 |
4.1.5 HLI_Canfd_MainFunctionWrite
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_MainFunctionWrite |
| 语法 | void HLI_Canfd_MainFunctionWrite(HLI_Canfd_ControllerType Controller) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 返回值 | 无 |
| 描述 | 轮询发送完成状态。 |
| 注意事项 | 在轮询通知模式下需周期性调用。 |
4.1.6 HLI_Canfd_MainFunctionRead
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_MainFunctionRead |
| 语法 | void HLI_Canfd_MainFunctionRead(HLI_Canfd_ControllerType Controller) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 返回值 | 无 |
| 描述 | 轮询接收状态,处理接收到的报文。 |
| 注意事项 | 在轮询通知模式下需周期性调用。 |
4.1.7 HLI_Canfd_GetMailboxRxStatus
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_GetMailboxRxStatus |
| 语法 | bool HLI_Canfd_GetMailboxRxStatus(HLI_Canfd_ControllerType Controller, uint8_t MBIndex) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 形参(输入) | MBIndex: 邮箱编号 |
| 返回值 | true: 有新消息 false: 无新消息 |
| 描述 | 获取特定接收邮箱的状态。 |
4.1.8 HLI_Canfd_GetMailboxTxStatus
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_GetMailboxTxStatus |
| 语法 | bool HLI_Canfd_GetMailboxTxStatus(HLI_Canfd_ControllerType Controller, uint8_t MBIndex) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 形参(输入) | MBIndex: 邮箱编号 |
| 返回值 | true: 发送完成/空闲 false: 发送中/忙 |
| 描述 | 获取特定发送邮箱的状态。 |
4.1.9 HLI_Canfd_ReadRxMailbox
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_ReadRxMailbox |
| 语法 | void HLI_Canfd_ReadRxMailbox(HLI_Canfd_ControllerType Controller, uint8_t MBIndex, HLI_Canfd_MessageType *RxPdu) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 形参(输入) | MBIndex: 邮箱编号 |
| 形参(输出) | RxPdu: 接收消息缓冲区指针 |
| 返回值 | 无 |
| 描述 | 读取特定接收邮箱的消息。 |
4.1.10 HLI_Canfd_AbortTransmit
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_AbortTransmit |
| 语法 | void HLI_Canfd_AbortTransmit(HLI_Canfd_ControllerType Controller) |
| 同步/异步 | 同步 |
| 重入性 | 对不同Controller可重入 |
| 形参(输入) | Controller: 控制器模块 |
| 返回值 | 无 |
| 描述 | 取消控制器当前发送,并清除挂起的发送请求。 |
4.1.11 HLI_Canfd_TxQueue_Init
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_TxQueue_Init |
| 语法 | bool HLI_Canfd_TxQueue_Init(const HLI_Canfd_TxQueueGeneralConfigType *const ConfigPtr) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | ConfigPtr: 队列配置指针 |
| 返回值 | true: 初始化成功 false: 初始化失败 |
| 描述 | 初始化软件发送队列,绑定控制器和邮箱。 |
4.1.12 HLI_Canfd_TxQueue_Write
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_TxQueue_Write |
| 语法 | HLI_Canfd_ReturnType HLI_Canfd_TxQueue_Write(uint32_t CanfdTxQueueID, const HLI_Canfd_MessageType *const MsgPtr) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | CanfdTxQueueID: 队列ID |
| 形参(输入) | MsgPtr: 消息指针 |
| 返回值 | HLI_CANFD_OK: 写入成功 (邮箱或队列) HLI_CANFD_BUSY: 队列满 HLI_CANFD_NOT_OK: 写入出错 |
| 描述 | 将消息写入队列。若硬件邮箱空闲则直接写入邮箱,否则写入软件队列。 |
4.1.13 HLI_Canfd_TxQueueTriggerTransmit
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_TxQueueTriggerTransmit |
| 语法 | void HLI_Canfd_TxQueueTriggerTransmit(uint32_t CanfdTxQueueID) |
| 同步/异步 | 同步 |
| 重入性 | 对不同队列ID可重入 |
| 形参(输入) | CanfdTxQueueID: 队列ID |
| 返回值 | 无 |
| 描述 | 触发队列传输。若队列不为空且邮箱空闲,则从队列取出数据写入邮箱。 |
4.1.14 HLI_Canfd_TxQueue_DeInit
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_TxQueue_DeInit |
| 语法 | void HLI_Canfd_TxQueue_DeInit(uint32_t CanfdTxQueueID) |
| 同步/异步 | 同步 |
| 重入性 | 对不同队列ID可重入 |
| 形参(输入) | CanfdTxQueueID: 队列ID |
| 返回值 | 无 |
| 描述 | 反初始化发送队列。 |
4.1.15 HLI_Canfd_TxQueue_Clear
| Name | Description |
|---|---|
| 函数名称 | HLI_Canfd_TxQueue_Clear |
| 语法 | bool HLI_Canfd_TxQueue_Clear(uint32_t CanfdTxQueueID, bool ForceSwitch) |
| 同步/异步 | 同步 |
| 重入性 | 对不同队列ID可重入 |
| 形参(输入) | CanfdTxQueueID: 队列ID |
| 形参(输入) | ForceSwitch: 是否强制清除 |
| 返回值 | true: 清除成功 false: 清除失败 |
| 描述 | 清除队列内容。 |
4.2 中断回调
4.2.1 HLI_Canfd_RxIndicationCallbackType
| Name | Description |
|---|---|
| 函数类型名称 | HLI_Canfd_RxIndicationCallbackType |
| 语法 | void (*HLI_Canfd_RxIndicationCallbackType)(uint32_t MBIndex, HLI_Canfd_MessageType RxPdu) |
| 形参(输入) | MBIndex: 邮箱编号 (含FIFO虚拟编号) |
| 形参(输入) | RxPdu: 接收PDU |
| 返回值 | 无 |
| 描述 | 接收完成回调,通知用户收到新报文。 |
| 注意事项 | RxPdu 数据指针指向栈上临时变量,需在回调内处理或拷贝。 |
4.2.2 HLI_Canfd_TxConfirmationCallbackType
| Name | Description |
|---|---|
| 函数类型名称 | HLI_Canfd_TxConfirmationCallbackType |
| 语法 | void (*HLI_Canfd_TxConfirmationCallbackType)(uint32_t MBIndex) |
| 形参(输入) | MBIndex: 发送邮箱编号 |
| 返回值 | 无 |
| 描述 | 发送完成回调,通知用户指定邮箱发送成功。 |
| 注意事项 | 仅在 HLI_CANFD_ENABLE_TX_CALLBACK 为 HLI_ON 时有效。 |
4.2.3 HLI_Canfd_BusOffCallbackType
| Name | Description |
|---|---|
| 函数类型名称 | HLI_Canfd_BusOffCallbackType |
| 语法 | void (*HLI_Canfd_BusOffCallbackType)(void) |
| 形参(输入) | 无 |
| 返回值 | 无 |
| 描述 | Bus Off 事件回调。 |
| 注意事项 | 用户需在此回调中处理 Bus Off 恢复逻辑。 |
4.2.4 HLI_Canfd_ErrorAlarmCallbackType
| Name | Description |
|---|---|
| 函数类型名称 | HLI_Canfd_ErrorAlarmCallbackType |
| 语法 | void (*HLI_Canfd_ErrorAlarmCallbackType)(void) |
| 形参(输入) | 无 |
| 返回值 | 无 |
| 描述 | 错误警告事件回调。 |
| 注意事项 | 无 |
4.2.5 HLI_Canfd_RxFifoEventCallbackType
| Name | Description |
|---|---|
| 函数类型名称 | HLI_Canfd_RxFifoEventCallbackType |
| 语法 | void (*HLI_Canfd_RxFifoEventCallbackType)(HLI_Canfd_RxFifoEventType RxFifoEvent) |
| 形参(输入) | 无 |
| 返回值 | 无 |
| 形参(输入) | RxFifoEvent: Rx FIFO 事件类型 |
| 描述 | Rx FIFO 事件回调 (如溢出、警告等)。 |
| 注意事项 | 无 |
5. 使用示例
注
示例中使用的参数仅用作示例演示,应用时以实际为准。
1. 阻塞方式写邮箱发送
此示例展示了如何配置CANFD并使用阻塞方式写入邮箱进行发送,通过中断确认发送完成。
2. 中断接收
此示例展示了如何配置CANFD接收邮箱和Rx FIFO,并通过中断接收数据。
3. 发送队列
此示例展示了如何使用软件发送队列进行数据发送。
6. 限制与假设
- 初始化: 发送CANFD帧前必须在初始化时使能CANFD功能 (
EnableFd = true)。 - FIFO: 普通型Rx FIFO和增强型Rx FIFO不可同时使能。使能普通型Rx FIFO时, 不可使能CANFD功能, 仅能接收CAN帧
- 发送队列: 发送队列功能依赖额外的
kf32axxx_hli_canfd_extra模块。 - BusError: 内部封装处理,不对外释放直接接口,但提供错误报警回调。
7. 变更记录
| 版本 | 时间 | 变更记录 |
|---|---|---|
| v1.0 | 2025-11-24 | 新增初版文档 |
