完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求大佬看一下,FDCAN使用传统CAN模式,能发送数据,但是不能进入接收中断
代码配置了两处: void FDCAN1_Config(void){FDCAN_FilterTypeDef sFilterConfig;/ Configure Rx filter /sFilterConfig.IdType = FDCAN_STANDARD_ID;sFilterConfig.FilterIndex = 1;sFilterConfig.FilterType = FDCAN_FILTER_RANGE;sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;sFilterConfig.FilterID1 = 0x00000000;sFilterConfig.FilterID2 = 0x000007FF;if (HAL_FDCAN_ConfigFilter( hfdcan1, sFilterConfig) != HAL_OK){Error_Handler();} sFilterConfig.IdType = FDCAN_EXTENDED_ID;sFilterConfig.FilterIndex = 0;sFilterConfig.FilterType = FDCAN_FILTER_RANGE;sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;sFilterConfig.FilterID1 = 0x00000000;sFilterConfig.FilterID2 = 0x1FFFFFFF;if (HAL_FDCAN_ConfigFilter( hfdcan1, sFilterConfig) != HAL_OK){Error_Handler();} / Configure global filter:Filter all remote frames with STD and EXT IDReject non matching frames with STD ID and EXT ID /if (HAL_FDCAN_ConfigGlobalFilter( hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK){Error_Handler();} / Activate Rx FIFO 0 new message notification on both FDCAN instances /if (HAL_FDCAN_ActivateNotification( hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK){Error_Handler();} // if (HAL_FDCAN_ActivateNotification( hfdcan1, FDCAN_IT_BUS_OFF, 0) != HAL_OK)// {// Error_Handler();// } / Tx Config/TxHeader1.Identifier = 0x000000000; // CAN IDTxHeader1.IdType = FDCAN_STANDARD_ID; // 标准IDTxHeader1.TxFrameType = FDCAN_DATA_FRAME;TxHeader1.DataLength = FDCAN_DLC_BYTES_8;TxHeader1.ErrorStateIndicator = FDCAN_ESI_PASSIVE;TxHeader1.BitRateSwitch = FDCAN_BRS_OFF;TxHeader1.FDFormat = FDCAN_FD_CAN; // CANFDTxHeader1.TxEventFifoControl = FDCAN_NO_TX_EVENTS;TxHeader1.MessageMarker = 0; / Configure and enable Tx Delay Compensation, required for BRS mode.TdcOffset default recommended value: DataTimeSeg1 DataPrescalerTdcFilter default recommended value: 0 /HAL_FDCAN_ConfigTxDelayCompensation( hfdcan1, hfdcan1.Init.DataPrescaler hfdcan1.Init.DataTimeSeg1, 0);HAL_FDCAN_EnableTxDelayCompensation( hfdcan1); / Start the FDCAN module /if (HAL_FDCAN_Start( hfdcan1) != HAL_OK){Error_Handler();}} void FDCAN1_IT0_IRQHandler(void){/ USER CODE BEGIN FDCAN1_IT0_IRQn 0 / / USER CODE END FDCAN1_IT0_IRQn 0 /HAL_FDCAN_IRQHandler( hfdcan1);/ USER CODE BEGIN FDCAN1_IT0_IRQn 1 /HAL_FDCAN_GetRxMessage( hfdcan1, FDCAN_RX_FIFO0, RxHeader1, can1_rxbuf);/ USER CODE END FDCAN1_IT0_IRQn 1 /} |
|
相关推荐
1个回答
|
|
根据您提供的代码片段和问题描述,STM32G431KBU3不进入FDCAN接收中断的原因可能有以下几点:
1. 中断优先级设置不正确:请确保您已经正确设置了FDCAN中断的优先级。在STM32CubeMX中,您可以在中断配置部分设置优先级。确保FDCAN中断优先级高于其他可能影响的中断。 2. 中断使能未打开:请检查您的代码中是否已经使能了FDCAN接收中断。使用以下代码启用FDCAN接收中断: ```c __HAL_FDCAN_ENABLE_IT(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE); ``` 3. 过滤器配置问题:您提供的代码片段中,过滤器配置似乎没有问题。但是,请确保您的FDCAN初始化和过滤器配置在中断使能之前完成。 4. 硬件问题:如果以上步骤都正确无误,但问题仍然存在,可能是硬件连接问题。请检查FDCAN接口的硬件连接是否正确,确保没有断路或短路。 5. 中断服务函数未正确配置:请确保您的中断服务函数已经正确配置。例如,如果您使用的是HAL库,请确保您的中断服务函数如下所示: ```c void FDCAN1_IT0_IRQHandler(void) { HAL_FDCAN_IRQHandler(&hfdcan1); } ``` 6. 检查CAN总线上是否有数据:如果CAN总线上没有数据,您的接收中断将不会被触发。请确保您的CAN总线上有正确的数据传输。 综上所述,您需要检查中断优先级、中断使能、过滤器配置、硬件连接、中断服务函数以及CAN总线上的数据。希望这些信息能帮助您解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1718 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1600 浏览 1 评论
1040 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
716 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1654 浏览 2 评论
1905浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
699浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
548浏览 3评论
570浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
535浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 04:15 , Processed in 0.653933 second(s), Total 49, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号