查看: 4761|回复: 8

[其他] 安版主 这是我的CAN程序 麻烦您看一下!!

[复制链接]

该用户从未签到

4

主题

44

帖子

0

中级会员

Rank: 3Rank: 3

积分
207
最后登录
1970-1-1
发表于 2011-12-28 08:19:19 | 显示全部楼层 |阅读模式
麻烦安版主了!!!
我知道答案 目前已有8人回答

CAN测试-发送数据.rar

242.46 KB, 下载次数: 53, 下载积分: 威望 1

回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-28 09:27:58 | 显示全部楼层

    RE:安版主 这是我的CAN程序 麻烦您看一下!!

    应该是死到while(!CANCTL0_SYNCH);这里了,这个可以不判断,你把他屏蔽掉就可以了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    44

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    207
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-28 11:42:02 | 显示全部楼层

    回复:安版主 这是我的CAN程序 麻烦您看一下!!

    回复第 2 楼 于2011-12-28 01:27:58发表:
    应该是死到while(!CANCTL0_SYNCH);这里了,这个可以不判断,你把他屏蔽掉就可以了。 

    我已经把同步判断去掉了!!!
    初始化通过了,可是我发现只能发送三次之后,发送缓冲器就满了!!数据发不出去呀!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    44

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    207
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-28 11:48:07 | 显示全部楼层

    RE:安版主 这是我的CAN程序 麻烦您看一下!!

    这是我修改之后的程序:
    /***CAN初始化*******************************************************/
    void CAN_Init(void){
         CANCTL0_INITRQ = 1;       //启动CAN初始化
         while(!CANCTL1_INITAK)    //等待初始化响应
              ;
             
         CANCTL1 = 0x80;           //CAN工作模式的设置 选择24M总线时钟
         
         CANBTR0_SJW = 3;          //同步跳跃脉宽设置 4Tq
         CANBTR0_BRP = 2;          //预分频数设置为3
       
         CANBTR1_SAMP = 0;         //采样数为1
         CANBTR1_TSEG_20 = 3;
         CANBTR1_TSEG_10 = 10;     //相位缓冲段SEG1、SEG2长度设置 4,11个Tq
         
         CANIDAC_IDAM = 1;         //选择消息的接受模式                                                  
         
         CANIDAR0 = 0x00;CANIDMR0 = 0x00;
         CANIDAR1 = 0x00;CANIDMR1 = 0x00;
         CANIDAR2 = 0x00;CANIDMR2 = 0x00;
         CANIDAR3 = 0x00;CANIDMR3 = 0x00;
         CANIDAR4 = 0x00;CANIDMR4 = 0x00;
         CANIDAR5 = 0x00;CANIDMR5 = 0x00;
         CANIDAR6 = 0x00;CANIDMR6 = 0x00;
         CANIDAR7 = 0x00;CANIDMR7 = 0x00;     //接受所有的地址的消息  
         CANCTL0_INITRQ = 0;       //关闭CAN初始化
         while(CANCTL1_INITAK)     //等待关闭初始化响应
              ;   
                
         //while(!CANCTL0_SYNCH)     //等待CAN同步
          //    ;
         CANRFLG_RXF = 1;          //清空消息接受缓冲器
         CANRIER_RXFIE = 1;        //使能接收消息中断
    }
    /***CAN发送函数*****************************************************/
    void CAN_send(mscan_T_msg msg){    //发送8个数
         byte Txbuffer,i;
         //if(CANCTL0_SYNCH == 1){
         
           Txbuffer = 0;
           while(!CANTFLG)             //等待发送缓冲器可用
                 ;
           CANTBSEL = CANTFLG;
           Txbuffer = CANTBSEL;        //选择可用的buffer     
         
           CANTXIDR0 = (byte) (msg.Tx_ID>>8);
           CANTXIDR1 = (byte) msg.Tx_ID;
           CANTXDLR = msg.Tx_Length;
           CANTXTBPR = msg.Tx_Prio;        
           for(i=0;i
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    44

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    207
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-28 11:55:41 | 显示全部楼层

    RE:安版主 这是我的CAN程序 麻烦您看一下!!

    好像粘贴是有点出错了,再发一次(程序死在了这里while(!CANTFLG);):
    /***CAN初始化*******************************************************/
    void CAN_Init(void){
    CANCTL0_INITRQ = 1; //启动CAN初始化
    while(!CANCTL1_INITAK) //等待初始化响应
    ;
    CANCTL1 = 0x80; //CAN工作模式的设置 选择24M总线时钟
    CANBTR0_SJW = 3; //同步跳跃脉宽设置 4Tq
    CANBTR0_BRP = 2; //预分频数设置为3
    CANBTR1_SAMP = 0; //采样数为1
    CANBTR1_TSEG_20 = 3;
    CANBTR1_TSEG_10 = 10; //相位缓冲段SEG1、SEG2长度设置 4,11个Tq
    CANIDAC_IDAM = 1; //选择消息的接受模式
    CANIDAR0 = 0x00;CANIDMR0 = 0x00;
    CANIDAR1 = 0x00;CANIDMR1 = 0x00;
    CANIDAR2 = 0x00;CANIDMR2 = 0x00;
    CANIDAR3 = 0x00;CANIDMR3 = 0x00;
    CANIDAR4 = 0x00;CANIDMR4 = 0x00;
    CANIDAR5 = 0x00;CANIDMR5 = 0x00;
    CANIDAR6 = 0x00;CANIDMR6 = 0x00;
    CANIDAR7 = 0x00;CANIDMR7 = 0x00; //接受所有的地址的消息
    CANCTL0_INITRQ = 0; //关闭CAN初始化
    while(CANCTL1_INITAK) //等待关闭初始化响应
    ;
    //while(!CANCTL0_SYNCH) //等待CAN同步
    // ;
    CANRFLG_RXF = 1; //清空消息接受缓冲器
    CANRIER_RXFIE = 1; //使能接收消息中断
    }
    /***CAN发送函数*****************************************************/
    void CAN_send(mscan_T_msg msg){    //发送8个数
         byte Txbuffer,i;
         //if(CANCTL0_SYNCH == 1){
         
           Txbuffer = 0;
           while(!CANTFLG)             //等待发送缓冲器可用
                 ;
           CANTBSEL = CANTFLG;
           Txbuffer = CANTBSEL;        //选择可用的buffer     
         
           CANTXIDR0 = (byte) (msg.Tx_ID>>8);
           CANTXIDR1 = (byte) msg.Tx_ID;
           CANTXDLR = msg.Tx_Length;
           CANTXTBPR = msg.Tx_Prio;        
           for(i=0;i
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    44

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    207
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-28 11:58:04 | 显示全部楼层

    RE:安版主 这是我的CAN程序 麻烦您看一下!!


           for(i=0;i
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-12-28 14:33:12 | 显示全部楼层

    RE:安版主 这是我的CAN程序 麻烦您看一下!!

    你连接节点了吗?这个时候要有节点来接受,否则会出现溢出错误,你看看寄存器是不是溢出了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    44

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    207
    最后登录
    1970-1-1
     楼主| 发表于 2011-12-28 16:19:05 | 显示全部楼层

    回复:安版主 这是我的CAN程序 麻烦您看一下!!

    回复第 7 楼 于2011-12-28 06:33:12发表:
    你连接节点了吗?这个时候要有节点来接受,否则会出现溢出错误,你看看寄存器是不是溢出了。
     

    你说的连接到节点是只要连到收发器上还是必须挂的CAN总线才算得上是一个节点?
    还有不确认同步没有影响吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    12

    帖子

    0

    注册会员

    Rank: 2

    积分
    52
    最后登录
    2019-7-25
    发表于 2014-10-28 11:15:35 | 显示全部楼层
    好像不错的样子
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-26 07:40 , Processed in 0.106673 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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