最近小白做了有关arduino和can总线的通信,先在网上买了基于Arduino的CAN模块,买的时候别买错了,要Arduino版的不是51版的(小白就买错一次)。
然后,我就根据淘宝店家给的Arduino库和连线方式,用MEGA2560和CAN模块通信,但是串口显示
Can init fail!!!最后我用Arduino UNO
和CAN模块通信,串口显示出数据了。
这个是
CAN模块和
Arduino UNO连线方式:
它的库请在下面的连接下载。
本来任务已经完成,不过对于MEGA2560一直不能通信我感到很好奇,于是我问了一下度娘,查到
Arduino UNO的SPI引脚和
MEGA2560的SPI引脚不同,
这个是
MEGA2560的SPI引脚:
于是乎, 我又换了引脚,结果
串口
还是显示
Can init fail!!!为什么啊!
没有办法,我只好用示波器来测这两个单片机的SPI因脚的波形,发现两个单片机的SCK引脚都是发出4MHZ的脉冲信号,MOSI发出的是载波信号,MISO发出的 是低电平(我测的是发送程序),只有SS信号不一样,哈哈,终于发现倪端了!尽管SS是SPI的片选信号,可是我用的CAN库里好像只认
Arduino UNO的SPI的SS信号-10号引脚,于是我用2560的10号角接SS端,结果还是不行~
最后,我在网上发现了另一个库,可以改SS信号的引脚,我就用了它的例程,把SS信号随便改了一个数字引脚,结果就成功了!而且
Arduino UNO也可以用。
Arduino
库:
仅Arduino UNO:可以用
http://yun.baidu.com/s/1qX3adXy
Arduino UNO和
MEGA2560都可以用:
http://yun.baidu.com/s/1pKjzo4V