新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2019-11-27
- 在线时间
- 3 小时
|
1金钱
fdcan可以发送,但是只有第一帧时正常的,后面每次都会发送同样的两帧。有人碰到这样的问题吗?
只要一写fdcan的TXBAR寄存器,就i会有两帧发送出来,不知道时哪里的问题,有大神知道吗?
帧数据如下,也用示波器看了,确实是一下发送了两帧。
初始化代码
hfdcan1.Instance = FDCAN1;
hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
hfdcan1.Init.AutoRetransmission = DISABLE;
hfdcan1.Init.TransmitPause = DISABLE;
hfdcan1.Init.ProtocolException = DISABLE;
hfdcan1.Init.NominalPrescaler = 30; //480Mhz/30 = 16Mhz
hfdcan1.Init.NominalSyncJumpWidth = 1; //10+3+3 = 16 1Mhz bps
hfdcan1.Init.NominalTimeSeg1 = 9;
hfdcan1.Init.NominalTimeSeg2 = 6;
hfdcan1.Init.DataPrescaler = 30; //480Mhz/30 = 16Mhz
hfdcan1.Init.DataSyncJumpWidth = 1; //10+3+3=16 1MHz bps
hfdcan1.Init.DataTimeSeg1 = 9;
hfdcan1.Init.DataTimeSeg2 = 6;
hfdcan1.Init.MessageRAMOffset = 0;
hfdcan1.Init.StdFiltersNbr = 0;
hfdcan1.Init.ExtFiltersNbr = 0;
hfdcan1.Init.RxFifo0ElmtsNbr = 0;
hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.RxFifo1ElmtsNbr = 0;
hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.RxBuffersNbr = 0;
hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.TxEventsNbr = 0;
hfdcan1.Init.TxBuffersNbr = 0;
hfdcan1.Init.TxFifoQueueElmtsNbr = 32; //32 fifo
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
{
Error_Handler();
}
发送代码:
FDCAN_txheader.Identifier = 1234;
FDCAN_txheader.IdType = FDCAN_STANDARD_ID;
FDCAN_txheader.TxFrameType = FDCAN_DATA_FRAME;
FDCAN_txheader.DataLength = FDCAN_DLC_BYTES_4;
FDCAN_txheader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
FDCAN_txheader.BitRateSwitch = FDCAN_BRS_OFF;//FDCAN_BRS_ON;
FDCAN_txheader.FDFormat = FDCAN_CLASSIC_CAN;//FDCAN_FD_CAN;
FDCAN_txheader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
FDCAN_txheader.MessageMarker = 0;
for(i=0; i<8; i++)
CANTxBuf = 0x00;
CANTxBuf[0] = SYSTEM_TotalSecs;
CANTxBuf[1] = SYSTEM_TotalSecs>>8;
CANTxBuf[2] = SYSTEM_TotalSecs>>16;
CANTxBuf[3] = SYSTEM_TotalSecs>>24;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &FDCAN_txheader, CANTxBuf);
|
|