3508|2

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

TM4C 129 CAN通讯 [复制链接]

我使用的是TM4C129的开发板,在调试CAN通信时,LOOPBACK模式下调通了,另外一个板子用CAN芯片连接上也可以接收到信号,可是换成BASIC模式下就不行了,收发都没有反应,我用示波器也抓不到信号。有没有大神能帮帮我,搞了很久也没有找到解决办法。程序如下:

[code]void CANIntHandler(void)
{
        uint32_t ulStatus;
        ulStatus = CANIntStatus(CAN1_BASE, CAN_INT_STS_CAUSE);
        sprintf(send,"ulStatus1=%d \r\n",ulStatus);
        UARTSend(send,strlen(send));
        if(ulStatus == CAN_INT_INTID_STATUS){

                sprintf(send,"ulStatus2=%d \r\n",ulStatus);
                UARTSend(send,strlen(send));
                ulStatus = CANStatusGet(CAN1_BASE, CAN_STS_CONTROL);
                sprintf(send,"ulStatus3=%d \r\n",ulStatus);
                UARTSend(send,strlen(send));

                g_bErrFlag = 1;
        }
        else if(ulStatus == 1)
        {
                INT_CNT_ST++;

                sprintf(send,"ulStatus4=%d ST=%d \r\n",ulStatus,INT_CNT_ST);
                UARTSend(send,strlen(send));
                CANIntClear(CAN1_BASE, 1);

                g_ulMsgCount_TX++;

                g_bErrFlag = 0;
        }
        else if(ulStatus==2){
                INT_CNT_RE++;

                CANIntClear(CAN1_BASE, 2);
                sprintf(send,"ulStatus5=%d \r\n",ulStatus);
                UARTSend(send,strlen(send));
                g_ulMsgCount_RX++;
                g_bRXFlag = 1;       
                g_bErrFlag = 0;
        }
}


int main(void){
FPUEnable(); //ê1ÄüFPU
FPULazyStackingEnable();

        tCANMsgObject sCANMessage;

        uint8_t ucMsgData[4];
         ui32SysClock = SysCtlClockFreqSet ( ( SYSCTL_XTAL_25MHZ |SYSCTL_OSC_MAIN |SYSCTL_USE_PLL |SYSCTL_CFG_VCO_480), 120000000);

         IntMasterDisable();

        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

        SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN1);

        GPIOPinConfigure(GPIO_PB0_CAN1RX);
        GPIOPinConfigure(GPIO_PB1_CAN1TX);

        GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);

        CANInit(CAN1_BASE);

        CANBitRateSet(CAN1_BASE, ui32SysClock, 1000000);

        HWREG(CAN1_BASE + CAN_O_CTL) = HWREG(CAN1_BASE + CAN_O_CTL) | CAN_CTL_TEST;
        //HWREG(CAN1_BASE + CAN_O_TST) = HWREG(CAN1_BASE + CAN_O_TST) | CAN_TST_LBACK | CAN_TST_SILENT;
        HWREG(CAN1_BASE + CAN_O_TST) = HWREG(CAN1_BASE + CAN_O_TST) | CAN_TST_LBACK;
       
        CANIntEnable(CAN1_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);

        CANEnable(CAN1_BASE);

        IntEnable(INT_CAN1);

        *(uint32_t *)ucMsgData = 3; // ÅäÖ÷¢ËíμÄêy¾YÎa0
        sCANMessage.ui32MsgID = 1; // ê1óÃ1×÷Îa·¢ËíID
        sCANMessage.ui32MsgIDMask = 0; // 2»éèÖÃMASKÆá±Î
        sCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE; //ê1Äü·¢ËíÖD¶Ï
        sCANMessage.ui32MsgLen = sizeof(ucMsgData); //·¢Ëíêy¾Y°ü′óD¡Îa4¸ö×Ö½ú
        sCANMessage.pui8MsgData = ucMsgData; // Ö¸Ïò·¢Ëíêy¾YμÄÖ¸Õë

        srCANMessage.ui32MsgID = 1; // ½óêÕIDλÎa0
        srCANMessage.ui32MsgIDMask = 0; // 2»éèÆá±Î£¬½óêÕËùóD¶«Î÷
        srCANMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER; // ê1Äü½óêÕÖD¶ÏoíID1yÂË
        srCANMessage.ui32MsgLen = 8; // ÔêDí×î¶à8¸ö×Ö½úμÄêy¾Y
        ROM_CANMessageSet(CAN1_BASE, 2 , &srCANMessage, MSG_OBJ_TYPE_RX); // ½«message object 2éèÖÃÎa½óêÕ±¨ÎĶÔÏó

        IntMasterEnable(); // ê1ÄüÖD¶Ï

        while(1){
                sprintf(send,"loop \r\n");
                UARTSend(send,strlen(send));
                //HWREG(CAN1_BASE + CAN_O_IF1CRQ) = HWREG(CAN1_BASE + CAN_O_IF1CRQ) | CAN_IF1CRQ_BUSY;       
                CANMessageSet_test(CAN1_BASE, 1, &sCANMessage, MSG_OBJ_TYPE_TX);

                LEDWrite(CLP_D1, 1);
                SysCtlDelay(ui32SysClock / 10);
                LEDWrite(CLP_D1, 0);               
                SysCtlDelay(ui32SysClock / 10);
                sprintf(send,"send msg=%x \r\n",sCANMessage.pui8MsgData[0]);
                UARTSend(send,strlen(send));
                if(g_bErrFlag) // í¨1yg_bErrFlag±äá¿2é¿′êÇ·ñ3ö′í
                {
                                sprintf(send,"ErrFlag=%d \r\n",g_bErrFlag);
                                UARTSend(send,strlen(send));
                                g_bErrFlag = 1; // Ôù′ÎÖøö1°é
                }
                else{
                                g_ulMsgCount_TX = g_ulMsgCount_TX;
                }

                (*(uint32_t *)ucMsgData)++;
                sprintf(send,"g_bRXFlag=%d \r\n",g_bRXFlag);
                UARTSend(send,strlen(send));
                if (g_bRXFlag){
                GPIOPinWrite(CLP_D2_PORT, CLP_D2_PIN, CLP_D2_PIN);
                srCANMessage.pui8MsgData = ucrMsgData;
                CANMessageGet(CAN1_BASE, 2 , &srCANMessage,0);
                sprintf(send,"get msg=%x \r\n",srCANMessage.pui8MsgData[0]);
                UARTSend(send,strlen(send));
                g_bRXFlag=0;

                if(srCANMessage.ui32Flags & MSG_OBJ_DATA_LOST){
                        DATA_LOST = 1;
                }
                }       
        }
}




最新回复

楼主贴的程序怎么后面有乱码  详情 回复 发表于 2018-11-30 10:40
 
点赞 关注(1)

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
示波器也抓不到信号,检查开发板的硬件设置
 
 

回复

2015

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
楼主贴的程序怎么后面有乱码
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表