gpt4 book ai didi

c - 如何使用 STM32 HAL_CAN 库生成格式正确的 TX CAN 帧?

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:17 24 4
gpt4 key购买 nike

我已经开始使用 STM32 微 Controller 和 HAL 库开发 CAN 应用程序。所以我有一些问题要做,以便测试将在无限循环中传输两个字符的应用程序。

我正在使用带有 STM32L4F6 微 Controller 的探索套件。我已经通过 HAL_CAN 库配置了 CAN Controller 参数。在那里,我注意到使用这个库,用户只能访问从 ID 帧字段到数据字段末尾(用于传输)。我猜 CRC、ACK 和 EOF 字段是在 HAL 最底层配置的,与用户代码无关。我错了吗?

  • 如果不是,那么当我调试我的代码时,如果 ESR 寄存器包含指示“格式错误”(根据数据表)的 010 错误字段,这意味着什么?

  • 如果我错了,我在哪里可以填写这些字段,或者我如何通过 HAL_CAN 驱动程序(当然,从我的用户代码)访问它们?

这是我的配置框架参数:

CAN_HandleTypeDef HCAN_Struct; // Type defined in HAL third-party 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
}

这里是 init 函数,其中配置了更多参数和那些:

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、ACK 和 EOF 确实不能由软件配置,因为它们在 CAN standard 中指定。并由硬件实现。

42.7.6 错误管理 STM32F43xxx Reference Manual p.1368 :

The error management as described in the CAN protocol is handled entirely by hardware using a Transmit Error Counter. (TEC value, in CAN_ESR register) and a Receive Error Counter (REC value, in the CAN_ESR register), which get incremented or decremented according to the error condition. For detailed information about TEC and REC management, refer to the CAN standard.

无法判断为什么会出现Form Error。也许您应该仔细检查您的 GPIO 配置。

关于c - 如何使用 STM32 HAL_CAN 库生成格式正确的 TX CAN 帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42528963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com