OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4366|回复: 0

请教大家一下,我用HAL配置的CAN,程序不进回调函数,不知道怎么回事

[复制链接]

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
发表于 2023-4-27 11:45:10 | 显示全部楼层 |阅读模式
20金钱
请教大家一下,我用HAL配置的CAN,程序不进回调函数,这是HAL库CAN程序
  1. void MX_CAN_Init(void)
  2. {
  3.   hcan1.Instance = CAN1;
  4.   hcan1.Init.Prescaler = 8;
  5.   hcan1.Init.Mode = CAN_MODE_NORMAL;
  6.   hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
  7.   hcan1.Init.TimeSeg1 = CAN_BS1_4TQ;
  8.   hcan1.Init.TimeSeg2 = CAN_BS2_4TQ;
  9.   hcan1.Init.TimeTriggeredMode = DISABLE;
  10.   hcan1.Init.AutoBusOff = ENABLE;
  11.   hcan1.Init.AutoWakeUp = DISABLE;
  12.   hcan1.Init.AutoRetransmission = ENABLE;
  13.   hcan1.Init.ReceiveFifoLocked = DISABLE;
  14.   hcan1.Init.TransmitFifoPriority = DISABLE;
  15.   if (HAL_CAN_Init(&hcan1) != HAL_OK)
  16.   {
  17.     Error_Handler();
  18.   }

  19. }
复制代码
  1. HAL_StatusTypeDef CAN_Filter_Init(CAN_HandleTypeDef *h_can)
  2. {
  3.   CAN_FilterTypeDef sFilterConfig;

  4.   sFilterConfig.FilterBank = 2;   //chenal 0
  5.   sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;   //????????
  6.   sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT;  //????????32?
  7.   sFilterConfig.FilterIdHigh = 0xB000;  //??????   
  8.   sFilterConfig.FilterIdLow = 0xC400;   //??????   
  9.   //MASK bit 0 means don't care,bit 0 means match
  10.   sFilterConfig.FilterMaskIdHigh = 0xFE1F;   //?????  //?????????????,????????????????
  11.   sFilterConfig.FilterMaskIdLow = 0xFE1F;    //?????                                 
  12.   sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0; //FIFO0????FIFO1????????,?????????????FIFO0?
  13.   sFilterConfig.FilterActivation = CAN_FILTER_ENABLE;   //enable filter
  14.   sFilterConfig.SlaveStartFilterBank = 0;    //???can????????,????CAN??,????????
  15.    HAL_CAN_ConfigFilter(h_can, &sFilterConfig);
  16.         HAL_CAN_ActivateNotification(h_can, CAN_IT_RX_FIFO0_MSG_PENDING);

  17. return HAL_OK;
  18. }
复制代码
  1. int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   MX_GPIO_Init();
  6.   
  7.   MX_USART1_UART_Init();
  8.         HAL_CAN_MspInit(&hcan1);
  9.         MX_CAN_Init();
  10.         CAN_Filter_Init(&hcan1);   
复制代码
  1. void  HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *h_can)
  2. {
  3.         printf("111111");
  4. if(h_can->Instance==CAN1)
  5.         {
  6.                 HAL_CAN_GetRxMessage(h_can, CAN_RX_FIFO0, &RxMessage, RxData) ;
  7.         printf(" %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X\r\n",RxData[0], RxData[1], RxData[2], RxData[3],RxData[4], RxData[5], RxData[6], RxData[7]);       
  8.         }

  9. }
复制代码
这是HAL配置
5ecfa535e9b2247838727892b7f244b.png 7265824db6630a588e458a619dcd2b3.png

不知道为何,就是不进去

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 09:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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