add more error led states and ignore CAN send FIFO full error

This commit is contained in:
Leonard Gies 2025-06-20 00:01:30 +02:00
parent 28fc2a966b
commit 2afdfa8293
Signed by: l.gies
GPG Key ID: 6F6FB9338EE44F71
2 changed files with 57 additions and 11 deletions

View File

@ -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 ---------------------------------------------*/

View File

@ -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 */
/**