Haawking DSC28034实例开发教程—eCAN协议通讯例程
中科昊芯
2021年12月09日 11:26
收录于文集
共36篇

导语: 在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,整车不断整合各种各样的电子控制系统。为了减少线束数量并提升数据传输的可靠性,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

运行效果:

例程主要代码:

代码块
clike
自动换行
复制代码
//
// 主函数:
//
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,打造多个系列数字信号处理器产品,并构建完善的处理器产品生态系统。产品具有广阔的市场前景,可广泛应用于工业控制及电机驱动、数字电源、光伏、储能、新能源汽车、消费电子、白色家电等领域。