打印
[STM32F4]

一个关于STM32F4系列的CAN2接收中断的问题

[复制链接]
5633|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
99——99|  楼主 | 2017-4-22 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用STM32F429的CAN2时,无法进入接收中断,发现配置都正确,却进不到接收中断.
CAN2改到CAN1时接收没有问题,而且can2用的时候CAN1是配置好的(先开CAN1再开CAN2)
可就是进入不了中断
沙发
99——99|  楼主 | 2017-4-22 22:43 | 只看该作者
楼下附上自己配置的过程
void CAN2_Init(u8 NvicPP,u8 NvicSP)
{
        GPIO_InitTypeDef gpio;
        CAN_InitTypeDef can;
        CAN_FilterInitTypeDef filter;
        NVIC_InitTypeDef                  nvic;
       
        /*时钟使能*/
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);                                        //使能GPIOB时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2,  ENABLE);                                        //使能CAN2时钟
       
        /*IO初始化*/
        gpio.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13;                                                                 //B12,B13
        gpio.GPIO_Mode = GPIO_Mode_AF;                                                                                         //复用模式
        gpio.GPIO_OType = GPIO_OType_PP;                                                                                //推挽输出
        gpio.GPIO_PuPd = GPIO_PuPd_UP;                                                                                        //上拉
        gpio.GPIO_Speed = GPIO_Speed_100MHz;                                                                        //100MHz
        GPIO_Init(GPIOB,&gpio);
       
        /*CAN的RX和TX复用*/
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_CAN2);                                        //PB12 复用为 CAN2
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_CAN2);                                        //PB13 复用为 CAN2
       
        /*CAN模式设置*/
        can.CAN_TTCM = DISABLE;                                                                                                  //时间触发的通信模式关闭
        can.CAN_ABOM = DISABLE;                                                                                                        //自动的总线关闭管理失能
        can.CAN_AWUM = DISABLE;                                                                                                        //自动唤醒模式关闭
        can.CAN_NART = DISABLE;                                                                                                        //禁止自动发送
        can.CAN_RFLM = DISABLE;                                                                                                        //禁止接受FIFO锁定
        can.CAN_TXFP = ENABLE;                                                                                                        //发送的优先级完全由时间顺序来确定
        can.CAN_Mode = CAN_Mode_Normal;                                         //普通模式
       
        /*波特率设置(bund = 42/(1+9+4)/3) = 1Mhz*/
        can.CAN_SJW  = CAN_SJW_1tq;                                                                                                //再同步补偿宽度为1
    can.CAN_BS1  = CAN_BS1_9tq;                                                                                                //时间段1长度为9
    can.CAN_BS2  = CAN_BS2_4tq;                                                                                                //时间段2长度为4
    can.CAN_Prescaler = 3;                                                                                                        //分频系数为3
        CAN_Init(CAN2,&can);
       
        filter.CAN_FilterNumber=1;                                                                                                 //过滤器14
        filter.CAN_FilterMode=CAN_FilterMode_IdMask;
        filter.CAN_FilterScale=CAN_FilterScale_32bit;                                                        //32位
        filter.CAN_FilterIdHigh=0x0000;                                                                                        //32位ID
        filter.CAN_FilterIdLow=0x0000;                                                                                       
        filter.CAN_FilterMaskIdHigh=0x0000;                                                                               
        filter.CAN_FilterMaskIdLow=0x0000;                                                                                //32位全为不必匹配
        filter.CAN_FilterFIFOAssignment=CAN_Filter_FIFO1;                                                //过滤器连FIFO0
        filter.CAN_FilterActivation=ENABLE;                                                                         //激活过滤器14
        CAN_FilterInit(&filter);                                                                                                //滤波器初始化
       
        CAN_SlaveStartBank(1);
       
        /*CAN中断使能*/
    nvic.NVIC_IRQChannel = CAN2_RX1_IRQn;
    nvic.NVIC_IRQChannelPreemptionPriority = NvicPP;
    nvic.NVIC_IRQChannelSubPriority        = NvicSP;
    nvic.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&nvic);
       
  /*can receive and transmit config*/
    CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);
        CAN_ClearITPendingBit(CAN2, CAN_IT_FMP1);
}

使用特权

评论回复
板凳
tarzar| | 2017-8-24 17:32 | 只看该作者
楼主,后面是什么原因进不了中断啊?

使用特权

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

本版积分规则

2

主题

10

帖子

0

粉丝