关于CAN通信的问题,例程上的发送函数有点不太明白,请教下大家
[复制链接]
先上例程:
void CAN1_SendMesg(uint32_t id, uint8_t len, uint8_t *dat)
{
uint16_t i = 0;
CanTxMsg TxMessage;
/* Ò»´Î·¢ËÍÖ»ÄÜ·¢ËÍ8¸ö×Ö½Ú */
if(len > 8)
{
return ;
}
TxMessage.StdId = (id & 0x7FF);
TxMessage.ExtId = (id >> 11);
TxMessage.RTR = CAN_RTR_DATA; //
if((id & 0x7FF) == 0x7FF) //判断标准帧还是扩展帧
{
TxMessage.IDE = CAN_ID_STD;
}
else
{
TxMessage.IDE = CAN_ID_EXT; //±ê×¼ID
}
TxMessage.DLC = len; //·¢Ë͵ÄÊý¾Ý³¤¶È
/* ½«Êý¾Ý·ÅÈëµ½ÓÊÏäÖÐ */
for(i=0; i<len; i++)
{
TxMessage.Data[i] = *dat;
dat++;
}
CAN_Transmit(CAN1, &TxMessage);
}
以上就是一个开发板厂商给的例程,问题如下:
1. TxMessage.ExtId = (id >> 11); 不应该是等于id&0x1fffffff?
2. 判断标准帧和扩展帧的方式,这种能判断出来吗?
|