2017-03-01 31 views
1

我已經開始開發使用STM32單片機和HAL庫可以應用。所以我有一些問題要做,以便測試一個應用程序,它將在無限循環中傳輸兩個字符。如何使用stm32 HAL_CAN庫以正確的格式生成TX CAN幀?

我與STM32L4F6 MCU發現包工作。我通過HAL_CAN庫配置了CAN控制器參數。在那裏,我注意到使用這個庫,用戶只能從ID框字段訪問數據字段的末尾(對於transmisions)。我必須猜測CRC,ACK和EOF字段是在HAL最低層配置的,與用戶代碼無關。我錯了嗎?

  • 如果沒有,因此,這是什麼意思,如果ESR寄存器包含一個010錯誤的字段,表示「形式的錯誤」(根據數據表),當我調試我的代碼?

  • 如果我錯了,請任何人告訴我在哪裏填寫這些字段或如何通過HAL_CAN驅動程序(當然,從我的用戶代碼)訪問它們?

這裏是我的配置框架PARAMS:

CAN_HandleTypeDef HCAN_Struct;//type defined in hal thirdparty library 

void Can_ConfigureFrame(void) 
{ 
    //TX 
    HCAN_Struct.pTxMsg->StdId = 0x321; 
    HCAN_Struct.pTxMsg->ExtId = 0x01;//29 bits 
    HCAN_Struct.pTxMsg->IDE = CAN_ID_STD; 
    HCAN_Struct.pTxMsg->RTR = CAN_RTR_DATA; 
    HCAN_Struct.pTxMsg->DLC = DATABTXLONG;//1-9 
    HCAN_Struct.Instance->MCR &= (~(uint32_t)CAN_MCR_DBF);//descongelar el bus caN en modo debug bit --> dbf=0 

} 

這裏是配置了PARAMS和那些那些初始化函數:

void App_Task_CAN_init(void) 
{ 

    static CanTxMsgTypeDef  TxMessage; 
    static CanRxMsgTypeDef  RxMessage; 

    /*configuracion timing para obtener 500kb/s*/ 
    HCAN_Struct.Instance = CAN1; 

    HCAN_Struct.pTxMsg = &TxMessage; 
    HCAN_Struct.pRxMsg = &RxMessage; 
    HCAN_Struct.Init.Prescaler = 1; 
    HCAN_Struct.Init.Mode = CAN_MODE_NORMAL; 
    HCAN_Struct.Init.SJW = CAN_SJW_1TQ; 
    HCAN_Struct.Init.BS1 = CAN_BS1_6TQ;//segment point at 87.5% 
    HCAN_Struct.Init.BS2 = CAN_BS2_1TQ; 
    HCAN_Struct.Init.TTCM = DISABLE; 
    HCAN_Struct.Init.ABOM = DISABLE; 
    HCAN_Struct.Init.AWUM = DISABLE; 
    HCAN_Struct.Init.NART = DISABLE; 
    HCAN_Struct.Init.RFLM = DISABLE;//Fifo locked mode disabled 
    HCAN_Struct.Init.TXFP = DISABLE;//prioridad de tx por id (más bajo más  prioridad) 


    if (HAL_CAN_Init(&HCAN_Struct) != HAL_OK) 
{ 
    TaskCan_Error_Handler(); 
} 
    Can_ConfigureFrame(); 

} 
+1

據我所知,CRC和EOF字段不是軟件配置。它們由CAN控制器硬件完成。 –

+0

@KooroshHajiani我是這麼認爲的,但因爲我有在ESR「形式的錯誤」代碼註冊我要確保我沒有錯過什麼。很多謝謝。 –

回答

0

CRC,ACK和EOF確實是不可配置的軟件,因爲它們在CAN standard中指定並由硬件實現。

42.7.6錯誤管理 STM32F43xxx Reference Manual p.1368

使用發送錯誤計數器通過硬件 在CAN 協議如所描述的完全處理的錯誤管理。 (TEC值,在CAN_ESR寄存器)和一個接收錯誤計數器(REC值,在CAN_ESR寄存器),其獲得根據錯誤條件遞增或遞減。有關TEC和REC管理的詳細信息,請參閱CAN標準。

我無法判斷爲什麼表單錯誤發生。也許你應該仔細檢查你的GPIO配置。