找回密码
 立即注册
查看: 145|回复: 7

STC32G128K LQFP32 CAN总线总是进入ISR 报错

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-02-05 08:34:16

6

主题

9

回帖

78

积分

注册会员

积分
78
发表于 2026-2-4 13:25:29 | 显示全部楼层 |阅读模式
//========================================================================
// 函数: void CANSetBaudrate()
// 描述: CAN总线波特率设置函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2020-11-19
// 备注:
//========================================================================
void CANSetBaudrate()
{
                CanWriteReg(MR, 0x04);                //使能Reset模式
        CanWriteReg(BTR0, 0x04);        //SJW(1), BRP(4)
        CanWriteReg(BTR1, 0x13);        //SAM(0), TSG2(1), TSG1(3)
        CanWriteReg(MR, 0x00);                //退出Reset模式
}

//========================================================================
// 函数: void CANInit()
// 描述: CAN初始化函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2020-11-19
// 备注:
//========================================================================
void CANInit()
{
        CANEN = 1;          //CAN1模块使能
        CanWriteReg(MR  ,0x05);  //使能 Reset Mode, 采用单滤波设置

        CANSetBaudrate();        //设置波特率
       
        //设置过滤ID为:xxF8xxxx 的帧才接收
//        CanWriteReg(ACR0,0x07);                //总线验收代码寄存器
//        CanWriteReg(ACR1,0xc0);
//        CanWriteReg(ACR2,0x00);
//        CanWriteReg(ACR3,0x00);
//        CanWriteReg(AMR0,0xF8);                //总线验收屏蔽寄存器
//        CanWriteReg(AMR1,0x07);
//        CanWriteReg(AMR2,0xFF);
//        CanWriteReg(AMR3,0xFF);

        //取消过滤ID,所有帧都接收
        CanWriteReg(ACR0,0x00);                //总线验收代码寄存器
        CanWriteReg(ACR1,0x00);
        CanWriteReg(ACR2,0x00);
        CanWriteReg(ACR3,0x00);
        CanWriteReg(AMR0,0xFF);                //总线验收屏蔽寄存器
        CanWriteReg(AMR1,0xFF);
        CanWriteReg(AMR2,0xFF);
        CanWriteReg(AMR3,0xFF);

        CanWriteReg(IMR ,0xff);                //中断寄存器
        CanWriteReg(ISR ,0xff);                //清中断标志
        CanWriteReg(MR  ,0x01);                //退出 Reset Mode, 采用单滤波设置(设置过滤器后注意选择滤波模式)
//        CanWriteReg(MR  ,0x00);                //退出 Reset Mode, 采用双滤波设置(设置过滤器后注意选择滤波模式)

        P_SW1 = 0; //端口切换(CAN_Rx,CAN_Tx) 0x00:P0.0,P0.1  0x10:P5.0,P5.1  0x20:P4.2,P4.5  0x30:P7.0,P7.1
        CANICR = 0x02;                //CAN中断使能
}


//========================================================================
// 函数: void CANBUS_Interrupt(void) interrupt CAN1_VECTOR
// 描述: CAN总线中断函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2020-11-19
// 备注:
//========================================================================
void CANBUS_Interrupt(void) interrupt CAN1_VECTOR
{
        u8 isr;
        u8 arTemp;
        arTemp = CANAR;     //CANAR现场保存,避免主循环里写完 CANAR 后产生中断,在中断里修改了 CANAR 内容
       
        isr = CanReadReg(ISR);
        if((isr & 0x04) == 0x04)  //TI
    {
                CANAR = ISR;
                CANDR = 0x04;    //CLR FLAG

        B_CanSend = 0;
    }       
        if((isr & 0x08) == 0x08)  //RI
    {
                CANAR = ISR;
                CANDR = 0x08;    //CLR FLAG

                B_CanRead = 1;
    }

        if((isr & 0x40) == 0x40)  //ALI
    {
                CANAR = ISR;
                CANDR = 0x40;    //CLR FLAG
    }       

        if((isr & 0x20) == 0x20)  //EWI
    {
                CANAR = ISR;
                CANDR = 0x20;    //CLR FLAG
    }       

        if((isr & 0x10) == 0x10)  //EPI
    {
                CANAR = ISR;
                CANDR = 0x10;    //CLR FLAG
    }       

        if((isr & 0x02) == 0x02)  //BEI
    {
                CANAR = ISR;
                CANDR = 0x02;    //CLR FLAG
    }       

        if((isr & 0x01) == 0x01)  //DOI
    {
                CANAR = ISR;
                CANDR = 0x01;    //CLR FLAG
    }       

        CANAR = arTemp;    //CANAR现场恢复
}

