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.

请教下 各位大神 我想问 我用两块板子实现can通信,应该怎么设置,有没有相关的资料

Other Parts Discussed in Thread: TM4C1233E6PM, SW-EK-TM4C123GXL

我用的是tm4c1233e6pm的芯片,哪位大哥能发个两块板子的通信例程给我看看,或者有相关借鉴的资料也行

  • 两个板子,一个设置为发送,一个设置为接受,例程你查看TIVA C中给的例程

  • 用这个例程:

    C:\ti\TivaWare_C_Series-2.1.0.12573\examples\boards\dk-tm4c123g\can

    把两个板子的CANL CANH连一起,挂上120欧的匹配电阻。

  • 您好 ,请问能不能告诉我TivaWare_C_Series-2.1.0.1257软件在那下载,给一个链接也行,谢谢!,我需要驱动库。

  • http://www.ti.com.cn/tool/cn/sw-ek-tm4c123gxl

    应该是在这里下载的。TIVA WARE开发包。

  • 请问TM4C129内部有集成CAN收发器吗?   直接将两个芯片的CAN 引脚对接可以通信吗?

  • 不可以的,CAN走的协议不一样的,如要加CAN收发器,将TX和RX转换为CANH和CANL才可以进行收发的。

  • 我的意思是  能不能不用can收发器,直接将两块板子的CAN TX和CAN RX对接进行通信?

  • 那这里已经有收发器了吗

    自己制板的话是不是要加这么个电路

  • 对的,自己画板子的时候,必须加VP230这个器件。就像485一样,CAN的协议也是差分信号,CANH和CANL,必须要将IO口的TX和RX转为CANH和CANL才能走CAN总线协议的。

    CAN控制器通过组成总线的2根线(CAN-H和CAN-L)的电位差来确定总线的电平,在任一时刻,总线上有2种电平:显性电平和隐性电平。

  • EK-TM4C129评估板好像没看到有集成了can收发器。不过我买了个CAN收发器模块。我按照官方例程初始化了CAN1不能用,用示波器检测PB0和PB1引脚电平不会变化(程序里连续发送数据)。


    #define CAN1RXID 0
    #define RX1BJECT 1
    #define CAN1TXID 2
    #define TX1BJECT 2

    extern uint32_t ui32SysClock;
    tCANMsgObject g_sCAN1RxMessage;
    tCANMsgObject g_sCAN1TxMessage;

    u8 g_ui8TXMsgData;
    u8 g_ui8RXMsgData;

    /*
    ================================================================================
    描述 :
    输入 :
    输出 :
    ================================================================================
    */
    void CAN1IntHandler(void)
    {
    uint32_t ui32Status;
    u8 MsgData;
    ui32Status = CANIntStatus(CAN1_BASE, CAN_INT_STS_CAUSE);
    if(ui32Status == CAN_INT_INTID_STATUS)
    {
    ui32Status = CANStatusGet(CAN1_BASE, CAN_STS_CONTROL);
    UARTCharPut(UART0_BASE,'3');
    }
    else if(ui32Status == RX1BJECT)
    {
    CANIntClear(CAN1_BASE, RX1BJECT);


    g_sCAN1RxMessage.pui8MsgData = (u8 *) &MsgData;
    CANMessageGet(CAN1_BASE, RX1BJECT, &g_sCAN1RxMessage, 0);
    UARTCharPut(UART0_BASE,MsgData);

    }
    else if(ui32Status == TX1BJECT)
    {
    CANIntClear(CAN1_BASE, TX1BJECT);
    UARTCharPut(UART0_BASE,'4');
    }
    else
    {
    UARTCharPut(UART0_BASE,'5');
    }

    }

    /*
    ================================================================================
    描述 :
    输入 :
    输出 :
    ================================================================================
    */
    void CAN_Init(void)
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    GPIOPinConfigure(GPIO_PB0_CAN1RX);
    GPIOPinConfigure(GPIO_PB1_CAN1TX);
    GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN1);
    CANInit(CAN1_BASE);
    CANBitRateSet(CAN1_BASE, ui32SysClock, 500000);
    CANIntRegister(CAN1_BASE,CAN1IntHandler);//注册中断函数
    CANIntEnable(CAN1_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
    IntEnable(INT_CAN1);
    CANEnable(CAN1_BASE);

    g_sCAN1RxMessage.ui32MsgID = 0;
    g_sCAN1RxMessage.ui32MsgIDMask = 0;
    g_sCAN1RxMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
    g_sCAN1RxMessage.ui32MsgLen = sizeof(g_ui8RXMsgData);

    CANMessageSet(CAN1_BASE, RX1BJECT, &g_sCAN1RxMessage, MSG_OBJ_TYPE_RX);

    g_ui8TXMsgData = 0;
    g_sCAN1TxMessage.ui32MsgID = 1;
    g_sCAN1TxMessage.ui32MsgIDMask = 0;
    g_sCAN1TxMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
    g_sCAN1TxMessage.ui32MsgLen = sizeof(g_ui8TXMsgData);
    g_sCAN1TxMessage.pui8MsgData = (uint8_t *)&g_ui8TXMsgData;
    }


    /*
    ================================================================================
    描述 : 主程序内循环调用
    输入 :
    输出 :
    ================================================================================
    */
    void CAN_Main(void)
    {
    g_ui8TXMsgData=0x37;

    CANMessageSet(CAN1_BASE, TX1BJECT, &g_sCAN1TxMessage,MSG_OBJ_TYPE_TX);

    UARTprintf("HJ\n");

    }

  • 我看EK-TM4C129x的板子,好像你作为CAN引脚的PB0和PB1没有被引出来,你是如何连接的呢?

  • 有的  如图,绿线圈起来那里。

  • 是的,看错了。我看的是BoosterPack Interface的引脚图,直插的是引出来了。

    初始化CAN引脚,并且抓不到波形,那肯定是你的CAN没有配置好,能抓到波形和你配置的一致,CAN才算配置OK的。至于CAN的配置,应该是这个例程可以拿来直接用的

    ti\TivaWare_C_Series-2.1.3.156\examples\peripherals\can

    不过具体没看他用的是CAN0还是CAN1

  • 好像是评估板有点问题,我用自己制作的板子把 PB0  PB1直接引出来接CAN收发器就可以使用了。