|
发表于 2020-9-1 09:21:55
|
显示全部楼层
- static uint8_t MX_FDCAN_Init(FDCAN_HandleTypeDef *hfdcan)
- {
- HAL_FDCAN_DeInit(hfdcan); //先清除以前的设置
-
- if(hfdcan == &fdcan1)
- {
- hfdcan->Instance=FDCAN1;
-
- hfdcan->Init.FrameFormat=FDCAN_FRAME_CLASSIC; //传统模式
- hfdcan->Init.Mode=FDCAN_MODE_NORMAL;
- hfdcan->Init.AutoRetransmission=DISABLE; //关闭自动重传!传统模式下一定要关闭!!!
- hfdcan->Init.TransmitPause=DISABLE; //关闭传输暂停
- hfdcan->Init.ProtocolException=DISABLE; //关闭协议异常处理
- hfdcan->Init.NominalPrescaler=presc; //分频系数
- hfdcan->Init.NominalSyncJumpWidth=ntsjw; //重新同步跳跃宽度
- hfdcan->Init.NominalTimeSeg1=ntsg1; //tsg1范围:2~256
- hfdcan->Init.NominalTimeSeg2=ntsg2; //tsg2范围:2~128
- hfdcan->Init.MessageRAMOffset=0; //信息RAM偏移
- hfdcan->Init.StdFiltersNbr=0; //标准信息ID滤波器编号
- hfdcan->Init.ExtFiltersNbr=0; //扩展信息ID滤波器编号
- hfdcan->Init.RxFifo0ElmtsNbr=1; //接收FIFO0元素编号
- hfdcan->Init.RxFifo0ElmtSize=FDCAN_DATA_BYTES_8; //接收FIFO0元素大小:8字节
- hfdcan->Init.RxBuffersNbr=0; //接收缓冲编号
- hfdcan->Init.TxEventsNbr=0; //发送事件编号
- hfdcan->Init.TxBuffersNbr=0; //发送缓冲编号
- hfdcan->Init.TxFifoQueueElmtsNbr=1; //发送FIFO序列元素编号
- hfdcan->Init.TxFifoQueueMode=FDCAN_TX_FIFO_OPERATION; //发送FIFO序列模式
- hfdcan->Init.TxElmtSize=FDCAN_DATA_BYTES_8; //发送大小:8字节
- if(HAL_FDCAN_Init(hfdcan)!=HAL_OK) return 1; //初始化FDCAN
-
- FDCAN1_RXFilter.IdType=FDCAN_STANDARD_ID; //标准ID
- FDCAN1_RXFilter.FilterIndex=14; //滤波器索引
- FDCAN1_RXFilter.FilterType=FDCAN_FILTER_MASK; //滤波器类型
- FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0; //过滤器0关联到FIFO0
- FDCAN1_RXFilter.FilterID1=0x0000; //32位ID
- FDCAN1_RXFilter.FilterID2=0x0000; //如果FDCAN配置为传统模式的话,这里是32位掩码
- if(HAL_FDCAN_ConfigFilter(&fdcan1,&FDCAN1_RXFilter)!=HAL_OK) return 2;//滤波器初始化
- // HAL_FDCAN_ConfigGlobalFilter(hfdcan, FDCAN_ACCEPT_IN_RX_FIFO0, FDCAN_ACCEPT_IN_RX_FIFO0, ENABLE, ENABLE);
- HAL_FDCAN_Start(&fdcan1); //开启FDCAN
- HAL_FDCAN_ActivateNotification(&fdcan1,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
- return 0;
-
- }
-
- else if(hfdcan == &fdcan2)
- {
- hfdcan->Instance=FDCAN2;
- hfdcan->Init.FrameFormat=FDCAN_FRAME_CLASSIC; //传统模式
- hfdcan->Init.Mode=FDCAN_MODE_NORMAL;
- hfdcan->Init.AutoRetransmission=DISABLE; //关闭自动重传!传统模式下一定要关闭!!!
- hfdcan->Init.TransmitPause=DISABLE; //关闭传输暂停
- hfdcan->Init.ProtocolException=DISABLE; //关闭协议异常处理
- hfdcan->Init.NominalPrescaler=presc; //分频系数
- hfdcan->Init.NominalSyncJumpWidth=ntsjw; //重新同步跳跃宽度
- hfdcan->Init.NominalTimeSeg1=ntsg1; //tsg1范围:2~256
- hfdcan->Init.NominalTimeSeg2=ntsg2; //tsg2范围:2~128
- hfdcan->Init.MessageRAMOffset=0; //信息RAM偏移
- hfdcan->Init.StdFiltersNbr=0; //标准信息ID滤波器编号
- hfdcan->Init.ExtFiltersNbr=0; //扩展信息ID滤波器编号
- hfdcan->Init.RxFifo0ElmtsNbr=1; //接收FIFO0元素编号
- hfdcan->Init.RxFifo0ElmtSize=FDCAN_DATA_BYTES_8; //接收FIFO0元素大小:8字节
- hfdcan->Init.RxBuffersNbr=0; //接收缓冲编号
- hfdcan->Init.TxEventsNbr=0; //发送事件编号
- hfdcan->Init.TxBuffersNbr=0; //发送缓冲编号
- hfdcan->Init.TxFifoQueueElmtsNbr=1; //发送FIFO序列元素编号
- hfdcan->Init.TxFifoQueueMode=FDCAN_TX_FIFO_OPERATION; //发送FIFO序列模式
- hfdcan->Init.TxElmtSize=FDCAN_DATA_BYTES_8; //发送大小:8字节
- if(HAL_FDCAN_Init(hfdcan)!=HAL_OK) return 1; //初始化FDCAN
-
- FDCAN2_RXFilter.IdType=FDCAN_STANDARD_ID; //标准ID
- FDCAN2_RXFilter.FilterIndex=0; //滤波器索引
- FDCAN2_RXFilter.FilterType=FDCAN_FILTER_MASK; //滤波器类型
- FDCAN2_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0; //过滤器0关联到FIFO0
- FDCAN2_RXFilter.FilterID1=0x0000; //32位ID
- FDCAN2_RXFilter.FilterID2=0x0000; //如果FDCAN配置为传统模式的话,这里是32位掩码
- if(HAL_FDCAN_ConfigFilter(&fdcan2,&FDCAN2_RXFilter)!=HAL_OK) return 2;//滤波器初始化
- // HAL_FDCAN_ConfigGlobalFilter(hfdcan, FDCAN_ACCEPT_IN_RX_FIFO0, FDCAN_ACCEPT_IN_RX_FIFO0, ENABLE, ENABLE);
- HAL_FDCAN_Start(&fdcan2); //开启FDCAN
- HAL_FDCAN_ActivateNotification(&fdcan2,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
-
- return 0;
- }
-
- return 0;
- }
复制代码 |
|