发 帖  
张飞软硬开源基于STM32 BLDC直流无刷电机驱动器开发视频套件, 👉戳此立抢👈
[问答] 请问这个CAN程序哪里有问题:通过pCAN和上位机通讯上位机发消息收不到
1552 CAN 上位机
分享
用这个CAN程序t通过pCAN和上位机通讯上位机发消息,邮箱16接收,收不到消息,实在想不出到底哪里错了,求指点

#include "DSP2833x_Device.h"

#include "DSP2833x_Examples.h"


struct ECAN_REGS ECanbShadow;


interrupt void ECanbR_ISR(void);

void InitECanR(void);


Uint32 MSGL = 0;

Uint32 MSGH = 0;

int Counts = 0;


void main()

{

        InitSysCtrl();    //系统初始化


        InitXintf16Gpio();  //初始化16路Gpio


        InitECanGpio();


        InitECanbGpio();    //初始化ECanb


        DINT;


        InitPieCtrl();


        IER = 0x0000;

        IFR = 0x0000;

        

        InitPieVectTable();

        

        EALLOW;

        PieVectTable.ECAN1INTB = &ECanbR_ISR;

        EDIS;


        InitECanb();


        InitECanR();


        IER = M_INT9;


        PieCtrlRegs.PIEIER9.bit.INTx8 = 1;   //使能第9组中断第8个小中断,即ECAN1INTB

        PieCtrlRegs.PIEACK.bit.ACK9 = 1;     //PIEACK置1


        EINT;

        ERTM;


        for(;;)

        {

        

        }

        

}


interrupt void ECanbR_ISR(void)

{

        if(ECanbRegs.CANRMP.all == 0x00010000)

        {

                ECanbRegs.CANRMP.all = 0xFFFFFFFF;

                MSGL = ECanbMboxes.MBOX16.MDL.all;

                MSGH = ECanbMboxes.MBOX16.MDH.all;

                Counts++;

        }

        PieCtrlRegs.PIEACK.bit.ACK9 = 1;

        ECanbRegs.CANOPC.all = 0;

        EINT;

}


void InitECanR(void)

