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.

[参考译文] TM4C1294NCPDT:CAN 总线不工作

Guru**** 2614265 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/1066932/tm4c1294ncpdt-can-bus-not-working

部件号:TM4C1294NCPDT
“线程”中讨论的其它部件:EK-TM4C1294XL

我在  EK-TM4C1294XL 上工作。 我无法从 PA1_CAN0TX 引脚获取任何数据。 我的代码有什么问题? 我 的代码如下:-

无效 CAN0_Init(void)

pui8MsgData =(uint8_t *) ui32MsgData;

SysPeripheralEnable (sysctl_Periph_GPIOA);
GPIOPinConfigure (GPIO _PA0_CAN0RX);
GPIOPinConfigure (GPIO _PA1_CAN0TX);
GPIOPinTypeCAN (GPIO 端口基础,GPIO 针脚0 | GPIO 针脚1);
SysPeripheralEnable (sysctl_Periph_CAN0);
CANInit(CAN0_base);


// UINT32_t ui32SysClock;
// ui32SysClock = SysClockFreqSet(((sysctl_XT_25MHz |sysctl_OSC 主|sysctl_use_OSC )25000000);
// CANBitRateSet (CAN0_BASE,ui32SysClock,500000);
///////////////////
SysCTL 时钟集(sysctl_SYSDIV_1 | sysctl_use_OSC | sysctl_OSC 主|sysctl_Xtal_16MHz);
CANBitRateSet (CAN0_BASE,SysCTLClockGet(),500000);


CANIntEnable (CAN0_BASE,CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
IntEnable(INT_CAN0);
CANEnable (CAN0_BASE);

ui32MsgData = 0;
sCANMessage.ui32消息 ID = 1;
sCANMessage.ui32消息标识掩码=0;
sCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
sCANMessage.ui32 MsgLen = sizeof(pui8MsgData);
sCANMessage.pui8消息数据= pui8消息数据;
}
_________________________________________________________________
无效 CAN0_Send (无效)

CANMessageSet (CAN0_BASE,1,&sCANMessage,MSG_OBJ_TYPE_TX);

// SimpleDelay();
// ui32MsgData++;
ui32MsgData=0xAA;
}

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

    您好,苏普特,

    您没有为 TM4C129x 设备使用正确的系统时钟设置 API。 使用的 API 仅适用于 TM4C123x 设备。

    您需要使用以下 API:

        uint32_t ui32SysClock;
    
        //
        // Set the clocking to run directly from the external crystal/oscillator.
        // TODO: The SYSCTL_XTAL_ value must be changed to match the value of the
        // crystal on your board.
        //
        ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
                                           SYSCTL_OSC_MAIN |
                                           SYSCTL_USE_OSC),
                                           25000000);
    

    然后,对于比特率设置:

        CANBitRateSet(CAN0_BASE, ui32SysClock, 500000);

    此致,

    拉尔夫·雅各比