打印
[ZLG-ARM]

高手指点一下CAN,初学者求教

[复制链接]
1433|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
驱动未来|  楼主 | 2008-1-3 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void can_init(void)
{    
    PINSEL1 |= 0X05 << 14;                    //使用CAN2管脚

    CAN2MOD |= 0X01;                    //RM=1
    CAN2MOD |= (1<<3);                    //TPM = 1

    CAN2BTR |= 10|(0x00<<14)|(6<<16)|(1<<20)|(0<<23);    //设置波特率100KBPS
    
    CAN2EWL = 0x60;                        //错误寄存器
     
    CAN2MOD &= (~1);                    //CAN正常工作,RM=0
                                

}
/**********************************************************************/
int main (void)
{    
    can_init();
    
       while(1)
       {    if(CAN2SR & (1<<2) == 1);            //CAN2SR.TBS1为1,可写入数据
        {    
            CAN2TFI1 = (1<<16) | 1;            //发送1字节,优先级1
            CAN2TID1 = 1;                //发送ID为1
            CAN2TDA1 = 1;                //发送数据为01
            CAN2CMR = (1<<5);            //选择缓冲区
            CAN2CMR = 0X01;                //发送请求
            while(CAN2GSR & (1<<2) == 0);        //等待发送结束
            
            delay(20);
        
        }
           
       }
    
    return 0;
}

VPB 11.0592M,
上面程序是否有错,我只是实现简单的发送功能,可是我用ZLGCAN分析仪偶尔读到也是显示错误,怀疑初始化我哪里没注意到,我看了几遍数据手册,硬是没找到原因,也有可能波特率设置错误,我是按    
        Fpclk
波特率BPS= ---------------------------  
       (TSEG1+TSEG2+3)*(BRP+1)

算的,请高手指点一下,初学者搞CAN,找不到头绪。先谢谢!

相关帖子

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

本版积分规则

1

主题

2

帖子

0

粉丝