中级会员
 
- 积分
- 393
- 金钱
- 393
- 注册时间
- 2014-8-18
- 在线时间
- 43 小时
|
10金钱
本帖最后由 marcus 于 2017-7-26 17:01 编辑
CAN通讯,如果开启了CAN的FIFO消息挂号中断,那是不是表示CAN数据段长度必须为8?因为原子代码中中断函数是这么处理的
void CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN1, 0, &RxMessage);
for(i=0;i<8;i++)
printf("rxbuf[%d]:%d\r\n",i,RxMessage.Data);
}
如果没有开启中断的话,CAN通讯的数据长度就是0~8,可以通过DLC来判断。
u8 CAN1_Receive_Msg(u8 *buf)
{
u32 i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
for(i=0;i<RxMessage.DLC;i++)
buf=RxMessage.Data;
return RxMessage.DLC;
}
我现在有个项目,是通过板载CAN通过CAN转串与上位机通讯的,上位机发过来的报文是13个字节,我打算分成两个数据帧接收后重新组合进行处理,不知道这种办法是否可行,或者有什么其他更好的办法
|
最佳答案
查看完整内容[请看2#楼]
哪种接收方式都可以接收任意长度的数据,通过RxMessage.DLC判断。
上位机发送的报文方式你可以设置的话,13个字节可以分开两个ID报文进行发送
|