打印
[PIC®/AVR®/dsPIC®产品]

PIC18lf458 CAN配置进入工作模式后就一直不停的往外发数据

[复制链接]
689|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dengdc|  楼主 | 2022-10-20 20:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
PIC18lf458 CAN配置进入工作模式后就一直不停的往外发数据

使用特权

评论回复
沙发
dengdc|  楼主 | 2022-10-20 20:11 | 只看该作者
CAN配置进入工作模式后为就一直不停的往外发数据,我main函数并没有发送数据,上位机接收显示只有一位数据,而且ID还不对,求大神帮忙看看

使用特权

评论回复
板凳
dengdc|  楼主 | 2022-10-20 20:13 | 只看该作者
void InitCan(void)
{                                   
        TRISB=(TRISB|0x08)&0xFB;                // 数据方向寄存器   设置CANRX/RB3为输入,CANTX/RB2为输出   高电平输入,低电平输出

        CANCON = 0x80;                                    // CAN控制寄存器CANCON   请求配置模式  REQOP=100
        while(CANSTAT&0x80==0){;}                // 等待进入CAN配置模式OPMODE=100
                                    // 波特率寄存器BRGCONx(x=1,2, 3)决定了CAN 控制器的波特率、采样次数、同步跳转宽度和重同步方式
                                    // 500Kbps@16M     TBit=1*TQ+8*TQ+1*TQ+6*TQ=16*TQ=16*2/16=2      1/2 M=500 K              
//  BRGCON1 = 0x00;                  // 0000 0000       Sync_Seg=1*TQ     TQ = (2 x 1)/FOSC
//   BRGCON2 = 0xb8;                 // 1011 1000       Phase_Seg1=8*TQ  Prop_Seg=1*TQ
//   BRGCON3 = 0x05;                 // 0000 0101       Phase_Seg2=6*TQ
   
      BRGCON1 = 0xc0;                 // 1100 0000       Sync_Seg=4*TQ     TQ = (2 x 1)/20
      BRGCON2 = 0xb8;                 // 1011 1000       Phase_Seg1=8*TQ   Prop_Seg=1*TQ
      BRGCON3 = 0x06;                 // 0000 0110       Phase_Seg2=7*TQ
   

//  设置发送邮箱0标识符号和发送的数据
        TXB0CON=0x03;                                // TXB0发送优先级为最高优先级,TXPRI=11        00:最低优先级
        TXB0SIDH=0xFF;                                // 设置发送缓冲器0为标准标识符,ID = 0x7FF
        TXB0SIDL=0xE0;
        TXB0DLC=0x08;                                // 设置数据长度为8个字节

        TXB0D0=0X01;                                        // 写发送缓冲器数据区数据初值  TXBnDm:0 ≤ n < 3 and 0 < m < 8
        TXB0D1=0X02;                                       
        TXB0D2=0X03;                                          
        TXB0D3=0X04;      
        TXB0D4=0X05;      
        TXB0D5=0X06;      
        TXB0D6=0X07;      
        TXB0D7=0X08;      
//  设置接收邮箱0的标识符和初始化数据
        RXB0SIDH=0XFF;                                // 设置接收缓冲器0的标识符        ID = 0x3FF
        RXB0SIDL=0XE0;                      // SID2-SID0:111
        RXB0SIDH=0X00;                                // 设置接收缓冲器0的标识符        ID = 0x3FF
        RXB0SIDL=0X00;                      // SID2-SID0:111
   
        RXB0CON=0X20;                                        // 仅仅接收标准标识符,FILHIT0=0表示RXB0采用filter0
        RXB0DLC=0X08;                                        // 设置接收缓冲器0的数据区长度8个字节
      
        RXB0D0=0X00;                        // 初始化接收缓冲器0的数据区数据
    RXB0D1=0X00;
    RXB0D2=0X00;
    RXB0D3=0X00;
    RXB0D4=0X00;
    RXB0D5=0X00;
    RXB0D6=0X00;
    RXB0D7=0X00;

//  初始化接收滤波器0,Id = 0x26D = 0b 010 0110 1101
        RXF0SIDH=0b01001101;
        RXF0SIDL=0b10100000;

//  所有ID 都接受,不进行滤波
    RXM0SIDH=0X00;
        RXM0SIDL=0X00;

//        CIOCON=0X00;                    // 初始化CAN模块的I/O控制寄存器
        CANCON=0x00;                            //=0X40,进入自测试模式;=0x00,正常操作模式
        while(CANSTAT&0XE0!=0){;}   //1110 0000  等待进入正常操作模式

//初始化CAN的中断   PIC18F458
    PIR3=0X00;   //清所有中断标志
    PIE3=0X01;   //使能接收缓冲器0的接收中断  RXB0IE=1
    IPR3=0X01;   //接收缓冲器0的接收中断为最高优先级
}

使用特权

评论回复
地板
dengdc|  楼主 | 2022-10-20 20:17 | 只看该作者
void main(void)
{
    InitPORT();      //IO口初始化
    Timer1_Init();   //定时器初始化
    InitCan();       //CAN初始化
    Sys_GetAddr();   //读取地址
    while(1)
    {
       GetSensor();  //读取传感器值
   
    }
}

使用特权

评论回复
5
dengdc|  楼主 | 2022-10-20 20:19 | 只看该作者
main函数都还没开始写呢,都没发送数据,上位机却一直收到数据

使用特权

评论回复
6
dengdc|  楼主 | 2022-10-20 20:22 | 只看该作者

使用特权

评论回复
7
dengdc|  楼主 | 2022-10-20 20:25 | 只看该作者

使用特权

评论回复
8
dengdc|  楼主 | 2022-10-20 20:27 | 只看该作者
上位机用的是CAN-USB的调试工具

使用特权

评论回复
9
jiahy| | 2022-10-20 20:29 | 只看该作者
你该看一看CANTX引脚波形

使用特权

评论回复
10
chuxh| | 2022-10-20 20:32 | 只看该作者
PIC30F和33F都调试过没有问题,只是设置波特率寄存器手册弄反了,调试几天,才摸索对,后来看到勘误表里说到这点了。

使用特权

评论回复
11
tpgf| | 2022-11-8 11:57 | 只看该作者
在配置的时候应该先禁止它发送数据  楼主是不是没有disable啊

使用特权

评论回复
12
guanjiaer| | 2022-11-8 12:08 | 只看该作者
数据的发送端是什么  接收到的数据是理论上的数据吗

使用特权

评论回复
13
heimaojingzhang| | 2022-11-8 12:16 | 只看该作者
接收到的数据明显是很规整的发送端的数据,楼主的这个芯片在之前是不是已经烧写过相关程序了啊

使用特权

评论回复
14
keaibukelian| | 2022-11-8 13:12 | 只看该作者
可否确认接收到的是can自己的数据呢

使用特权

评论回复
15
paotangsan| | 2022-11-8 13:22 | 只看该作者
在所以代码初始化之前先关闭can的使能 看看是否还会接收数据

使用特权

评论回复
16
renzheshengui| | 2022-11-8 13:33 | 只看该作者
TXRQ:发送数据请求,由软件对其置1,来请求发送邮箱的数据。当数据发送完成,邮箱为空时,硬件对其置0.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

892

主题

13885

帖子

7

粉丝