OpenEdv-开源电子网

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

关于H750CAN通信问题 FDCAN2能正常工作 FDCAN1不行

[复制链接]

48

主题

157

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
金钱
240
注册时间
2018-4-21
在线时间
105 小时
发表于 2022-11-26 01:44:25 | 显示全部楼层 |阅读模式
10金钱
第一次调CAN协议,调试H7的两个CAN接口,FDCAN1因为缺料问题,目前FDCAN2的1050还没焊上去 就用逻辑分析仪直接接MCU的FDCAN的TXRX引脚目前FDCAN2没有问题 发送接收都正常,但是CAN1发送47次以后FIFO满了报错,用逻辑分析仪看只有TX引脚有下降沿,FDCAN2的引脚数据正常
CAN1和CAN2配置一样,消息RAM大小1:1平分
我把FDCAN2屏蔽掉,只留FDCAN1,问题依旧
想问下大家,只有TXRX两个引脚是不是不能正常通信啊,是的话我就继续等料了
下面是代码
static void MX_FDCAN1_Init(void)
{

  hfdcan1.Instance = FDCAN1;
  hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
  hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
  hfdcan1.Init.AutoRetransmission = DISABLE;
  hfdcan1.Init.TransmitPause = DISABLE;
  hfdcan1.Init.ProtocolException = ENABLE;
  hfdcan1.Init.NominalPrescaler = 40;
  hfdcan1.Init.NominalSyncJumpWidth = 1;
  hfdcan1.Init.NominalTimeSeg1 = 13;
  hfdcan1.Init.NominalTimeSeg2 = 2;
  hfdcan1.Init.DataPrescaler = 6;
  hfdcan1.Init.DataSyncJumpWidth = 1;
  hfdcan1.Init.DataTimeSeg1 = 13;
  hfdcan1.Init.DataTimeSeg2 = 2;
  hfdcan1.Init.MessageRAMOffset = 0;
  hfdcan1.Init.StdFiltersNbr = 0;
  hfdcan1.Init.ExtFiltersNbr = 0;
  hfdcan1.Init.RxFifo0ElmtsNbr = 32;
  hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
  hfdcan1.Init.RxFifo1ElmtsNbr = 0;
  hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
  hfdcan1.Init.RxBuffersNbr = 0;
  hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
  hfdcan1.Init.TxEventsNbr = 16;
  hfdcan1.Init.TxBuffersNbr = 16;
  hfdcan1.Init.TxFifoQueueElmtsNbr = 32;
  hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_QUEUE_OPERATION;
  hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
  if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN FDCAN1_Init 2 */

  /* Start the FDCAN module */
  if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }

  if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0x0) != HAL_OK)
  {
    /* Notification Error */
    Error_Handler();
  }
  if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_TX_COMPLETE | FDCAN_IT_TX_FIFO_EMPTY, 0xFFFFFFFF) != HAL_OK)
  {
          Error_Handler();
  }

}
HAL_StatusTypeDef fdcan1_tx(unsigned char *pData, unsigned int len)
{
  FDCAN_TxHeaderTypeDef TxHeader = {0};
       
  /* 配置发送参数 */
  TxHeader.Identifier = 100;                              
  TxHeader.IdType = FDCAN_STANDARD_ID;                      
  TxHeader.TxFrameType = FDCAN_DATA_FRAME;               
  TxHeader.DataLength = len<<16;      
  TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
  TxHeader.BitRateSwitch = FDCAN_BRS_OFF;         
  TxHeader.FDFormat = FDCAN_CLASSIC_CAN;            
  TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
  TxHeader.MessageMarker = 12;   
  if(HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, pData)!=HAL_OK)
  {
    return HAL_ERROR;
  }

  return HAL_OK;

}

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 23:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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