add more error led states and ignore CAN send FIFO full error
This commit is contained in:
		@ -47,6 +47,7 @@ extern "C" {
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
void Error_Handler_Led(uint8_t err);
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -132,9 +132,11 @@ void loop_1kHz() {
 | 
			
		||||
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (HAL_FDCAN_AddMessageToTxFifoQ(hMainCAN, &txHeader, (uint8_t*) &txData) != HAL_OK)
 | 
			
		||||
        Error_Handler();
 | 
			
		||||
 | 
			
		||||
      if (HAL_FDCAN_AddMessageToTxFifoQ(hMainCAN, &txHeader, (uint8_t*) &txData) != HAL_OK) {
 | 
			
		||||
        if(HAL_FDCAN_GetError(hMainCAN) != HAL_FDCAN_ERROR_FIFO_FULL) {
 | 
			
		||||
          Error_Handler_Led(1);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (mscounter >= 500) {
 | 
			
		||||
@ -195,10 +197,10 @@ int main(void)
 | 
			
		||||
  hPeriCAN = &hfdcan2;
 | 
			
		||||
 | 
			
		||||
  if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(2);
 | 
			
		||||
 | 
			
		||||
  if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_values, NUM_ADC_PINS) != HAL_OK)
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(2);
 | 
			
		||||
 | 
			
		||||
  HAL_TIM_Base_Start_IT(&htim6);
 | 
			
		||||
 | 
			
		||||
@ -215,11 +217,11 @@ int main(void)
 | 
			
		||||
  txHeader.DataLength = 8;
 | 
			
		||||
 | 
			
		||||
  if (HAL_FDCAN_ActivateNotification(hMainCAN, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(3);
 | 
			
		||||
 | 
			
		||||
  if (HAL_FDCAN_ConfigGlobalFilter(hMainCAN, FDCAN_REJECT, FDCAN_REJECT,
 | 
			
		||||
                                    FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE) != HAL_OK)
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(3);
 | 
			
		||||
 | 
			
		||||
  FDCAN_FilterTypeDef filter;
 | 
			
		||||
  filter.IdType = FDCAN_STANDARD_ID;
 | 
			
		||||
@ -230,10 +232,10 @@ int main(void)
 | 
			
		||||
  filter.FilterID2 = CAN_PWM_FILTER_MASK;
 | 
			
		||||
 | 
			
		||||
  if (HAL_FDCAN_ConfigFilter(hMainCAN, &filter) != HAL_OK)
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(5);
 | 
			
		||||
 | 
			
		||||
  if (HAL_FDCAN_Start(hMainCAN) != HAL_OK)
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(5);
 | 
			
		||||
 | 
			
		||||
  // Init all channels as stopped
 | 
			
		||||
  memset(pwm_ch_active, 0, 8);
 | 
			
		||||
@ -299,7 +301,7 @@ void SystemClock_Config(void)
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLFRACN = 0;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(4);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Initializes the CPU, AHB and APB buses clocks
 | 
			
		||||
@ -317,7 +319,7 @@ void SystemClock_Config(void)
 | 
			
		||||
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    Error_Handler();
 | 
			
		||||
    Error_Handler_Led(4);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -458,6 +460,49 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 | 
			
		||||
  HAL_ResumeTick();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Error_Handler_Led(uint8_t err) {
 | 
			
		||||
  HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_RESET);
 | 
			
		||||
  HAL_GPIO_WritePin(STATUS_G_GPIO_Port, STATUS_G_Pin, GPIO_PIN_RESET);
 | 
			
		||||
  HAL_GPIO_WritePin(STATUS_B_GPIO_Port, STATUS_B_Pin, GPIO_PIN_RESET);
 | 
			
		||||
  switch (err)
 | 
			
		||||
  {
 | 
			
		||||
  case 0: // red: general error
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_SET);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 1: // red blue: in 1 kHz loop
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_SET);
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_B_GPIO_Port, STATUS_B_Pin, GPIO_PIN_SET);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 2: // blue: ADC calibration or DMA start
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_B_GPIO_Port, STATUS_B_Pin, GPIO_PIN_SET);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case 3: // green blue: CAN notify and config gloabl filter
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_B_GPIO_Port, STATUS_B_Pin, GPIO_PIN_SET);
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_G_GPIO_Port, STATUS_G_Pin, GPIO_PIN_SET);
 | 
			
		||||
    break;
 | 
			
		||||
    
 | 
			
		||||
  case 4: //red green: clock
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_SET);
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_G_GPIO_Port, STATUS_G_Pin, GPIO_PIN_SET);
 | 
			
		||||
    break;
 | 
			
		||||
    
 | 
			
		||||
  case 5: // red green blue: CAN config filter and start
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_R_GPIO_Port, STATUS_R_Pin, GPIO_PIN_SET);
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_B_GPIO_Port, STATUS_B_Pin, GPIO_PIN_SET);
 | 
			
		||||
    HAL_GPIO_WritePin(STATUS_G_GPIO_Port, STATUS_G_Pin, GPIO_PIN_SET);
 | 
			
		||||
    break;
 | 
			
		||||
    
 | 
			
		||||
    default:
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  __disable_irq();
 | 
			
		||||
  while (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 4 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user