Ver Fonte

1、修改can配置,采样点设置为87.5%;
2、修改过滤器配置,只能接收0x751数据。

Dail há 1 ano atrás
pai
commit
6ba2b5da2d
3 ficheiros alterados com 49 adições e 53 exclusões
  1. 42 9
      MDK-ARM/STM32F103C8T6_BOOTLOADER.uvprojx
  2. 6 43
      Src/can.c
  3. 1 1
      User/user_can/can_app.c

+ 42 - 9
MDK-ARM/STM32F103C8T6_BOOTLOADER.uvprojx

@@ -10,12 +10,11 @@
       <TargetName>STM32F103C8T6_BOOTLOADER_V1.0</TargetName>
       <ToolsetNumber>0x4</ToolsetNumber>
       <ToolsetName>ARM-ADS</ToolsetName>
-      <pCCUsed>5060422::V5.06 update 4 (build 422)::ARMCC</pCCUsed>
       <TargetOption>
         <TargetCommonOption>
           <Device>STM32F103C8</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F1xx_DFP.2.1.0</PackID>
+          <PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
           <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
@@ -125,6 +124,47 @@
             <HexOffset>0</HexOffset>
             <Oh166RecLen>16</Oh166RecLen>
           </OPTHX>
+          <Simulator>
+            <UseSimulator>0</UseSimulator>
+            <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+            <RunToMain>1</RunToMain>
+            <RestoreBreakpoints>1</RestoreBreakpoints>
+            <RestoreWatchpoints>1</RestoreWatchpoints>
+            <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+            <RestoreFunctions>1</RestoreFunctions>
+            <RestoreToolbox>1</RestoreToolbox>
+            <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
+            <RestoreSysVw>1</RestoreSysVw>
+          </Simulator>
+          <Target>
+            <UseTarget>1</UseTarget>
+            <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
+            <RunToMain>1</RunToMain>
+            <RestoreBreakpoints>1</RestoreBreakpoints>
+            <RestoreWatchpoints>1</RestoreWatchpoints>
+            <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
+            <RestoreFunctions>0</RestoreFunctions>
+            <RestoreToolbox>1</RestoreToolbox>
+            <RestoreTracepoints>1</RestoreTracepoints>
+            <RestoreSysVw>1</RestoreSysVw>
+          </Target>
+          <RunDebugAfterBuild>0</RunDebugAfterBuild>
+          <TargetSelection>6</TargetSelection>
+          <SimDlls>
+            <CpuDll></CpuDll>
+            <CpuDllArguments></CpuDllArguments>
+            <PeripheralDll></PeripheralDll>
+            <PeripheralDllArguments></PeripheralDllArguments>
+            <InitializationFile></InitializationFile>
+          </SimDlls>
+          <TargetDlls>
+            <CpuDll></CpuDll>
+            <CpuDllArguments></CpuDllArguments>
+            <PeripheralDll></PeripheralDll>
+            <PeripheralDllArguments></PeripheralDllArguments>
+            <InitializationFile></InitializationFile>
+            <Driver>Segger\JL2CM3.dll</Driver>
+          </TargetDlls>
         </DebugOption>
         <Utilities>
           <Flash1>
@@ -189,7 +229,6 @@
             <useUlib>1</useUlib>
             <EndSel>0</EndSel>
             <uLtcg>0</uLtcg>
-            <nSecure>0</nSecure>
             <RoSelD>3</RoSelD>
             <RwSelD>3</RwSelD>
             <CodeSel>0</CodeSel>
@@ -326,11 +365,6 @@
             <useXO>0</useXO>
             <v6Lang>1</v6Lang>
             <v6LangP>1</v6LangP>
-            <vShortEn>1</vShortEn>
-            <vShortWch>1</vShortWch>
-            <v6Lto>0</v6Lto>
-            <v6WtE>0</v6WtE>
-            <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls>--C99</MiscControls>
               <Define>USE_HAL_DRIVER,STM32F103xB</Define>
@@ -348,7 +382,6 @@
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
             <useXO>0</useXO>
-            <uClangAs>0</uClangAs>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>

+ 6 - 43
Src/can.c