总是进入这个 BEI  
这个例程  
之前用48脚的没问题 现在换成 32脚的就不好使了 求解

截图202602041321317872.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2026-04-04 14:50:05
已绑定手机

15

主题

287

回帖

1498

积分

金牌会员

DIY玩家

积分
1498
发表于 2026-2-4 14:37:12 | 显示全部楼层
什么时候出了STC32G128K
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2026-04-04 14:50:05
已绑定手机

15

主题

287

回帖

1498

积分

金牌会员

DIY玩家

积分
1498
发表于 2026-2-4 14:42:52 | 显示全部楼层
引脚少了
引脚是否复用
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-02-05 08:34:16

6

主题

9

回帖

78

积分

注册会员

积分
78
发表于 2026-2-4 14:54:09 | 显示全部楼层
狂热*** 发表于 2026-2-4 14:42
引脚少了
引脚是否复用

之前有个板子因为驱动电机问题改了一下 通讯这里没改 之前是可以用的 但是这回就怎么都不好使  用了48脚的程序 下在里面 也不行  疯了都

点评

首先排查是否为焊接问题导致。 然后你这个硬件接的P00和P01,使用的是CAN1模块 [attachimg]131327[/attachimg] 但是我看你里面没有操作CANSEL的部分,需要初始化的时候设置一下AUXR2 &= ~(1  详情 回复 发表于 2026-2-4 18:12
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:654
  • 最近打卡:2026-04-03 10:02:32
已绑定手机

52

主题

2546

回帖

8932

积分

论坛元老

积分
8932
发表于 2026-2-4 18:05:30 | 显示全部楼层
产生BEI中断是CAN模块在发送或者接收过程中产生了总线错误。
先排查硬件连接,发送时用示波器逐步测量CANTX,CANH/CANL信号是否正常?
CAN总线上有没有接其它节点,双方的波特率设置是否一样?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:696
  • 最近打卡:2026-03-30 09:54:25
已绑定手机
已实名认证

130

主题

3387

回帖

8829

积分

版主

积分
8829
发表于 2026-2-4 18:12:14 | 显示全部楼层
woshi*** 发表于 2026-2-4 14:54
之前有个板子因为驱动电机问题改了一下 通讯这里没改 之前是可以用的 但是这回就怎么都不好使  用了48脚 ...

首先排查是否为焊接问题导致。
然后你这个硬件接的P00和P01,使用的是CAN1模块
截图202602041800518446.jpg
但是我看你里面没有操作CANSEL的部分,需要初始化的时候设置一下AUXR2 &= ~(1<<3);//设置后续操作为CAN1模块

端口切换的时候,尽量不要影响到其他的位
P_SW1 = 0; //端口切换(CAN_Rx,CAN_Tx) 0x00:P0.0,P0.1  0x10:P5.0,P5.1  0x20:P4.2,P4.5  0x30:P7.0,P7.1
截图202602041804117059.jpg
尽量使用P_SW1 &= ~(3<<4);//清除bit4,bit5位,选择P00,P01

或者你也可以尝试使用AiCube自动生成代码来配置这个CAN部分程序自动生成器,AiCube-ISP V6.96O, STC89/15/STC8H/STC32/8051U - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯人工智能技术交流网站 - AI32位8051交流社区
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-02-05 08:34:16

6

主题

9

回帖

78

积分

注册会员

积分
78
发表于 2026-2-5 08:34:16 | 显示全部楼层
乘风*** 发表于 2026-2-4 18:05
产生BEI中断是CAN模块在发送或者接收过程中产生了总线错误。
先排查硬件连接,发送时用示波器逐步测量CANTX ...

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2026-02-05 08:34:16

6

主题

9

回帖

78

积分

注册会员

积分
78
发表于 2026-2-5 08:34:34 | 显示全部楼层
王*** 发表于 2026-2-4 18:12
首先排查是否为焊接问题导致。
然后你这个硬件接的P00和P01,使用的是CAN1模块

回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-4 16:05 , Processed in 0.118894 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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