
导语: 在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,整车不断整合各种各样的电子控制系统。为了减少线束数量并提升数据传输的可靠性,1986年博世公司开发出面向汽车领域的CAN通信协议。此后,CAN协议成为了ISO11898及ISO11519国际标准,现在已是汽车网络的标准协议。CAN协议由于优秀的性能,被广泛地应用于工业自动化、船舶、医疗设备、工业设备等行业。
什么是CAN?
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。CAN协议具有实时性强、传输距离较远、抗电磁干扰能力强、成本低、检错能力强等优点。本期我们做一个基于CAN协议通讯的例程,实现电脑主机与HXS320F28034芯片数据通信。
程序说明:
配置eCAN波特率为1Mbps、扩展帧、数据帧,邮箱0发送,邮箱16接收,ID为0x12345678,将邮箱16收到的数据通过邮箱0发出去。
本程序使用中科昊芯Core_DSC28034核心板,相关资料可以在中科昊芯官网下载:
http://www.haawking.cn/kfb
运行效果:


例程主要代码:
//
// 主函数:
//
int main(void)
{
InitSysCtrl();
GpioConfig();
CanInit();
CanConfig();
while(1)
{
while(ECanaRegs.CANRMP.all != 0x00010000){}
ECanaRegs.CANRMP.all = 0x00010000;
ECanaMboxes.MBOX0.MDL.all = ECanaMboxes.MBOX16.MDL.all;
ECanaMboxes.MBOX0.MDH.all = ECanaMboxes.MBOX16.MDH.all;
ECanaRegs.CANTRS.all = 0x00000001;
while( ECanaRegs.CANTA.all != 0x00000001 ){}
ECanaRegs.CANTA.all = 0x00000001;
MessageReceivedCount++;
}
return 0;
}
//
// eCAN配置函数:
//
void CanConfig()
{
//设置邮箱ID
ECanaMboxes.MBOX0.MSGID.all = 0x92345678;
ECanaMboxes.MBOX16.MSGID.all = 0x92345678;
//设置CAN的方向 15发送 0-14 16-31接收
ECanaRegs.CANMD.all = 0x00010000;
//使能邮箱
ECanaRegs.CANME.all = 0x00010001;
//数据长度设置为8
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
//写入的数据
ECanaMboxes.MBOX0.MDL.all = 0;
ECanaMboxes.MBOX0.MDH.all = 0;
}
关于中科昊芯
“智由芯生 创享未来”,中科昊芯是数字信号处理器专业供应商。作为中国科学院科技成果转化企业,瞄准国际前沿芯片设计技术,依托多年积累的雄厚技术实力及对产业链的理解,以开放积极的心态,基于开源指令集架构RISC-V,打造多个系列数字信号处理器产品,并构建完善的处理器产品生态系统。产品具有广阔的市场前景,可广泛应用于工业控制及电机驱动、数字电源、光伏、储能、新能源汽车、消费电子、白色家电等领域。
