CAN总线调试记录 一.说明: 最近一个项目用到了CAN总线,借此机会学习了CAN总线.有关CAN总线的协议在这不再详述,可以在网络上搜到相关资料. 二.实验平台: CAN232MB+SJA1000+AT89C52+MCP2551 CAN232MB----232转CAN模块(广州周立功邮购) SJA1000----CAN控制器(广州周立功邮购) AT89C52----这个不用介绍了吧 ^_^ MCP2551----CAN总线收发器 三.实验电路 电路说明: 电路参考ZLG网站上的资料,并加了一些测试用的发光二极管. CPU晶振11.0592M SJA1000晶振16M 片选地址 :由于SJA1000的片选信号接了P2_7,所以片选地址为0x0000到0x7f00 之间的值(实验用的是0x7f00). 四.开发记要: 1.Basic模式 2.zlg网站提供的测试程序中sja1000的晶振为12M,sja1000初始化配置为100kpbs,测试失败,换为16M晶振,串口调试助手看到了数据. 3.验收代码寄存器ACR验收屏蔽寄存器 AMR分别配置为0xff 0xff,无条件接收. 4.第3步通过后,再做选择性的接收测试,例如,将can232MB(ZLG网站有说明书)配置为ID为00 00 05 50,ACR=0x02,AMR=0x00; SJA1000的ID配置为0x02,ACR =0xaa,AMR=0x00;实验用了两台电脑对发数据,单片机从串口接收到的数据通过sja1000传给CAN232MB,最后传到另一台计算机上显示出来 例如:PC1发送一组数据到89C52,00 48 01 02 03 04 05 06 07 08(前两个字节为ID标识符和数据长度,是CAN232MB能通过验收的标识符,注意哦!!!),单片机收到数据后,转发到PC2。通过PC2用串口调试助手发数据,如:01 02 03 04 05 06 07 08(这里没有标识符,已经在CAN232B中设置,自动加的)。不用CAN232MB也可以做实验,做两块一样的sja1000实验板,对发数据。 5.最后加上高速光耦6n136或6n137,电路如下图 注意:使用6n136时,第7脚不与VCC相连。 五.程序 实验的代码来自zlg网站,略做修改即可。我实验用的是basic模式,peli模式自检测发送也测试成功,还没做进一步研究,确保硬件无误后,再调试程序,以免多走弯路。还有波特率的设置,验收代码寄存器,验收屏蔽寄存器,标识符的设置是重点。还有就是下载的代码中sja1000用的是12M晶振,不过没调通(乱码都看不到),换为16M的调试成功,最后一点,用STC89C52调试不成功,可能是时续的问题,AT89C52可以。 |