Selaa lähdekoodia

重新配置CAN之前,关闭CAN,配置完再打开。

zhangjun1996 5 vuotta sitten
vanhempi
commit
3e7580dc7d
1 muutettua tiedostoa jossa 24 lisäystä ja 0 poistoa
  1. 24 0
      bsp/stm32/libraries/HAL_Drivers/drv_can.c

+ 24 - 0
bsp/stm32/libraries/HAL_Drivers/drv_can.c

@@ -806,10 +806,18 @@ static rt_err_t drv_control(struct rt_can_device *can, int cmd, void *arg)
         if (argval != can->config.mode)
         {
             can->config.mode = argval;
+            if (HAL_CAN_Stop(&drv_can->CanHandle) != HAL_OK)
+            {
+                return RT_ERROR;
+            }
             if (HAL_CAN_Init(&drv_can->CanHandle) != HAL_OK)
             {
                 return RT_ERROR;
             }
+            if (HAL_CAN_Start(&drv_can->CanHandle) != HAL_OK)
+            {
+                return RT_ERROR;
+            }
         }
         break;
     case RT_CAN_CMD_SET_BAUD:
@@ -844,10 +852,18 @@ static rt_err_t drv_control(struct rt_can_device *can, int cmd, void *arg)
             drv_init->TimeSeg2 = BAUD_DATA(BS2, baud_index);
             drv_init->Prescaler = BAUD_DATA(RRESCL, baud_index);
 
+            if (HAL_CAN_Stop(&drv_can->CanHandle) != HAL_OK)
+            {
+                return RT_ERROR;
+            }
             if (HAL_CAN_Init(&drv_can->CanHandle) != HAL_OK)
             {
                 return RT_ERROR;
             }
+            if (HAL_CAN_Start(&drv_can->CanHandle) != HAL_OK)
+            {
+                return RT_ERROR;
+            }
         }
         break;
     case RT_CAN_CMD_SET_PRIV:
@@ -860,10 +876,18 @@ static rt_err_t drv_control(struct rt_can_device *can, int cmd, void *arg)
         if (argval != can->config.privmode)
         {
             can->config.privmode = argval;
+            if (HAL_CAN_Stop(&drv_can->CanHandle) != HAL_OK)
+            {
+                return RT_ERROR;
+            }
             if (HAL_CAN_Init(&drv_can->CanHandle) != HAL_OK)
             {
                 return RT_ERROR;
             }
+            if (HAL_CAN_Start(&drv_can->CanHandle) != HAL_OK)
+            {
+                return RT_ERROR;
+            }
         }
         break;
     case RT_CAN_CMD_GET_STATUS: