關於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