CAN通信
前言
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。CAN 的高性能和可靠性已被认同。CAN总线通信系统是串行通信的一种,要优于RS485总线,是目前比较常用的一种工业总线,如汽车的电气部分就采用CAN总线实现通信。与I²C、SPI等具有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步半双工通讯。(同步即在同一个时钟驱动下数据通信,半双工即接受与发送不能同时进行)
1.配置CAN驱动
使能CAN1、CAN2作为AB总线备份。
2.配置波特率
通常配置500kbps
3.配置发送接收
•配置 CAN1 , MessageBox 1 为发送状态
•配置 CAN2 , MessageBox 1 为中断接收状态
ID为接收过滤时使用。接收需指定相同的ID。
采用box可以单独设定为具体设备通信的类型,例如box1代表遥控、box2代表遥测。
发送代码接口如下:
void canSendData(canBASE_t *node, uint32 messageBox, uint8 nodeid, uint8 frame_type, uint8 *data, uint32 len)
{
//can的发送函数
canTransmit(canBASE_t *node, uint32 messageBox, const uint8 * data):
}
指定can,id,数据,数据帧类型,长度。
接收代码接口如下:
void canMessageNotification(canBASE_t *node, uint32 messageBox)
{
uint8 canBuf[8];
//can接收函数
canGetData(node, messageBox, canBuf);
}
采用中断的方式接收数据,编写中断服务函数。
4.配置引脚
将供电、接收、发送、地,都接出来,便于用can分析仪调试。
总结
本文仅仅简单介绍了TMS570 can的使用,而can具体的通信,例如故障模式、切总线,总线恢复等,具体的实现还需大家自己摸索。