You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32-L432KC CAN邮箱未清空触发HAL_CAN_ERROR_PARAM故障

STM32-L432KC CAN发送触发HAL_CAN_ERROR_PARAM错误排查

在STM32-L432KC平台上,尝试每秒发送一次CAN报文,数次发送后触发HAL_CAN_ERROR_PARAM错误。已在发送前检查空闲CAN邮箱,但邮箱始终无法被清空。以下为相关代码及错误信息:

主循环代码

while (1)
{
    //if the flag is high, one sample moment will occur
    if(sampleFlag == 1) {
        readWIT(WITsensor);
        //delay to allow the bus to clear
        HAL_Delay(3);

        readSenixSensors(&Senix1, &Senix2);

        if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan1) != 0) {
            
            sendMessage();
        }

        sampleFlag = 0;
    }
}

CAN相关函数代码

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
    //check if the interrupt is triggered by the correct timer
    if (htim == &htim16){
        //create a variable delay
        if(currentDelay >= timeBetweenSamples) {
            sampleFlag = 1;

            currentDelay = 0;
        }
        else {
            currentDelay++;
        }
    }
}

void convertFloatArrayToInt(float floatArray[], uint8_t intArray[], uint8_t size, uint16_t scale){
    uint8_t j = 0;
    for (uint8_t i = 0; i < size; i++) {
        uint16_t scaledValue = floatArray[i] * scale;
        intArray[j] = (scaledValue & 0xFF00) >> 8;
        intArray[j+1] = scaledValue & 0x00FF;
        j += 2;
    }
}

void sendPartionalMessage(uint8_t TxData[], uint8_t TxDataArray[], uint8_t id, uint8_t begin) {
    TxData[0] = id;
    uint8_t j = begin;

    for(uint8_t i = 0; i < 7; i++) {
        TxData[i] = TxDataArray[j];
        j += 1;
    }

    /* send TxData*/
    if (HAL_CAN_AddTxMessage(&hcan1, &TxHeader, (uint8_t*)TxData, &TxMailbox) != HAL_OK)
    {
        uint32_t error = HAL_CAN_GetError(&hcan1);
        Error_Handler (); //!Error triggered here!
    }
}

void sendMessage(){

    /* convert the values to a type we can send*/
    //convertFloatArrayToInt(WITsensor, WITvalues, WITarraySize, 1000);

    /* make a array size so it is devidable by 7 and can accomadate all the vales
     * WITarraySize * 2 accommodates for all the WIT values
     * + 2 accommodates for the Senix sensors
     * + 6 makes it devidable by 7*/
    uint8_t TxDataArray[WITarraySize * 2 + 2 + 6];

    TxDataArray[0] = Senix1;
    TxDataArray[1] = Senix2;

    for(uint8_t i = 2; i < WITarraySize * 2 + 2; i++) {
        TxDataArray[i] = WITvalues[i - 2];
    }

    /*send all the data in different messages*/
    sendPartionalMessage(TxData, TxDataArray, 'A', 0);
    sendPartionalMessage(TxData, TxDataArray, 'B', 7);
//  sendPartionalMessage(TxData, TxDataArray, 'C', 14);
//  sendPartionalMessage(TxData, TxDataArray, 'D', 21);


}

void CAN_TX_filter_init(void)
{
    TxHeader.StdId = 0x222;
    TxHeader.ExtId = 0;
    TxHeader.IDE = CAN_ID_STD;
    TxHeader.RTR = CAN_RTR_DATA;
    TxHeader.DLC = 8;
    TxHeader.TransmitGlobalTime = DISABLE;
}

CAN初始化代码

void MX_CAN1_Init(void)
{

  /* USER CODE BEGIN CAN1_Init 0 */

  /* USER CODE END CAN1_Init 0 */

  /* USER CODE BEGIN CAN1_Init 1 */

  /* USER CODE END CAN1_Init 1 */
  hcan1.Instance = CAN1;
  hcan1.Init.Prescaler = 8;
  hcan1.Init.Mode = CAN_MODE_NORMAL;
  hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan1.Init.TimeSeg1 = CAN_BS1_7TQ;
  hcan1.Init.TimeSeg2 = CAN_BS2_8TQ;
  hcan1.Init.TimeTriggeredMode = DISABLE;
  hcan1.Init.AutoBusOff = DISABLE;
  hcan1.Init.AutoWakeUp = DISABLE;
  hcan1.Init.AutoRetransmission = DISABLE;
  hcan1.Init.ReceiveFifoLocked = DISABLE;
  hcan1.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CAN1_Init 2 */
  if (HAL_CAN_Start(&hcan1) != HAL_OK) {
        Error_Handler();
    }
  /* USER CODE END CAN1_Init 2 */

}

错误相关信息

  • 错误触发位置:sendPartionalMessage函数中调用HAL_CAN_AddTxMessage失败后进入Error_Handler
  • 错误码:对应HAL_CAN_ERROR_PARAM参数错误
  • 错误定义:HAL_CAN_ERROR_PARAM表示CAN外设或HAL库函数接收到无效参数

内容的提问来源于stack exchange,提问作者HugoDiePugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:58:14