我已經開始開發使用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();
}
據我所知,CRC和EOF字段不是軟件配置。它們由CAN控制器硬件完成。 –
@KooroshHajiani我是這麼認爲的,但因爲我有在ESR「形式的錯誤」代碼註冊我要確保我沒有錯過什麼。很多謝謝。 –