@@ -704,7 +704,26 @@ int can_write(can_t *obj, CAN_Message msg)
704
704
}
705
705
706
706
TxHeader .TxFrameType = FDCAN_DATA_FRAME ;
707
- TxHeader .DataLength = msg .len << 16 ;
707
+ switch (msg .len )
708
+ {
709
+ default :
710
+ case 0 : TxHeader .DataLength = FDCAN_DLC_BYTES_0 ; break ;
711
+ case 1 : TxHeader .DataLength = FDCAN_DLC_BYTES_1 ; break ;
712
+ case 2 : TxHeader .DataLength = FDCAN_DLC_BYTES_2 ; break ;
713
+ case 3 : TxHeader .DataLength = FDCAN_DLC_BYTES_3 ; break ;
714
+ case 4 : TxHeader .DataLength = FDCAN_DLC_BYTES_4 ; break ;
715
+ case 5 : TxHeader .DataLength = FDCAN_DLC_BYTES_5 ; break ;
716
+ case 6 : TxHeader .DataLength = FDCAN_DLC_BYTES_6 ; break ;
717
+ case 7 : TxHeader .DataLength = FDCAN_DLC_BYTES_7 ; break ;
718
+ case 8 : TxHeader .DataLength = FDCAN_DLC_BYTES_8 ; break ;
719
+ case 12 : TxHeader .DataLength = FDCAN_DLC_BYTES_12 ; break ;
720
+ case 16 : TxHeader .DataLength = FDCAN_DLC_BYTES_16 ; break ;
721
+ case 20 : TxHeader .DataLength = FDCAN_DLC_BYTES_20 ; break ;
722
+ case 24 : TxHeader .DataLength = FDCAN_DLC_BYTES_24 ; break ;
723
+ case 32 : TxHeader .DataLength = FDCAN_DLC_BYTES_32 ; break ;
724
+ case 48 : TxHeader .DataLength = FDCAN_DLC_BYTES_48 ; break ;
725
+ case 64 : TxHeader .DataLength = FDCAN_DLC_BYTES_64 ; break ;
726
+ }
708
727
TxHeader .ErrorStateIndicator = FDCAN_ESI_ACTIVE ;
709
728
TxHeader .BitRateSwitch = FDCAN_BRS_OFF ;
710
729
TxHeader .FDFormat = FDCAN_CLASSIC_CAN ;
@@ -985,4 +1004,4 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
985
1004
NVIC_EnableIRQ (FDCAN3_IT1_IRQn );
986
1005
#endif
987
1006
#endif
988
- }
1007
+ }
0 commit comments