关于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用


STM32有2个3级深度的接收缓冲区:FIFO0和FIFO1,每个FIFO都可以存放3个完整的报文,它们完全由硬件来管理。如果是来自FIFO0的接收中断,则用CAN1_RX0_IRQn中断来处理。如果是来自FIFO1的接收中断,则用CAN1_RX1_IRQn中断来处理。在CAN的初始化配置过程中,用CAN_FilterFIFOAssignment来选择要使用FIFO。

这个fifo是在MX_CAN1_FilterInit函数里定义的,这个函数stm32cubemx不会自动生成,需要手动添加设置,这里

使用的CAN_RX_FIFO0,所以stm32cubemx需要配置中断为RX0
void MX_CAN1_FilterInit(void)
{
  CAN_FilterTypeDef  sFilterConfig;
	
  sFilterConfig.FilterBank = 0;
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
  sFilterConfig.FilterActivation = ENABLE;
  sFilterConfig.SlaveStartFilterBank = 14;

  if (HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK)
  {
    /* Filter configuration Error */
    Error_Handler();
  }
}

  

 

 配置时钟

1、打开can设备

 

 2、配置芯片时钟树

 

 3、3.1配置波特率为500Kb/s。计算方法:36M/6/(5+6+1)==500K

中断配置

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM