|
void can1_SendPacket(uint8_t *_DataBuf, uint8_t _Len){
FDCAN_TxHeaderTypeDef TxHeader = {0};
/* 配置发送参数 */
TxHeader.Identifier = 0x222; /* 设置接收帧消息的ID */
TxHeader.IdType = FDCAN_STANDARD_ID; /* 标准ID */
TxHeader.TxFrameType = FDCAN_DATA_FRAME; /* 数据帧 */
TxHeader.DataLength = (uint32_t)_Len << 16; /* 发送数据长度 */
TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE; /* 设置错误状态指示 */
TxHeader.BitRateSwitch = FDCAN_BRS_ON; /* 开启可变波特率 */
TxHeader.FDFormat = FDCAN_FD_CAN; /* FDCAN格式 */
TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;/* 用于发送事件FIFO控制, 不存储 */
TxHeader.MessageMarker = 0; /* 用于复制到TX EVENT FIFO的消息Maker来识别消息状态,范围0到0xFF */
/* 添加数据到TX FIFO */
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, _DataBuf);
}
发送函数的数据长度要左移16bit,接收函数也是右移回去,但是正点原子的FDCAN例子发送函数的数据长度不移动,不知道为什么会这么做?
//can发送一组数据(固定格式:ID为0X12,标准帧,数据帧)
//len:数据长度(最大为8),可设置为FDCAN_DLC_BYTES_2~FDCAN_DLC_BYTES_8
//msg:数据指针,最大为8个字节.
//返回值:0,成功;
// 其他,失败;
u8 FDCAN1_Send_Msg(u8* msg,u32 len)
{
FDCAN1_TxHeader.Identifier=0x12; //32位ID
FDCAN1_TxHeader.IdType=FDCAN_STANDARD_ID; //标准ID
FDCAN1_TxHeader.TxFrameType=FDCAN_DATA_FRAME; //数据帧
FDCAN1_TxHeader.DataLength=len; //数据长度
FDCAN1_TxHeader.ErrorStateIndicator=FDCAN_ESI_ACTIVE;
FDCAN1_TxHeader.BitRateSwitch=FDCAN_BRS_OFF; //关闭速率切换
FDCAN1_TxHeader.FDFormat=FDCAN_CLASSIC_CAN; //传统的CAN模式
FDCAN1_TxHeader.TxEventFifoControl=FDCAN_NO_TX_EVENTS; //无发送事件
FDCAN1_TxHeader.MessageMarker=0;
if(HAL_FDCAN_AddMessageToTxFifoQ(&FDCAN1_Handler,&FDCAN1_TxHeader,msg)!=HAL_OK) return 1;//发送
return 0;
}
|
|