野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13845|回复: 5

can接收中断无法进入

[复制链接]
发表于 2016-1-12 09:53:09 | 显示全部楼层 |阅读模式
本帖最后由 952699805 于 2016-1-12 11:17 编辑

仿真加断点,无法进入中断,到这去了,

QQ截图20160112095302.jpg
回复

使用道具 举报

发表于 2016-1-12 13:38:19 | 显示全部楼层
没有写中断服务函数,或者函数名写错了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-12 13:54:30 | 显示全部楼层
flyleaf 发表于 2016-1-12 13:38
没有写中断服务函数,或者函数名写错了

#include "stm32f10x.h"
#include "system.h"
#include "delay.h"
#include "can.h"
uint32_t TXId;

void RCC_Configuration(void)
{
        SystemInit();       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA
                           |RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
                           |RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE
                                                               |RCC_APB2Periph_ADC1  | RCC_APB2Periph_AFIO
                           |RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO
                                 | RCC_APB2Periph_AFIO, ENABLE );
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4
                           |RCC_APB1Periph_USART3|RCC_APB1Periph_TIM2       
                           | RCC_APB1Periph_CAN1, ENABLE );

}


void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;

        #ifdef  VECT_TAB_RAM  
          /* Set the Vector Table base location at 0x20000000 */
          NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
        #else  /* VECT_TAB_FLASH  */
          /* Set the Vector Table base location at 0x08000000 */
          NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
        #endif
       
                
                /* Configure one bit for preemption priority */
          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
          NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;          
         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                  
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                          
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
       uint32_t flag = 0xff;
      CanTxMsg TxMessage;                          
      CanRxMsg RxMessage;        


int main(void)
{       
          TXId = 0x0002;
       
          RCC_Configuration();
          NVIC_Configuration();       
          CAN_Config();          
          GPIO_LED_Configuration();
       
         CAN_SetMsg();
          for(;;)
          {                       
                    CAN_Transmit(CAN1, &TxMessage);       
                    delay_ms(500);       

        }
}

void USB_LP_CAN1_RX0_IRQnHandler(void)
{       
     CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
           if((RxMessage.ExtId==0x0002)  &&           
             (RxMessage.IDE==CAN_ID_EXT) &&
             (RxMessage.DLC ==2 ))   
        {
            LED1_ON;                                                 
            delay_ms(500);
             LED1_ON;                                                       
        }
        else
        {
            LED1_OFF;                                        
        }
}

static void CAN_GPIO_Config(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;
          

          GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
       
        /* Configure CAN pin: RX PB8*/                                                                                  
         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                  
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOB, &GPIO_InitStructure);

        /* Configure CAN pin: TX PB9 */                                                                                      
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                     
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
          GPIO_Init(GPIOB, &GPIO_InitStructure);
       
}


static void CAN_Mode_Config(void)
{
           CAN_InitTypeDef        CAN_InitStructure;

          CAN_DeInit(CAN1);
          CAN_StructInit(&CAN_InitStructure);

    CAN_InitStructure.CAN_TTCM=DISABLE;                       
    CAN_InitStructure.CAN_ABOM=ENABLE;                       
    CAN_InitStructure.CAN_AWUM=ENABLE;                         
    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_5tq;                 
    CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;               
    CAN_InitStructure.CAN_Prescaler =4;                 
   CAN_Init(CAN1, &CAN_InitStructure);
}


static void CAN_Filter_Config(void)
{
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;
       
          CAN_FilterInitStructure.CAN_FilterNumber=0;                                               
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;       
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;       

    CAN_FilterInitStructure.CAN_FilterIdHigh= (((u32)TXId<<3)&0xFFFF0000)>>16;                               
    CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)TXId<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;

    CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;               
    CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFF;                       
       
          CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                       
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                       
          CAN_FilterInit(&CAN_FilterInitStructure);

          CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
}

void CAN_Config(void)
{
  CAN_GPIO_Config();

  CAN_Mode_Config();
  CAN_Filter_Config();   
}

void CAN_SetMsg(void)
{          
                                                 
     TxMessage.ExtId=TXId;                                       
      TxMessage.IDE=CAN_ID_EXT;                               
      TxMessage.RTR=CAN_RTR_DATA;                               
       TxMessage.DLC=2;                                               
        TxMessage.Data[0]=0x04;
        TxMessage.Data[1]=0x04;


}

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-12 13:58:28 | 显示全部楼层
flyleaf 发表于 2016-1-12 13:38
没有写中断服务函数,或者函数名写错了

我是只用了一块板子,就测一下发送和接收,接收用中断来看,当进入中断,就表示接收了。我用的是SN65HVD230 CAN芯片
回复 支持 反对

使用道具 举报

发表于 2016-1-13 09:26:03 | 显示全部楼层
952699805 发表于 2016-1-12 13:58
我是只用了一块板子,就测一下发送和接收,接收用中断来看,当进入中断,就表示接收了。我用的是SN65HVD2 ...

那你的中断服务函数呢?参考下我们的例程吧stm32f103_it.c文件里有函数的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-13 11:15:44 | 显示全部楼层
flyleaf 发表于 2016-1-13 09:26
那你的中断服务函数呢?参考下我们的例程吧stm32f103_it.c文件里有函数的

void USB_LP_CAN1_RX0_IRQnHandler(void)
{        
     CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
           if((RxMessage.ExtId==0x0002)  &&           
             (RxMessage.IDE==CAN_ID_EXT) &&
             (RxMessage.DLC ==2 ))   
        {
            LED1_ON;                                                
        }
        else
        {
            LED1_OFF;                                         
        }
}
这不是中断服务函数吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 15:42 , Processed in 0.047884 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表