瀏覽代碼

debug(can): 修复can发送数据分包错误bug。

CN\zhangkai71 2 年之前
父節點
當前提交
36c9ae737a

+ 8 - 9
User project/3.BasicFunction/Source/can.c

@@ -84,8 +84,6 @@ void CAN_Rx_ISR(CAN_Buf_TypeDef *ptCANRx, UBYTE ucLength)
 
 static UWORD LastPacketLen, PacketNum;
 static ULONG OVtim;
-static UWORD CAN_DELYA;
-static UWORD MailState;
 void  CAN_SendData(UWORD ID, const UBYTE Data[], UWORD Length)
 {
     UBYTE  i, j;
@@ -124,13 +122,13 @@ void  CAN_SendData(UWORD ID, const UBYTE Data[], UWORD Length)
                 OVtim++;
             } //等待发送结束
             
-            MailState = (UWORD)can_transmit_states(CAN0,can_ubMbox);
             if (OVtim >= 0XFFF)
             {
                 return;
+            }
         }
         //发送最后一个数据包
-            pTxMsg->tx_dlen = (UBYTE)LastPacketLen;
+        pTxMsg->tx_dlen = (UBYTE)LastPacketLen;
         
         for (j = 0; j < LastPacketLen; j++)
         {
@@ -141,18 +139,19 @@ void  CAN_SendData(UWORD ID, const UBYTE Data[], UWORD Length)
         OVtim = 0;
         
         while((can_transmit_states(CAN0,can_ubMbox) != CAN_TRANSMIT_OK) && (OVtim < 0XFFF))
-            {
+        {
                 OVtim++;
-            }
+        }
 
         if (OVtim >= 0XFFF)
-            {
+        {
             return;
-    }
-}
+        }
+
      }
 }
 
+
 static UBYTE CanSendData[255], CanSendData_CRC_Buf[255];
 void SendData(UWORD ID, UBYTE Mode, UWORD Command, const UBYTE *Data)
 {

+ 1 - 1
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Source/hwsetup.c

@@ -1027,7 +1027,7 @@ void hw_voInitCAN(void)
     can_filter.filter_number = 0;
     can_filter.filter_mode = CAN_FILTERMODE_MASK;
     can_filter.filter_bits = CAN_FILTERBITS_32BIT;
-    can_filter.filter_list_high = (uint16_t)((((uint32_t)ID_TO_MC_FILTER << 21) & 0xFFFF0000U) >> 16); ;
+    can_filter.filter_list_high = (uint16_t)((((uint32_t)ID_TO_MC_FILTER << 21) & 0xFFFF0000U) >> 16); 
     can_filter.filter_list_low = (uint16_t)(((uint32_t)ID_TO_MC_FILTER << 21) | CAN_FF_STANDARD | CAN_FT_DATA) & 0xFFFF;
     can_filter.filter_mask_high = (uint16_t)((((uint32_t)ID_TO_MC_MASK << 21) & 0xFFFF0000U) >> 16);
     can_filter.filter_mask_low = (uint16_t)((((uint32_t)ID_TO_MC_MASK << 21) & 0xFFFF) | CAN_FF_STANDARD | CAN_FT_DATA);