Can总线,搞汽车电子的应该都很熟悉了,在汽车上的应用比较多,艺名叫做控制局域网。(具体协议内容请自行百度)。
在LPC2378里can控制器主要分为了两个部分:控制器和验收滤波。
刚开始以为和UART差不多的两线传输协议。。。后来看到ISO七层协议就默默的翻过了,网络没学好的请自行绕道原理转应用。
虽然只是参考了传输层,数据链路层及物理层,总归来说就是在有效信息上添加了很多冗余后分帧传输,一方面是为了仲裁信息的优先级,另一方面就是为了提高信息的可靠性。
在手册上介绍了好些寄存器,就浏览了下,大概就地址,数据存储寄存器,还有些信息标志位。
下面主要介绍下labview 开发can总线实现自发自收的过程:
这是烧录到ARM里面的程序。。。
下面是在ARM上一些资源的VI,当然还有像TCP/IP,或者串口等协议,因为那些不是特指在ARM上使用,所以不在这个分类里面、
介绍下使用的几个VI,
打开一个can,输入的有效参数就两个,一个是片上的CAN控制器的选择,另外一个就是can传输的波特率了。
第二个就是开始can数据传输的VI,输入参数就只有can 控制器的选择。这个VI的使用是在初始化can的前提下。
下面就是can的读写操作了,下图是can的写VI,很多参数,本例程因为就设计两个can间的通信,所以很多的参数使用它的默认值就可以了,像ID因为就两个can通信,所以不存在总线上的优先级的问题,所以就忽略了,就给初始化了个can控制器和输入数据。
Can的读VI,用户接口上大致只是和写VI是输入输出的反向而已。
当有多个can设备时,需要从众多设备中分辨出你需要夺取的can设备的ID,接着再用读取VI将数据读出。
VI大概就介绍完了,下面看看实例
上述例子将can的发送波特率设置在了500000bps,先初始化两个can1,can2,同时开始,接着can1往总线上写字符串“87654321”,can2则将字符串读取回来,并通过在线仿真在labview面板上显示。因为只有两个can间的通信,不涉及总线的优先级等,所以一个write和read的VI就可以解决问题,但是存在多个can同时工作的话,就要用到set receive ID的那个vi了。
结果如图:
感兴趣的 可以加我Q切磋 644454732 也可以自己淘宝labview for arm 淘宝有卖这板卡的
|