can在接受时,为什么总是只能接受3帧数据,是因为fifo0是3级深度吗?
现在找到的解决办法就是加延时,延时一段时间后去读自己从fifo中读取的数据,下面是我的扫描从can的程序,以及接受中断的程序
CAN1_Send_Msg(CAN2_DATA,8,0x0111);//扫描从机CAN1
delay_ms(10);
if(can1_num>0)
{
printf("%d",can1_num);
RS232_1_Send_Data(can1_buf,48);
can1_num=0;
}
delay_ms(1);//两次扫描之间要加延时,要不然会出错
CAN1_Send_Msg(CAN3_DATA,8,0x0112);//扫描从机CAN2
delay_ms(1);
if(can1_num>0)
{
printf("%d",can1_num);
RS232_1_Send_Data(can1_buf,24);
can1_num=0;
}
接受中断程序:
void CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
u8 i=0;
can1_num++;
CAN_Receive(CAN1, 0, &RxMessage);
for(i=0;i<8;i++)
{
can1_buf[(can1_num-1)*8+i] = RxMessage.Data[i];
}
CAN1_ID=RxMessage.StdId;
can1_rec_flag = 1;
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0); /* 清除挂起中断 */
// CAN_FIFORelease(CAN1,CAN_FIFO0 );
// printf("rxbuf[%d]:%d\r\n",i,RxMessage.Data[i]);
}
路过。挣点积分。
这个问题也困扰我好久了
程序优化的话,发送也可以使用中断
支持学习了!
支持,正要学习这个啊。can很热门