初级会员

- 积分
- 126
- 金钱
- 126
- 注册时间
- 2014-7-28
- 在线时间
- 2 小时
|

楼主 |
发表于 2015-7-16 15:20:43
|
显示全部楼层
回复【2楼】zuozhongkai:
----------------------------
发送邮箱,在原子哥的例程里,
u8 Can_Tx_Msg(u32 id,u8 ide,u8 rtr,u8 len,u8 *dat)
{
u8 mbox;
if(CAN1->TSR&(1<<26))mbox=0; //邮箱0为空
else if(CAN1->TSR&(1<<27))mbox=1; //邮箱1为空
else if(CAN1->TSR&(1<<28))mbox=2; //邮箱2为空
else return 0XFF; //无空邮箱,无法发送
CAN1->sTxMailBox[mbox].TIR=0; //清除之前的设置
if(ide==0) //标准帧
{
id&=0x7ff;//取低11位stdid
id<<=21;
}else //扩展帧
{
id&=0X1FFFFFFF;//取低32位extid
id<<=3;
}
CAN1->sTxMailBox[mbox].TIR|=id;
CAN1->sTxMailBox[mbox].TIR|=ide<<2;
CAN1->sTxMailBox[mbox].TIR|=rtr<<1;
len&=0X0F;//得到低四位
CAN1->sTxMailBox[mbox].TDTR&=~(0X0000000F);
CAN1->sTxMailBox[mbox].TDTR|=len; //设置DLC.
//待发送数据存入邮箱.
CAN1->sTxMailBox[mbox].TDHR=(((u32)dat[7]<<24)|
((u32)dat[6]<<16)|
((u32)dat[5]<<8)|
((u32)dat[4]));
CAN1->sTxMailBox[mbox].TDLR=(((u32)dat[3]<<24)|
((u32)dat[2]<<16)|
((u32)dat[1]<<8)|
((u32)dat[0]));
CAN1->sTxMailBox[mbox].TIR|=1<<0; //请求发送邮箱数据
return mbox;
} |
|