新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2014-12-17
- 在线时间
- 0 小时
|
5金钱
//CAN接收数据
//void CAN1_RX1_IRQHandler(void)
//USB和 CAN是共用一组 IO
void USB_LP_CAN1_RX0_IRQHandler(void)
{
// u8 key = 0 ;
// u8 canbuf[8] = {0} ;
// u8 i = 0 ;
if(SET == CAN_GetITStatus(CAN1,CAN_IT_FF0)) //满中断
{
CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
printf("aa\n");
}
else if(SET == CAN_GetITStatus(CAN1,CAN_IT_FOV0)) //溢出中断
{
CAN_ClearITPendingBit(CAN1,CAN_IT_FOV0);
printf("bb\n");
}
else if(CAN_GetITStatus(CAN1 , CAN_IT_FMP0)) //1个报文存入
{
CAN_ClearITPendingBit(CAN1 , CAN_IT_FMP0);
// WriteCANRcvCyBuf(CAN_N0_1);
printf("cc\n");
}
}
上位机向主板发送数据 5ms一个 发送1000个, 当主板接收到第300-400的数据时 会造成 CAN_IT_FMP0 语句分支内死循环。 串口助手上 显示满屏的 cc
下面是 中断配置
//使能中断
#if CAN_RX0_INT_ENABLE
CAN_ITConfig(CAN1,CAN_IT_FMP0 | CAN_IT_FF0 | CAN_IT_FOV0,ENABLE); //FIFO0消息挂号中断允许.
CAN_ITConfig(CAN1,CAN_IT_FMP1 | CAN_IT_FF1 | CAN_IT_FOV1,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 主优先级为1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 次优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
|
|