一、需求
通过CAN1、CAN2进行数据收发 波特率250K
二、CAN使用方法介绍
模仿STM32 使用TC1784 CAN fifo架构 配置CAN发送3个发送邮箱(three transmit mailboxes) 配置CAN接收fifo (one fifo wiht three stages)
三、开发历程
1、DAvE配置
CAN Nodes Node0 配置CAN1对应的管脚 使能init 使能中断TRIE 选择中断节点 Use MultiCAN SRN0 波特率配置为250Kpbs
CAN Nodes Node1 类似配置 选择中断节点 Use MultiCAN SRN1
Lists配置
LIst1(node0) MO 000 --- MO003(用于接收fifo) MO 004--- MO007(用于发送fifo)
LIst2(node0) MO 032 --- MO035(用于接收fifo) MO 036--- MO039(用于发送fifo)
MOs
MO 0 配置DIR为接收 其余根据情况配置 FIFO 选择Receive fifo base object 选择BOT MO0 选择TOP MO3 选择SEL为MO2 MO中断不需要配置
MO 1-MO3 不需要配置 默认即可
MO 4 配置DIR为发送 其余根据情况配置 FIFO 选择Transmit fifo base object 选择BOT MO4 选择TOP MO7选择SEL为MO6 MO中断不需要配置
CAN2 MO配置类似
SRNS 使能SRE node0 node1
2、接收与发送测试
//LAUTERBACH仿真上位机 查看CAN发送与接收
CPU——》Peripherals——》MultiCAN Message Object 0
3、CAN接收与发送
接收代码
在中断 CAN_viSRN0 if RXOK 添加如下代码
CAN_SWObj rxcan1Obj;
ubyte numObj = 0;
CAN_vGETMsgObj(numObj,&rxcan1Obj);
发送代码
主循环中 添加如下代码
CAN_SWObj txcan1Obj;
ubyte txObj_u8 = 4;
txcan1Obj.usMOCfg = 0x80; 数据长度 8字节
txcan1Obj.uwID = 0x188;
txcan1Obj.ubdata[0] = 0x11;
txcan1Obj.ubdata[0] = 0x17;
CAN_ubWriteFIFO(txObj_u8, &Txcanobj);
注意:主循环中 发送不加延时时 CAN接收不到数据 调整接收ID比发送ID 也收不到 必须先接收到 再发送才可以 待研究。增加延时,可以正常收发