金牌会员
 
- 积分
- 1760
- 金钱
- 1760
- 注册时间
- 2017-6-23
- 在线时间
- 172 小时
|
1金钱
各位民工兄弟们,你们有没有遇到过CAN接收中断进去就出不来的情况,来个根正苗红的贫下中农指点一下,地主家里没有余粮了
/*-----------------------------------------------------------------------------------------------------*/
void CAN_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
Message rxm = Message_Initializer;
CAN_Receive(CAN1, 0, &RxMessage);
rxm.cob_id = (uint16_t)(RxMessage.StdId);
rxm.rtr = RxMessage.RTR;
rxm.len = RxMessage.DLC;
printf("cob_id 0x%x 0x%x ", rxm.cob_id, rxm.len);
for(i=0;i<rxm.len;i++)
{
rxm.data = RxMessage.Data;
printf("%2x ", RxMessage.Data);
}
printf("\r\n");
}
这是中断处理函数
/*-----------------------------------------------------------------------------------------------------*/
void CAN_Receive_Msg(void)
{
CanRxMsg RxMessage;
int i=0;
Message rxm = Message_Initializer;
CAN_Receive(CAN1, 0, &RxMessage);
rxm.cob_id = (uint16_t)(RxMessage.StdId);
rxm.rtr = RxMessage.RTR;
rxm.len = RxMessage.DLC;
printf("cob_id 0x%x 0x%2x ", rxm.cob_id, rxm.len);
for(i=0;i<rxm.len;i++)
{
rxm.data = RxMessage.Data;
printf("%2x ", RxMessage.Data);
}
printf("\r\n");
}
这个是CAN接收函数,在不开中断的情况,收发都没有问题,一旦通过中断,立马凉凉;
看了一下库函数源码,CAN_Receive()这个函数最后重置了对应FIFO,但好像并没有操作任何CAN相关的寄存器,原因是在这里吗?如果是的话,应该重置哪个中断标志呢~
times++;
if(times == 1000)
{
MotorSDO_Message.cob_id = 0x602;
for(i = 0; i < 8; i++)
{
MotorSDO_Message.data = 0x00;
}
if(CAN_Send_Msg(&MotorSDO_Message) == 0)
{
printf("----------------\r\n");
}
times = 0;
}
delay_ms(10);
这个是测试调用的代码
/*-----------------------------------------------------------------------------------------------------*/
11
调试可以看到应该是赖在中断中不出来了~~~~
|
|