CAN通讯基本设置

A节点pelican协议下,扩展帧 单滤波方式

A节点的接收滤波器 ID号 设置为 0x19881205

设置过程 (1) pelican模式设置

设置时钟分频寄存器CDR.7 =1 使SJA1000工作在pelican模式

(2) 是单滤波模式

单滤波模式 设置 模式寄存器的第3位 MOD.3 为 1 表示是 单滤波方式

 

(3) 接收器的接收的是扩展帧 实际上选择了pelican 模式 接收缓冲器就变为了13个字节。 就是接收的扩展帧的格式。

 

(4) 验收代码寄存器 和验收屏蔽寄存器的设置

 

ACR0

 

ACR1

 

ACR2

 

ACR3

 
                                                                 

0

0

 

 

 

ACR0

 

ACR1

 

ACR2

 

ACR3

 
                                                                 

0

0

 

 

 

 

 

 

 

我制作的pelican协议, 扩展帧格式 单滤波方式

 

程序调试的时候,相比于以前的 pelican 协议 标准帧模式 单滤波方式

之前在标准帧的方式下, 是从第4个字节 开始读数据

标准帧数据存放格式如下图:

 

对应从第四帧读数据如下图

 

现在我用的是 pelican协议 扩展帧格式 单滤波方式

 

对应的程序修改:

 

 

 

 

 

 

 

 

试验过程:

主机发送帧的ID号为 0X19881205

 

从机接收的帧的单滤波器 为 0X 19881205

 

则主机发送的数据 从机 均可以正常接收 。

 

(2) 若更改从机的ID号 为 0x19900424

更改从机的程序以后,刷写程序, 发现主机按下按键发送数据,从机不接收

 

 

总结:

对最终的程序总结以及调试方式进行总结:

可以把这个程序上传到淘宝或者咸鱼上卖出去,我觉得是可以的。一方面也是给自己积累经验。也是把经验换成钱。

 

我最终把文件 存放的路径C:\can_prictise\20180218

分为 主机 和从机 文件夹

 

首先主机 和 从机 均采用pelican协议 扩展帧格式 单滤波方式

主机发送一个字节的ID 是0X19881205

主机接收器单滤波 接收器的ID号 是0x19900424

 

从机发送一个字节的ID是0X19900424

从机接收器单滤波 接收器的ID号 是 0X19881205

 

主机程序设置的相关部分

  1. 在置位复位请求的时候 顺便使能了 单滤波方式

     

     

    (2)在复位模式下,是SJA1000工作在pelican模式

     

    (3)由于采用了pelican模式,所以接收器 和 发送器都是扩展帧格式

    (4) 设置主机单滤波器的验收代码寄存器ACR(4个) 和接收屏蔽寄存器AMR(4个)

    使主机的接收邮箱是0x19900424

    (5) 由于是扩展帧 所以在SJA1000的接收中断里做如下处理。

     

(6) 按键触发 主机发送的时候, 发送的ID号 是 0x19881205

 

从机设置的相关部分:

  1. 在置位复位请求的时候 顺便设置了单滤波方式

  1. 在复位模式下 是SJA1000控制器工作了pelican模式下

    (3)由于是pelican模式,所以接收器和发送器都是扩展帧的格式

    (4)设置从机单滤波器的 验收代码寄存器和接收屏蔽代码寄存器

    (5) 设置了从机的接收ID号为0x19881205

    相应的在SJA1000接收中断的函数里

从机的发送邮箱ID 号码是 0x19900424

 

程序 运行的现象:

 

当主机按下按键 的时候 会触发 发送 从机会正常接收,数码管正常显示

 

当从机按下按键的时候 会触发从机 发送, 主机会正常 接收, 主机的数码管正常显示

 

 

用户kvaser 监控

 

 

 

 

 

我储存的log如下:

 

 

 

程序  百度 网盘地址  

posted @ 2020-01-16 14:21  STEVEN-SUN  阅读(3276)  评论(0编辑  收藏  举报