更新一次性发送多个FIFO和Buffer
[C] 纯文本查看 复制代码 /*
*********************************************************************************************************
* 函 数 名: can1_SendPacket
* 功能说明: 发送一包数据
* 形 参:_DataBuf 数据缓冲区
* _Len 数据长度
* FDCAN_DLC_BYTES_0
* FDCAN_DLC_BYTES_1
* FDCAN_DLC_BYTES_2
* FDCAN_DLC_BYTES_3
* FDCAN_DLC_BYTES_4
* FDCAN_DLC_BYTES_5
* FDCAN_DLC_BYTES_6
* FDCAN_DLC_BYTES_7
* FDCAN_DLC_BYTES_8
* FDCAN_DLC_BYTES_12
* FDCAN_DLC_BYTES_16
* FDCAN_DLC_BYTES_20
* FDCAN_DLC_BYTES_24
* FDCAN_DLC_BYTES_32
* FDCAN_DLC_BYTES_48
* FDCAN_DLC_BYTES_64
* 返 回 值: 无
*********************************************************************************************************
*/
void can1_SendPacket(uint8_t *_DataBuf, uint32_t _Len)
{
FDCAN_TxHeaderTypeDef TxHeader = {0};
/* 第1步:配置发送参数 ===================================================================*/
TxHeader.Identifier = 0x222; /* 设置接收帧消息的ID */
TxHeader.IdType = FDCAN_STANDARD_ID; /* 标准ID */
TxHeader.TxFrameType = FDCAN_DATA_FRAME; /* 数据帧 */
TxHeader.DataLength = _Len; /* 发送数据长度 */
TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE; /* 设置错误状态指示 */
TxHeader.BitRateSwitch = FDCAN_BRS_ON; /* 开启可变波特率 */
TxHeader.FDFormat = FDCAN_FD_CAN; /* FDCAN格式 */
TxHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS; /* 用于发送事件FIFO控制, 不存储 */
TxHeader.MessageMarker = 1; /* 用于复制到TX EVENT FIFO的消息Maker来识别消息状态,范围0到0xFF */
/* 第2步:添加数据到TX FIFO, 连续添加三组 ================================================*/
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, _DataBuf); /* 根据需要,可以修改_DataBuf数值 */
TxHeader.MessageMarker = 2;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, _DataBuf); /* 根据需要,可以修改_DataBuf数值 */
TxHeader.MessageMarker = 3;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, _DataBuf); /* 根据需要,可以修改_DataBuf数值 */
/* 使能Tx FIFO发送空中断 */
HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_TX_FIFO_EMPTY, 0);
/* 第2步:添加数据到TX FIFO, 连续添加三组 ================================================*/
TxHeader.MessageMarker = 4;
HAL_FDCAN_AddMessageToTxBuffer(&hfdcan1, &TxHeader, _DataBuf, FDCAN_TX_BUFFER0);/* 根据需要,可以修改_DataBuf数值 */
HAL_FDCAN_AddMessageToTxBuffer(&hfdcan1, &TxHeader, _DataBuf, FDCAN_TX_BUFFER1);/* 根据需要,可以修改_DataBuf数值 */
HAL_FDCAN_AddMessageToTxBuffer(&hfdcan1, &TxHeader, _DataBuf, FDCAN_TX_BUFFER2);/* 根据需要,可以修改_DataBuf数值 */
/* 使能Tx Buffer发送完成中断 */
HAL_FDCAN_EnableTxBufferRequest(&hfdcan1, FDCAN_TX_BUFFER0|FDCAN_TX_BUFFER1|FDCAN_TX_BUFFER2);
HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_TX_COMPLETE, FDCAN_TX_BUFFER0|FDCAN_TX_BUFFER1|FDCAN_TX_BUFFER2);
}
|