STM32F429未接收CAN消息

STM32F429未接收CAN消息,stm32,can-bus,stm32f4discovery,Stm32,Can Bus,Stm32f4discovery,我正在使用STM32F429微控制器,需要在CAN2和PCAN视图之间实现CAN总线通信。我能够从CAN2传输消息,但无法接收任何消息。我正在微控制器中使用TJA1041A CAN transreceiver。问题是,在调试期间,我的CAN总线已正确初始化,但未转到虽然我已经初始化了FIFO0,但接收命令仍然有效。因此,我正在编写该程序以供进一步参考。我使用了STM32 HAL Cube进行编程 /** *********************************************

我正在使用STM32F429微控制器,需要在CAN2和PCAN视图之间实现CAN总线通信。我能够从CAN2传输消息,但无法接收任何消息。我正在微控制器中使用TJA1041A CAN transreceiver。问题是,在调试期间,我的CAN总线已正确初始化,但未转到虽然我已经初始化了FIFO0,但接收命令仍然有效。因此,我正在编写该程序以供进一步参考。我使用了STM32 HAL Cube进行编程

/**
******************************************************************************
*文件名:main.c
*日期:2014年12月5日09:43:55
*说明:主程序体
******************************************************************************
*
*版权所有(c)2014意法半导体
*
*以源代码和二进制形式重新分发和使用,无论是否修改,
*如果满足以下条件,则允许:
*   1. 源代码的重新分发必须保留上述版权声明,
*此条件列表和以下免责声明。
*   2. 以二进制形式重新分发必须复制上述版权声明,
*此条件列表和文档中的以下免责声明
*和/或分发时提供的其他材料。
*   3. 意法半导体的名字和贡献者的名字都没有
*可用于认可或推广源自本软件的产品
*未经事先书面许可。
*
*本软件由版权所有者和贡献者“按原样”提供
*以及任何明示或暗示的保证,包括但不限于
*对适销性和特定用途适用性的默示保证如下:
*否认。在任何情况下,版权持有人或贡献者均不承担任何责任
*对于任何直接、间接、附带、特殊、示范或后果
*损害赔偿(包括但不限于采购替代货物或
*服务;使用、数据或利润损失;或业务中断)
*根据任何责任理论,无论是在合同中,还是在严格责任中,
*或因使用而产生的侵权行为(包括疏忽或其他)
*即使被告知有可能发生此类损坏,也不得使用本软件。
*
******************************************************************************
*/
/*包括------------------------------------------------------------------*/
#包括“stm32f4xx_hal.h”
/*用户代码开始包括*/
/*用户代码端包括*/
/*私有变量---------------------------------------------------------*/
CAN_HandleTypeDef hcan1;
CAN_HandleTypeDef hcan2;
/*用户代码开始PV*/
/*用户代码结束PV*/
/*私有函数原型-----------------------------------------------*/
无效系统时钟配置(无效);
静态void MX_GPIO_Init(void);
静态void MX_CAN1_Init(void);
静态void MX_CAN2_Init(void);
/*用户代码开始PFP*/
/*用户代码端PFP*/
/*用户代码从0开始*/
/*用户代码结束0*/
内部主(空)
{
/*用户代码开始1*/
/*用户代码结束1*/
/*微控制器配置----------------------------------------------------------*/
/*重置所有外围设备,初始化闪存接口和Systick*/
HAL_Init();
/*配置系统时钟*/
SystemClock_Config();
/*初始化所有配置的外围设备*/
MX_GPIO_Init();
MX_CAN1_Init();
MX_CAN2_Init();
/*用户代码开始2*/
__GPIOD_CLK_ENABLE();
GPIO_InitTypeDef GPIO_Initpins;
GPIO_Initpins.Mode=GPIO_Mode_OUTPUT_PP;
GPIO_Initpins.Pin=GPIO_Pin_5 | GPIO_Pin_7;
GPIO_Initpins.Pull=GPIO_NOPULL;
HAL_GPIO_Init(GPIOD和GPIO_Initpins);
HAL_GPIO_WritePin(GPIOD、GPIO_管脚_5、GPIO_管脚_7、GPIO_管脚_套件);
/*用户代码结束2*/
/*用户代码开始3*/
/*无限循环*/
CanTxMsgTypeDef TxMess;
TxMess.StdId=0x123;
TxMess.DLC=0x0;
TxMess.Data[0]=0x12;
TxMess.IDE=0;
TxMess.RTR=0;
hcan2.pTxMsg=&TxMess;
HAL_可_传输(&hcan2,50);
HAL_延迟(500);
/*用户代码结束2*/
CanRxMsgTypeDef RMess;
RMess.FIFONumber=CAN\u FIFO1;
RMess.FMI=14;
RMess.StdId=0x541;
RMess.DLC=0;
RMess.RTR=0;
RMess.IDE=CAN\u ID\u标准;
hcan2.pRxMsg=&RMess;
HAL_能接收到它(&hcan2,CAN_FIFO1);
/*用户代码开始3*/
/*无限循环*/
而(1)
{
HAL_CAN_接收(&hcan2,CAN_FIFO1,0);
}
/*用户代码结束3*/
}
/**系统时钟配置
*/
无效系统时钟配置(无效)
{
RCC_osinittypedef RCC_osinitstruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
__PWR_CLK_ENABLE();
__HAL_PWR_电压缩放_配置(PWR_调节器_电压缩放3);
RCC_OscInitStruct.OscillatorType=RCC_OscillatorType_HSE;
RCC_OscInitStruct.HSEState=RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState=RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC\u ClkInitStruct.ClockType=RCC\u ClockType\u SYSCLK;
RCC_-ClkInitStruct.SYSCLKSource=RCC_-SYSCLKSource\u HSE;
RCC\u ClkInitStruct.AHBCLKDivider=RCC\u SYSCLK\u DIV1;
RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;
HAL\u RCC\u时钟配置(&RCC\u时钟结构、闪存\u延迟\u 0);
}
/*CAN1初始化函数*/
void MX_CAN1_Init(void)
{
hcan1.Instance=CAN1;
hcan1.Init.Prescaler=16;
hcan1.Init.Mode=CAN_Mode_NORMAL;
hcan1.Init.SJW=CAN_SJW_1TQ;
hcan1.Init.BS1=CAN_BS1_1TQ;
hcan1.Init.BS2=CAN_BS2_1TQ;
hcan1.Init.TTCM=禁用;
hcan1.Init.ABOM=禁用;
hcan1.Init.AWUM=禁用;
hcan1.Init.NART=禁用;
hcan1.Init.RFLM=禁用;
hcan1.Init.TXFP=禁用;
HAL_CAN_Init(&hcan1);
/*CAN_过滤器ConfTypeDef CAN_过滤器;
CAN_Filters.BankNumber=0;
CAN_Filters.FilterActivation=启用;
CAN_Filters.FilterFIFOAssignment=CAN_FIFO0;
CAN_Filters.FilterIdHigh=0x00;
能
CAN_Filters.BankNumber = 0;