This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C1294NCPDT:TM4C1294NCPDT 可能会接收错误

Guru**** 2601915 points
Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/743704/ccs-tm4c1294ncpdt-tm4c1294ncpdt-can-receive-error

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

工具/软件:Code Composer Studio

您好!

我们使用的是硬件 EK-TM4C194XL Launch Pad 、IDE 是 CCS 6.1、

2.我已将 PA0和 PA1连接到 CAN 收发器 TJA1042。 JP4和 JP5仅在 CAN 模式下连接。

3、CANH、CANL 连接到 CAN 总线。

4.从 TIVAware 库(TivaWare_C_Series-2.1.4.178)中的 simple_rx.c 获取的参考。  

5. CAN 总线其它节点正在接收报文,节点中无错误。

但在我的板上、我们会得到中断。 但是在 ISR 中 、 我们会遇到如下错误:CANStatusGet (CAN0_BASE、CAN_STS_CONTROL)=0x00000062。 我们没有收到任何消息、而是收到错误消息。

7.什么是仅出现错误的原因。

 初始化代码:

CAN_Init()

while (!SysCtlPeripheralReady (SYSCTL_Periph_CAN0))

  ;

CANInit (CAN0_BASE);

CANBitRateSet (CAN0_BASE、120000000、50000);

CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);

IntEnable (INT_CAN0);

CANEnable (CAN0_BASE);

memset (A_CANMessageData_U8R、0、sizeof (A_CANMessageData_U8R));
S_CANObject_DXR.ui32MsgID = 0;
S_CANObject_DXR.ui32MsgIDMask = 0;
S_CANObject_DXR.ui32MsgLen = 8;
S_CANObject_DXR.ui32Flags =(MSG_OBJ_RX_INT_ENABLE|MSG_OBJ_USE_ID_FILTER);
S_CANObject_DXR.pui8MsgData = A_CANMessageData_U8R;
CANMessageSet (CAN0_BASE、1、&S_CANObject_DXR、MSG_OBJ_TYPE_RX);

中断例程:

空 CAN0IntHandler (空)

uint32 CANIntstatus=0;
uint32 CANSTATUS=0;
uint32 MsgIndex=0;
//
//读取 CAN 中断状态以查找中断原因
//
CANIntstatus = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);
CANIntClear (CAN0_BASE、CANIntstatus);

//
//如果原因是控制器状态中断,则获取状态
//
if (CANIntstatus = CAN_INT_INTID_STATUS)

         CANSTATUS=CANStatusGet (CAN0_BASE、CAN_STS_CONTROL);

//检查总线错误导致的天气状态
if ((CANSTATUS&0xE0)>0)

               E_CANBusError_EXR= E_True;

     }
     否则((CANIntStatus&0x0000000F)>0)
     {
         MsgIndex=(CANIntstatus&0x0000000f);

CANMessageGet (CAN0_BASE、1、&S_CANObject_DXR、0);

CANIntClear (CAN0_BASE、1);

if (S_CANObject_DXR.ui32Flags=MSG_OBJ_DATA_LOST)

    E_CANBusError_EXR=E_True;

其他

    E_CANBusError_EXR=E_False;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    波特率可能不正确。 使用示波器检查您以500K 波特运行、并且 CAN 总线上的其他器件也以500K 波特运行。 CAN 总线上的所有器件必须以相同的波特率运行。 (您是否正确配置了 PLL 以便器件以120MHz 运行?)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob Crosby、您好!

    感谢您的回复。

    V_SysClock_u32r = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
                                              SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
                                              SYSCTL_CFG_VCO_480)、120000000);
    这是我们使用的时钟设置。

    所有节点仅以500K 波特运行。

    CAN 是否 有适用于此控制器的示例代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否使用示波器检查了您的硬件?

    我已经在引脚 PA0和 PA1上连接了一个使用 CAN0为 EK-TM4C1294XL 配置的完整 CCS 工程。 通过选择"File""Import""Code Composer Studio -> CCS Projects"、 "Select archive file"、将该项目导入您的 Code Composer 工作区。 /cfs-file/__key/communityserver-discussions-components-files/908/1563.CAN_5F00_simple_5F00_rx.zip

    我发送了8个字节0x00、0xFF、0xFF、0xFF、0x00、 0x00、0x00 0x00、使用 CAN ID 0x100。 以下是 CAN 总线的逻辑分析仪图片:

    以下是 TM4C1294中接收到的内容: