现场总线实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

CAN总线通信实验实验目的基于SJA1000CAN总线控制器和单片机系统完成CAN总线数据收发实验、掌握CAN总线波特率设置、消息ID和接收滤波器配置,完成两个以上节点的数据通讯。实验器材实验器材如下(不含编程计算机)。SJA1000CAN接口模块单片机最小系统板串行下载线(USB转TTL电平串口线)USB转DC5.5mm供电线(可选)杜邦线5V电源适配器(可选)实验内容]——简要说明(1)硬件连接1、单片机和SJA1000的连接使用杜邦把CAN模块的P0口连接到单片机开发板的P0扩展口上;把ALE,WR,RD,INT0,CS,KEY分别对应连接到单片机的ALE,P3.6,P3.7,P3.2,P2.0和P2.5上;把5V和GND分别对应接到单片机的电源接口上。2、SJA1000的连接将SJA1000的CAN_H,CAN_L对应连接,即可完成通信线路的连接(2)软件编程:1、测试通信线路实验可先将资料中演示程序路径下已编译好的三个测试程序分别下载到三个节点上,测试三个节点间的通信,可实现如下功能:模块1发送模块2接收;模块2发送模块3接收;模块3发送模块1接收。2、单滤波器设定实验通过改变屏蔽码和接受码内容,实现以下功能:1发送:2,3接受2发送:1,3接受3发送:1接受,2不接受(3)CAN通信的编程实现:列出与CAN通信相关的代码,并加注释。//屏蔽码和接受码的宏定义#defineUSER_ACCCODE0#defineUSER_ACCMASK0x1fffffff//初始化SJA1000_mode=USER_MODE;//帧格式标准帧11-bit还是扩展帧29-bit_accCode=USER_ACCCODE;//验收码_accMask=USER_ACCMASK;//屏蔽码_baudrate=USER_BAUDRATE;//波特率//设置波特率switch(_baudrate){caseCAN_BAUDRATE_125K:*(unsignedcharxdata*)(SJA1000_BTR0)=0x03;*(unsignedcharxdata*)(SJA1000_BTR1)=0x1c;break;caseCAN_BAUDRATE_250K:*(unsignedcharxdata*)(SJA1000_BTR0)=0x01;*(unsignedcharxdata*)(SJA1000_BTR1)=0x1c;break;caseCAN_BAUDRATE_500K:*(unsignedcharxdata*)(SJA1000_BTR0)=0x00;*(unsignedcharxdata*)(SJA1000_BTR1)=0x1c;break;caseCAN_BAUDRATE_1M:*(unsignedcharxdata*)(SJA1000_BTR0)=0x00;*(unsignedcharxdata*)(SJA1000_BTR1)=0x14;//break;Default;//任意波特率}//设置验收代码//下面为29-bit,扩展帧格式验收代码的设置,标准帧格式略有不同*(unsignedcharxdata*)(SJA1000_ACR0)=(UINT8)(_accCode21);*(unsignedcharxdata*)(SJA1000_ACR1)=(UINT8)(_accCode13);*(unsignedcharxdata*)(SJA1000_ACR2)=(UINT8)(_accCode5);*(unsignedcharxdata*)(SJA1000_ACR3)=(UINT8)(_accCode3);//设置验收屏蔽*(unsignedcharxdata*)(SJA1000_AMR0)=(UINT8)(_accMask21);*(unsignedcharxdata*)(SJA1000_AMR1)=(UINT8)(_accMask13);*(unsignedcharxdata*)(SJA1000_AMR2)=(UINT8)(_accMask5);*(unsignedcharxdata*)(SJA1000_AMR3)=(UINT8)(_accMask3)|0x04;//设置工作模式_data=*(unsignedcharxdata*)(SJA1000_MOD);_data&=~0x1;//MOD.0=0,进入工作模式_data|=0x08;//MOD.3=1,单滤波模式//设定节点地址can_s_msg.ID1=0;can_s_msg.ID2=0;can_s_msg.ID3=0;can_s_msg.ID4=0;实验结论1、通过实验,利用单片机和SJA1000实现了CAN节点的搭建2、通过屏蔽码和接受码的设置,对节点的通讯方向实现了定向控制实验出现的问题及解决办法1、实验中出现了节点之间连线后无法通讯的问题,后检查发现是连线时导线连接不稳固,导致断路。2、将程序写入单片机后,节点不能使用,后发现程序烧入后SJA1000需要重启后才可以使用。3、在实现三台电脑互相通讯后,要改变程序使得其中传导方向改变以及实现传导屏蔽时无法同时实现所有要求,在请教老师以及更改参数过后得以实现。思考题1、若已知CAN接口板的基地址=7F00H,请问PeliCAN模式下,SJA1000的控制寄存器的物理地址=?根据输出控制寄存器定义#defineSJA1000_OCR(SJA1000_BASEADDR+8)//输出控制寄存器其物理地址=7F08H2、请将BasicCAN下地址分配表中的32个单元地址,用C语言宏常量定义方法,定义成SJA1000.h文本文件,并在Keil工程文件中调用。将下列代码提出写在SJA1000.h中,进行编译即可//控制写入#defineSJA1000_BASEADDR0xfe00//基地址#defineSJA1000_MOD(SJA1000_BASEADDR)//模式寄存器#defineSJA1000_CMR(SJA1000_BASEADDR+1)//命令寄存器#defineSJA1000_SR(SJA1000_BASEADDR+2)//状态寄存器#defineSJA1000_IR(SJA1000_BASEADDR+3)//中断寄存器#defineSJA1000_IER(SJA1000_BASEADDR+4)//中断使能寄存器#defineSJA1000_BTR0(SJA1000_BASEADDR+6)//总线定时寄存器0#defineSJA1000_BTR1(SJA1000_BASEADDR+7)//总线定时寄存器1#defineSJA1000_OCR(SJA1000_BASEADDR+8)//输出控制寄存器#defineSJA1000_ALC(SJA1000_BASEADDR+11)//仲裁丢失捕捉寄存器#defineSJA1000_ECC(SJA1000_BASEADDR+12)//误码捕捉寄存器#defineSJA1000_ACR0(SJA1000_BASEADDR+16)//验收代码寄存器#defineSJA1000_ACR1(SJA1000_BASEADDR+17)#defineSJA1000_ACR2(SJA1000_BASEADDR+18)#defineSJA1000_ACR3(SJA1000_BASEADDR+19)#defineSJA1000_AMR0(SJA1000_BASEADDR+20)//验收屏蔽寄存器#defineSJA1000_AMR1(SJA1000_BASEADDR+21)#defineSJA1000_AMR2(SJA1000_BASEADDR+22)#defineSJA1000_AMR3(SJA1000_BASEADDR+23)#defineSJA1000_RBSA(SJA1000_BASEADDR+30)//RX缓冲器起始地址寄存器#defineSJA1000_CDR(SJA1000_BASEADDR+31)//时钟分频寄存器//工作模式#defineSJA1000_SFF_EFF(SJA1000_BASEADDR+16)//TX帧信息地址#defineSJA1000_RXID1(SJA1000_BASEADDR+17)//扩展帧识别码#defineSJA1000_RXID2(SJA1000_BASEADDR+18)#defineSJA1000_RXID3(SJA1000_BASEADDR+19)#defineSJA1000_RXID4(SJA1000_BASEADDR+20)#defineSJA1000_RX_BASE(SJA1000_BASEADDR+21)//扩展帧接收缓冲器起始地址

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功