智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1653|回复: 4
打印 上一主题 下一主题

求教,CAN发送不出去!

[复制链接]

2

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
544
威望
323
贡献
141
兑换币
95
注册时间
2012-8-9
在线时间
40 小时
毕业学校
芜湖职业技术学院
跳转到指定楼层
1#
发表于 2013-6-3 14:42:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

void CAN_Init(void){
    CANCTL0 = 0x01;    /* MSCAN进入初始化模式 */
    while (!(CANCTL1_INITAK));  /* 等待初始化模式确认 */
            
    CANCTL1_CANE = 1;      /* Enable MSCAN module */
    CANCTL1_CLKSRC = 1;    /* MSCAN时钟为总线时钟 */ //振荡器  
    CANCTL1_LISTEN = 0;    /* 正常模式,1:监听模式 */            
           
    CANBTR1 =  0x26;         // 500kbps (TSEG2<<4) + TSEG1
    CANBTR0 =0X41;     
    CANIDAC_IDAM = 0x1;    // Four 16-bit acceptanc filter
   
    // accept all the ID on CAN bus
    CANIDMR0 =0xFF;
    CANIDMR1 = 0xFF;
    CANIDMR2 = 0xFF;
    CANIDMR3 = 0xFF;
    CANIDMR4 = 0xFF;
    CANIDMR5 = 0xFF;
    CANIDMR6 = 0xFF;
    CANIDMR7 = 0xFF;
    CANIDAR0 = 0xFF;
    CANIDAR1 = 0xFF;
    CANIDAR2 = 0xFF;
    CANIDAR3 = 0xFF;
    CANIDAR4 = 0xFF;
    CANIDAR5 = 0xFF;
    CANIDAR6 = 0xFF;
    CANIDAR7 = 0xFF;   
    CANCTL0_INITRQ = 0;            /* 退出初始化模式请求 */
        while (CANCTL1_INITAK) ;     /* 等待进入正常模式*/
                          
     while(!(CANCTL0_SYNCH))  ;                   /*等待CAN同步*/
    CANRFLG_RXF = 1;       /* 清除接收标志位*/                                   
    CANRIER_RXFIE = 1;     /* 使能接收满中断*/  
    }

byte CAN_Send_Frame(mscan_msg_t msg)
{   
    /* Transmission buffer */
    byte u8TxBuffer = {0};
   
    /* Index to data within the transmission buffer */
    byte u8Index;
   
    if (!CANTFLG)              /* Retrun if Transmit Buffer is full */
        return ERR_BUFFER_FULL;
    CANTBSEL = CANTFLG;       /* Select lowest empty buffer */
    u8TxBuffer = CANTBSEL;  /* Backup selected buffer */
   
   
    *((dword *) ((dword)(&CANTXIDR0)))= msg.u32ID;   /* Load Id to IDR Registers */
        
        /* Load data to Data Segment Registers */
        for (u8Index=0;u8Index<(msg.u8Length);u8Index++) {
        
            *(&CANTXDSR0 + u8Index) = (msg.u8TxData)[u8Index];  
        }
    CANTXDLR = msg.u8Length;   /* Set Data Length Code */
    CANTXTBPR = msg.u8Prio;    /* Set Priority */
    CANTFLG = u8TxBuffer;  /* Start transmission */
    //CANTARQ= u8TxBuffer;        
    while ( (CANTFLG & u8TxBuffer) != u8TxBuffer)
            ;  /* Wait for Transmission completion */
            
    return NO_ERR;
}

25

主题

213

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
威望
664
贡献
302
兑换币
403
注册时间
2013-10-8
在线时间
157 小时
5#
发表于 2015-8-20 21:16:53 | 只看该作者
我是能发不能接收啊?
回复 支持 反对

使用道具 举报

0

主题

106

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1031
威望
494
贡献
311
兑换币
335
注册时间
2013-9-3
在线时间
113 小时
4#
发表于 2014-4-3 23:35:06 | 只看该作者
过来瞧瞧啊  哈哈哈过来瞧瞧啊  哈哈哈
回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
283
威望
163
贡献
80
兑换币
98
注册时间
2013-10-16
在线时间
20 小时
毕业学校
中山大学
3#
发表于 2014-4-1 10:08:51 | 只看该作者
加个分号试试
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
544
威望
323
贡献
141
兑换币
95
注册时间
2012-8-9
在线时间
40 小时
毕业学校
芜湖职业技术学院
2#
 楼主| 发表于 2013-6-3 14:50:09 | 只看该作者
当发送时程序一直死在while ( (CANTFLG & u8TxBuffer) != u8TxBuffer)
CAN上位机数据接收到的是错误,不知道为什么!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 07:49 , Processed in 0.074561 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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