中级会员
 
- 积分
- 393
- 金钱
- 393
- 注册时间
- 2014-8-18
- 在线时间
- 43 小时
|
1金钱
参考原子的例程,写了个CAN的发送接收程序,采用的是中断接收,实际过程中发送没问题,可以一接收到CAN数据,程序就一直停留在CAN中断里面出不来,不执行主函数
主函数
[mw_shl_code=c,true] while(1)
{
CAN_Transmit(CAN1, &temp_Tx);
printf("t:%d\r\n",t);
delay_ms(500);
t++;
} [/mw_shl_code]
中断函数:
[mw_shl_code=c,true]void USB_LP_CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage ;
int i=0;
CAN_Receive(CAN1, 1, &RxMessage);
for(i=0;i<8;i++)
printf("rxbuf[%d]:%x\r\n",i,RxMessage.Data);
}[/mw_shl_code]
CAN初始化部分
[mw_shl_code=c,true] CAN_FilterInitStructure.CAN_FilterNumber=0; //1yÂËÆ÷0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//CAN_FilterMode_IdList; //
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ¿í
CAN_FilterInitStructure.CAN_FilterIdHigh=((uint16_t)(0x01<<5)); //
CAN_FilterInitStructure.CAN_FilterIdLow=(uint16_t)0x0|CAN_ID_STD;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x00;//
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x00;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//1yÂËÆ÷01Øáaμ½FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//¼¤»î1yÂËÆ÷0
CAN_FilterInit(&CAN_FilterInitStructure); //ÂË2¨Æ÷3õê¼»ˉ
CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE); //FIFO0ÏûÏ¢1òoÅÖD¶ÏÔêDí.
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // Ö÷óÅÏè¼¶Îa1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; // ′ÎóÅÏè¼¶Îa0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);[/mw_shl_code]
|
|