打印

STM32 CAN2 进不了收中断

[复制链接]
4327|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
359927814|  楼主 | 2011-9-27 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位兄弟,我来求助了,我用到Stm32f107的,我用到CAN2,CAN2可以发,但进不了接收中断,求真像。
相关代码如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2,ENABLE);
。。
void CAN_Configuration(void)
{
CAN_InitTypeDef        CAN_InitStructure;
CAN_FilterInitTypeDef  CAN_FilterInitStructure;

CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);

/* CAN cell init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure.CAN_Prescaler = 4;
CAN_Init(CAN2, &CAN_InitStructure);

/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber=14;
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh=0;
CAN_FilterInitStructure.CAN_FilterIdLow=0;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(CAN2, &CAN_FilterInitStructure);

/* transmit */
TxMessage.StdId = 0x321;
  TxMessage.ExtId = 0x01;
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;
  TxMessage.DLC = 1;
}
。。
void NVIC_Configuration(void)
{   
   NVIC_InitTypeDef NVIC_InitStructure;
  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
    NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;////
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);   
}
。。
void CAN2_RX0_IRQHandler(void)
{
//我在这里放个断点,用另一个开发板发送CAN数据,进不了中断。另一个发送的是一定没问题的
     CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);

//
}
沙发
359927814|  楼主 | 2011-9-27 09:42 | 只看该作者
自己顶一下

使用特权

评论回复
板凳
359927814|  楼主 | 2011-9-27 10:11 | 只看该作者
对了,我在Main.c中开了中断了,CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);

使用特权

评论回复
地板
dami| | 2011-9-27 11:26 | 只看该作者
如果能发。并且看到正确数据,硬件是没问题的了。配置哪里不对?过滤全关了试试。还是其他的?
应该就是初始化,然后是中断打开就可以用了。

使用特权

评论回复
5
mcuatmel| | 2011-9-27 11:33 | 只看该作者
建议用例程跑下试试看是否好用,验证下你的硬件是否有问题。
如果是自己的CAN2给CAN1发数可能会不好用,当时我用STR731时遇过这问题,后来没去管它。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

13

帖子

1

粉丝