打印
[LPC]

LPC2378CAN控制器数据发送不出去

[复制链接]
990|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ilikedota|  楼主 | 2014-12-16 19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人想通过LPC2378的CAN1口发送数据到CAN2口,硬件确定没有问题。但是数据怎么都发不出来。以下是我的代码,请高手指教下这是为什么?
初始化CAN配置代码:
DWORD CAN_Init( DWORD can_btr )
{
        CAN1RxDone = CAN2RxDone = FALSE;

        PCONP |= (1 << 13) | (1 << 14);        //使能外设CAN

    PINSEL0        &= ~0x00000F0F;
        PINSEL0 |= 0x0000A05;        // 选择CAN1和CAN2

        CAN1MOD = CAN2MOD = 1;        //复位模式
        CAN1IER = CAN2IER = 0;        //禁能中断
        CAN1GSR = CAN2GSR = 0;        //

        CAN1BTR = CAN2BTR = can_btr;
        CAN1MOD = CAN2MOD = 0x0;        // 正常模式

        // Install CAN interrupt handler
        install_irq( 23, (void *)CAN_Handler, HIGHEST_PRIORITY );
        CAN1IER = CAN2IER = 0x01;                // Enable receive interrupts
发送数据代码:
DWORD CAN1_SendMessage( CAN_MSG *pTxBuf )
{
    DWORD CANStatus;

        CANStatus = CAN1SR;
        if ( CANStatus & 0x00000004 )  //如果TBS1|2位为1,则发送缓冲区被释放,可以送入数据发送
        {
                CAN1TFI1 = pTxBuf->Frame & 0xC00F0000;   //标示符位数、RTR类型、数据长度
                CAN1TID1 = pTxBuf->MsgID;                //标示符
                CAN1TDA1 = pTxBuf->DataA;                //数据A
                CAN1TDB1 = pTxBuf->DataB;                //数据B
                CAN1CMR = 0x21;
                return ( TRUE );
        }
}
main函数初始化CAN 后,运行CAN1_SendMessage()函数,CAN2口没有收到数据,我通过查询的方式逐步排查,发现数据送到CAN1TDA1、CAN1TDB1后根本没有发送出去,读出来的数和我写进去的数一样,还在里面,也就是说CAN1CMR = 0x21;指令执行好像失效?不知道有没有人遇到过类似的情况,请大神们不吝赐教,非常感谢!!

相关帖子

沙发
ilikedota|  楼主 | 2015-1-5 22:33 | 只看该作者
问题已经解决了,不是程序的问题,是波特率设置的太小了,把波特率设置的大点,通信就正常了,也不知道为什么波特率小点就通信不正常,无语。

使用特权

评论回复
板凳
huzhiyang1988| | 2015-5-5 15:30 | 只看该作者
对LPC2378,可以用Labview的图像化编程来编写程序,编写好程序,直接下载到2378的FLASH里面,对于SD卡,CAN通信,以太网什么的。。编程都非常快。。。

使用特权

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

本版积分规则

33

主题

98

帖子

3

粉丝