你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F407VET6两个CAN同时工作

[复制链接]
STMCU小助手 发布时间:2022-4-23 16:44
一、注意点
两个CAN接口同时工作主要是初始化的时候必须一起使能时钟

二、代码分享

  1. u8 can_init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
  2. {
  3.         u16 std_id_1 =0x123;  

  4.         u16 std_id_2 =0x123;  

  5.         GPIO_InitTypeDef GPIO_InitStructure;
  6.         CAN_InitTypeDef        CAN_InitStructure;
  7.         CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  8.         #if CAN1_RX0_INT_ENABLE
  9.         NVIC_InitTypeDef  NVIC_InitStructure;
  10.         #endif
  11.         //使能相关时钟
  12.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能PORTA时钟                                                                                                                    
  13.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能PORTA时钟           

  14.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟        
  15.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);//使能CAN1时钟        

  16.         //初始化GPIO
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  19.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  20.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  21.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  22.         GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA11,PA12

  23.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6;
  24.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  25.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  27.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  28.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PA12,PA13

  29.         //引脚复用映射配置
  30.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1); //GPIOA11复用为CAN1
  31.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1); //GPIOA12复用为CAN1

  32.         GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_CAN2); //GPIOA11复用为CAN2
  33.         GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_CAN2); //GPIOA12复用为CAN2
  34.         //CAN单元设置
  35.         CAN_InitStructure.CAN_TTCM=DISABLE;        //非时间触发通信模式   
  36.         CAN_InitStructure.CAN_ABOM=DISABLE;        //软件自动离线管理         
  37.         CAN_InitStructure.CAN_AWUM=DISABLE;//睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
  38.         CAN_InitStructure.CAN_NART=ENABLE;        //禁止报文自动传送
  39.         CAN_InitStructure.CAN_RFLM=DISABLE;        //报文不锁定,新的覆盖旧的  
  40.         CAN_InitStructure.CAN_TXFP=DISABLE;        //优先级由报文标识符决定
  41.         CAN_InitStructure.CAN_Mode= mode;         //模式设置
  42.         CAN_InitStructure.CAN_SJW=tsjw;        //重新同步跳跃宽度(Tsjw)为tsjw+1个时间单位 CAN_SJW_1tq~CAN_SJW_4tq
  43.         CAN_InitStructure.CAN_BS1=tbs1; //Tbs1范围CAN_BS1_1tq ~CAN_BS1_16tq
  44.         CAN_InitStructure.CAN_BS2=tbs2;//Tbs2范围CAN_BS2_1tq ~        CAN_BS2_8tq
  45.         CAN_InitStructure.CAN_Prescaler=brp;  //分频系数(Fdiv)为brp+1        
  46.         CAN_Init(CAN1, &CAN_InitStructure);   // 初始化CAN1         
  47.         CAN_Init(CAN2, &CAN_InitStructure);   // 初始化CAN2
  48.         //配置过滤器
  49.         CAN_FilterInitStructure.CAN_FilterNumber=0;          //过滤器0
  50.         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //屏蔽模式
  51.         CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
  52.         CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;32位ID
  53.         CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;         

  54.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
  55.         CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  56.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
  57.         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0
  58.         CAN_FilterInit(&CAN_FilterInitStructure);//滤波器初始化
  59.         /*---------------------------------------------------------------------------------------------------------------------------------*/               

  60.         CAN_FilterInitStructure.CAN_FilterNumber=14; //过滤器14
  61.         CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //屏蔽模式
  62.         CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32位
  63.         CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;32位ID
  64.         CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;

  65.         CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
  66.         CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  67.         CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
  68.         CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器0
  69.         CAN_FilterInit(&CAN_FilterInitStructure);  //CAN2

  70.         #if CAN1_RX0_INT_ENABLE

  71.         CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许.                    

  72.         NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
  73.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
  74.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次优先级为0
  75.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  76.         NVIC_Init(&NVIC_InitStructure);
  77.         #endif

  78.         #if CAN2_RX0_INT_ENABLE

  79.         CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许.                    

  80.         NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
  81.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
  82.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;            // 次优先级为0
  83.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  84.         NVIC_Init(&NVIC_InitStructure);
  85.         #endif
  86.         return 0;
  87. }
复制代码




收藏 评论0 发布时间:2022-4-23 16:44

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版