@@ -46,17 +46,16 @@ CAN_HandleTypeDef hcan;
 /* CAN init function */
 void MX_CAN_Init(void)
 {
-
   hcan.Instance = CAN1;
-  hcan.Init.Prescaler = 24;
+  hcan.Init.Prescaler = 18; //波特率 = 36MHz / 18 / (1 + 6 + 1) = 250K
   hcan.Init.Mode = CAN_MODE_NORMAL;
-  hcan.Init.SJW = CAN_SJW_1TQ;
-  hcan.Init.BS1 = CAN_BS1_4TQ;
+  hcan.Init.SJW = CAN_SJW_1TQ; //采样点 = (1 + 6) / (1 + 6 + 1) = 87.5%
+  hcan.Init.BS1 = CAN_BS1_6TQ;
   hcan.Init.BS2 = CAN_BS2_1TQ;
   hcan.Init.TTCM = DISABLE;
   hcan.Init.ABOM = ENABLE;
   hcan.Init.AWUM = ENABLE;
-  hcan.Init.NART = DISABLE;
+  hcan.Init.NART = DISABLE; //开启自动重传
   hcan.Init.RFLM = DISABLE;
   hcan.Init.TXFP = DISABLE;
   if (HAL_CAN_Init(&hcan) != HAL_OK)
@@ -135,27 +134,13 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
 } 
 
 /* USER CODE BEGIN 1 */
-#define ID_TO_MC_FILTER       0x701
-#define ID_TO_MC_MASK         0x70F
+#define ID_TO_MC_FILTER       0x751
+#define ID_TO_MC_MASK         0x7FF
 
-#define ID_BC_FILTER          0x700
-#define ID_BC_MASK            0x70F
 void Can_Filter_Config(void)
 {
 	CAN_FilterConfTypeDef  sFilterConfig;
 	
-//	sFilterConfig.FilterNumber = 0;
-//  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
-//  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
-//  sFilterConfig.FilterIdHigh = 0x0000;
-//  sFilterConfig.FilterIdLow = 0x0000;
-//  sFilterConfig.FilterMaskIdHigh = 0x0000;
-//  sFilterConfig.FilterMaskIdLow = 0x0000;
-//  sFilterConfig.FilterFIFOAssignment = 0;
-//  sFilterConfig.FilterActivation = ENABLE;
-//  sFilterConfig.BankNumber = 14;	
-//	HAL_CAN_ConfigFilter(&hcan, &sFilterConfig); 
-	
 	//设置过滤器组0,指定接收发送给PBU的数据
   sFilterConfig.FilterNumber = 0;             
   sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;   
@@ -176,28 +161,6 @@ void Can_Filter_Config(void)
   {  
     Error_Handler();  
   }
-	
-	//设置过滤器组1,指定接收广播数据
-  sFilterConfig.FilterNumber = 1;             
-  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;   
-  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; 
-	
-	//设置过滤寄存器
-  sFilterConfig.FilterIdHigh = (uint16_t)((((uint32_t)ID_BC_FILTER << 21) & 0xFFFF0000) >> 16);   
-  sFilterConfig.FilterIdLow = (uint16_t)(((uint32_t)ID_BC_FILTER << 21) | CAN_ID_STD | CAN_RTR_DATA) & 0xFFFF;  
-    
-	//设置屏蔽寄存器
-  sFilterConfig.FilterMaskIdHigh = (uint16_t)((((uint32_t)ID_BC_MASK << 21) & 0xFFFF0000) >> 16);;  
-  sFilterConfig.FilterMaskIdLow = 0xFFFF;       
-    
-  sFilterConfig.FilterFIFOAssignment = 0;    
-  sFilterConfig.FilterActivation = ENABLE;   
-    
-  if(HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)  
-  {  
-    Error_Handler();  
-  }
-	
 }
 /* USER CODE END 1 */
 

+ 1 - 1
User/user_can/can_app.c

@@ -210,7 +210,7 @@ void CA_RxData_Process(CAN_Buf_TypeDef*ptCANRx)
 
 void sendBootInfo(void)
 {
-	static CD_UINT8 bootInfoBuff[22]={ FRAME_HEAD1,FRAME_HEAD2,0x07,0x15,0x0C,0x0B,0xC1,0x09,'M','C',' ','V','2','.','0','.','0',0x00,0x00,0x00,0x00,0xF0 };//°æ±¾ºÅ: MC V2.0.0
+	static CD_UINT8 bootInfoBuff[22]={ FRAME_HEAD1,FRAME_HEAD2,0x07,0x15,0x0C,0x0B,0xC1,0x09,'M','C',' ','V','2','.','1','.','0',0x00,0x00,0x00,0x00,0xF0 };//°æ±¾ºÅ: MC V2.1.0
 	CD_UINT32 crc32Ret;
 	//static CD_UINT8 ucInit_flag = 0;
 	uint8_t i;