您好、香榭丽舍
我的客户询问远程帧。 我检查了他的代码设置、我认为设置是可以的。 我找到了讨论远程帧的相关链接。 我检查了客户代码、它确实设置了 DLC
客户测试环境:PC<->USB 转 CAN 转换 器<->CAN 收发器<->F280049
PC 发送了远程帧、但 F280049未响应。 客户发送标准帧时、F280049响应数据帧。
我检查了 TRM、其中提到如果 RmtEn = 1、TxRqst 将自动设置、 远程帧将由数据帧自主响应。 请告诉我将自动发送哪个数据帧?
当我们将 obj 类型设置为'CAN_MSG_OBJ_TYPE_RxTx_REMOTE 时、我检查了启用 RmtEn 的 CAN.c。 但是、当我们为远程帧配置单个 RX obj 时、图27-8显示了 RmtEn = 0。 客户禁用 RmtEn、但仍然无法接收远程帧。 客户设置 CAN 消息 obj 代码如下所示。 我们是否在这里遗漏了任何其他配置? 谢谢!
CAN_setupMessageObject (CANB_BASE、(TX_OBJ_ID_3 + RX_OBJ_OFFSET)、0x310、CAN_MSG_FRAME_STD、 CAN_MSG_OBJ_TYPE_RXxTxREMOTE、 0、CAN_MSG_OBJ_RX_INT_ENABLE、 0);
CAN ISR 设置
#pragma CODE_SECTION (canISR、".TI.ramfunc") 中断空 canISR (void){ uint32_t status; //读取 CAN 中断状态以查找中断原因 状态= CAN_getInterruptCase (CANB_BASE); //如果原因是控制器状态中断,则获取状态 if (status = CAN_INT_INT0ID_STATUS){ 状态= CAN_getStatus (CANB_BASE); //检查是否发生错误。 if (((status &~(CAN_STATUS_TXOK | CAN_STATUS_RXOK))!= 7)&& ((STATUS &μ~(CAN_STATUS_TXOK | CAN_STATUS_RXOK))!= 0)) { //清除错误标志 ex_count++; if (EX_COUNT > 500){ ex_count = 0; } } 否则、如果(status <= RX_obj_offset){ TX_COUNT++; 如果(TX_COUNT > 500){ TX_COUNT = 0; } CAN_clearInterruptStatus (CANB_BASE、STATUS); } 否则、如果(status > RX_obj_offset){ RX_COUNT++; 如果(RX_COUNT > 500){ RX_COUNT = 0; } //CAN_readMessage (CANB_BASE、STATUS、rxMsgData); //C1RX.RX_Data[0]= rxMsgData[0]; //C1RX.RX_Data[1]= rxMsgData[1]; // rxC1MsxRX.RX_Data[2]= rxC1MsgData[2]; // rxC1MsRX_RX.3[rx = rgData] ;rxRX_RX_RX_3[r.r.rx = rgData[r.rx = rc.rx = rx = rc.rx;// rxRX_rx = rxRX.rxRX_rxData[rxRX_rx = rx = rc.rx = rx = rx = rx = rx.4]/ rx = rx = rx = rc.rx = rx = rx = rgData[rx = rx = rx = rc.rx;// rx = rc.rx = rx = rx = rx = rx = rx = rx = rx =