{

        EALLOW;

        ECanbShadow.CANtiOC.all = ECanbRegs.CANTIOC.all;

        ECanbShadow.CANTIOC.bit.TXFUNC = 1;

        ECanbRegs.CANTIOC.all = ECanbShadow.CANTIOC.all;


        ECanbShadow.CANRIOC.all = ECanbRegs.CANRIOC.all;

        ECanbShadow.CANRIOC.bit.RXFUNC = 1;

        ECanbRegs.CANRIOC.all = ECanbShadow.CANRIOC.all;

        

        ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;

        ECanbShadow.CANMC.bit.CCR = 1;

        ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;

        EDIS;


        do

        {

                ECanbShadow.CANES.all = ECanbRegs.CANES.all;

        }while(ECanbShadow.CANES.bit.CCE != 1);


        EALLOW;

        ECanbShadow.CANBTC.all = ECanbRegs.CANBTC.all;

        ECanbShadow.CANBTC.bit.BRPREG = 9;

        ECanbShadow.CANBTC.bit.TSEG2REG = 2;

        ECanbShadow.CANBTC.bit.TSEG1REG = 10;

        ECanbShadow.CANBTC.bit.SAM = 1;       //采样三次取多次

        ECanbRegs.CANBTC.all = ECanbShadow.CANBTC.all;


        ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;

        ECanbShadow.CANMC.bit.CCR = 0;

        ECanbShadow.CANMC.bit.PDR = 0;

        ECanbShadow.CANMC.bit.DBO = 0;

        ECanbShadow.CANMC.bit.WUBA = 0;

        ECanbShadow.CANMC.bit.CDR = 0;

        ECanbShadow.CANMC.bit.ABO = 0;

        ECanbShadow.CANMC.bit.STM = 0;

        ECanbShadow.CANMC.bit.SRES = 0;

        ECanbShadow.CANMC.bit.MBNR = 0;

        ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;

        EDIS;

        

        ECanbMboxes.MBOX0.MSGCTRL.all = 0;

        ECanbMboxes.MBOX1.MSGCTRL.all = 0;

        ECanbMboxes.MBOX2.MSGCTRL.all = 0;

        ECanbMboxes.MBOX3.MSGCTRL.all = 0;

        ECanbMboxes.MBOX4.MSGCTRL.all = 0;

        ECanbMboxes.MBOX5.MSGCTRL.all = 0;

        ECanbMboxes.MBOX6.MSGCTRL.all = 0;

        ECanbMboxes.MBOX7.MSGCTRL.all = 0;

        ECanbMboxes.MBOX8.MSGCTRL.all = 0;

        ECanbMboxes.MBOX9.MSGCTRL.all = 0;

        ECanbMboxes.MBOX10.MSGCTRL.all = 0;

        ECanbMboxes.MBOX11.MSGCTRL.all = 0;

        ECanbMboxes.MBOX12.MSGCTRL.all = 0;

        ECanbMboxes.MBOX13.MSGCTRL.all = 0;

        ECanbMboxes.MBOX14.MSGCTRL.all = 0;

        ECanbMboxes.MBOX15.MSGCTRL.all = 0;

        ECanbMboxes.MBOX16.MSGCTRL.all = 0;

        ECanbMboxes.MBOX17.MSGCTRL.all = 0;

        ECanbMboxes.MBOX18.MSGCTRL.all = 0;

        ECanbMboxes.MBOX19.MSGCTRL.all = 0;

        ECanbMboxes.MBOX20.MSGCTRL.all = 0;

        ECanbMboxes.MBOX21.MSGCTRL.all = 0;

        ECanbMboxes.MBOX22.MSGCTRL.all = 0;

        ECanbMboxes.MBOX23.MSGCTRL.all = 0;

        ECanbMboxes.MBOX24.MSGCTRL.all = 0;

        ECanbMboxes.MBOX25.MSGCTRL.all = 0;

        ECanbMboxes.MBOX26.MSGCTRL.all = 0;

        ECanbMboxes.MBOX27.MSGCTRL.all = 0;

        ECanbMboxes.MBOX28.MSGCTRL.all = 0;

        ECanbMboxes.MBOX29.MSGCTRL.all = 0;

        ECanbMboxes.MBOX30.MSGCTRL.all = 0;

        ECanbMboxes.MBOX31.MSGCTRL.all = 0;


        do

        {

                ECanbShadow.CANES.all = ECanbRegs.CANES.all;

        }while(ECanbShadow.CANES.bit.CCE != 0);


        ECanbRegs.CANGIM.all = 0x00000000;

        ECanbRegs.CANMIM.all = 0x00000000;

        ECanbRegs.CANMIL.all = 0xFFFFFFFF;


        ECanbRegs.CANME.all = 0x00000000;


        ECanbMboxes.MBOX16.MSGID.bit.IDE = 0;

        ECanbMboxes.MBOX16.MSGID.bit.STDMSGID = 0x0314;

        ECanbMboxes.MBOX16.MSGID.bit.AAM = 0;

        ECanbMboxes.MBOX16.MSGID.bit.AME = 0;


        ECanbRegs.CANMD.all = 0xFFFF0000;


        ECanbShadow.CANME.all = ECanbRegs.CANME.all;

        ECanbShadow.CANME.bit.ME16 = 1;

        ECanbRegs.CANME.all = ECanbShadow.CANME.all;


        ECanbMboxes.MBOX16.MSGCTRL.bit.DLC = 8;

        ECanbMboxes.MBOX16.MSGCTRL.bit.RTR = 0;


        EALLOW;

    ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;

    ECanbShadow.CANMC.bit.STM = 0;    // Configure CAN for self-test mode  

    ECanbShadow.CANMC.bit.SCB = 1;    // eCAN mode (reqd to access 32 mailboxes)

    ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;

    EDIS;


        ECanbRegs.CANMIL.all = 0xFFFF0000;

        ECanbRegs.CANMIM.all = 0xFFFFFFFF;

        EALLOW;

        ECanbShadow.CANGIM.all = ECanbRegs.CANGIM.all;

        ECanbShadow.CANGIM.bit.AAIM = 1;

        ECanbShadow.CANGIM.bit.WDIM = 1;

        ECanbShadow.CANGIM.bit.WUIM = 1;

        ECanbShadow.CANGIM.bit.BOIM = 1;

        ECanbShadow.CANGIM.bit.EPIM = 1;

        ECanbShadow.CANGIM.bit.WLIM = 1;

        ECanbShadow.CANGIM.bit.I0EN = 1;

        ECanbShadow.CANGIM.bit.I1EN = 1;

        ECanbShadow.CANGIM.bit.GIL =1;

        ECanbRegs.CANGIM.all = ECanbShadow.CANGIM.all;


        ECanbRegs.CANRMP.all = 0xFFFFFFFF;

        ECanbRegs.CANTA.all = 0xFFFFFFFF;

        ECanbRegs.CANGIF0.all = 0xFFFFFFFF;

        ECanbRegs.CANGIF1.all = 0xFFFFFFFF;

}


0
2018-8-16 20:03:48   评论 分享淘帖 邀请回答
3个回答
快要想疯了,感觉寄存器啥的都没配错啊
2018-8-16 20:04:38 2 评论

举报

2 条评论
最简单的方式就在网上找个能用的,然后在这基础上再修改
2019-1-14 13:56:29 评论

举报

请问解决了吗,我也遇到与一样的问题,可以加一下我qq1787730479吗
2019-5-8 21:27:02 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /8 下一条

    快速回复 返回顶部 返回列表