zfe001

    1. 碧霄长博 发表于 2018-4-18 19:36 增减硬件上的120欧电阻,一般接一两个就够了
      我用的两个63欧电阻串联,目前loopback模式下已经可以发送了,但是normal模式下还是不能发送,目前在找解决方案
    2. wudayongnb 发表于 2018-4-13 18:44 HAL_CAN_Transmit(&hcan,100); 这个函数内部是如何实现的
      下面是HAL_CAN_Transmit函数的定义。 我现在已经可以使用Loopback模式发送了,但是normal模式还是不能发送。 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) {   uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX;   uint32_t tickstart = 0U;   /* Check the parameters */   assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE));   assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR));   assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC));   if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \      ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \      ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2))   {     /* Process locked */     __HAL_LOCK(hcan);     /* Change CAN state */     switch(hcan->State)     {       case(HAL_CAN_STATE_BUSY_RX0):           hcan->State = HAL_CAN_STATE_BUSY_TX_RX0;           break;       case(HAL_CAN_STATE_BUSY_RX1):           hcan->State = HAL_CAN_STATE_BUSY_TX_RX1;           break;       case(HAL_CAN_STATE_BUSY_RX0_RX1):           hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1;           break;       default: /* HAL_CAN_STATE_READY */           hcan->State = HAL_CAN_STATE_BUSY_TX;           break;     }     /* Select one empty transmit mailbox */     if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0))     {       transmitmailbox = CAN_TXMAILBOX_0;     }     else if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1))     {       transmitmailbox = CAN_TXMAILBOX_1;     }     else     {       transmitmailbox = CAN_TXMAILBOX_2;     }     /* Set up the Id */     hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;     if (hcan->pTxMsg->IDE == CAN_ID_STD)     {       assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId));         hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId pTxMsg->RTR);     }     else     {       assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId));       hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId pTxMsg->IDE | \                                                            hcan->pTxMsg->RTR);     }         /* Set up the DLC */     hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU;     hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= 0xFFFFFFF0U;     hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC;     /* Set up the data field */     WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, ((uint32_t)hcan->pTxMsg->Data[3] pTxMsg->Data[2] pTxMsg->Data[1] pTxMsg->Data[0] Instance->sTxMailBox[transmitmailbox].TDHR, ((uint32_t)hcan->pTxMsg->Data[7] pTxMsg->Data[6] pTxMsg->Data[5] pTxMsg->Data[4] Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ);        /* Get tick */     tickstart = HAL_GetTick();           /* Check End of transmission flag */     while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox)))     {       /* Check for the Timeout */       if(Timeout != HAL_MAX_DELAY)       {         if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout))         {           hcan->State = HAL_CAN_STATE_TIMEOUT;           /* Cancel transmission */           __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox);           /* Process unlocked */           __HAL_UNLOCK(hcan);           return HAL_TIMEOUT;         }       }     }     /* Change CAN state */     switch(hcan->State)     {       case(HAL_CAN_STATE_BUSY_TX_RX0):           hcan->State = HAL_CAN_STATE_BUSY_RX0;           break;       case(HAL_CAN_STATE_BUSY_TX_RX1):           hcan->State = HAL_CAN_STATE_BUSY_RX1;           break;       case(HAL_CAN_STATE_BUSY_TX_RX0_RX1):           hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1;           break;       default: /* HAL_CAN_STATE_BUSY_TX */           hcan->State = HAL_CAN_STATE_READY;           break;     }     /* Process unlocked */     __HAL_UNLOCK(hcan);         /* Return function status */     return HAL_OK;   }   else   {     /* Change CAN state */     hcan->State = HAL_CAN_STATE_ERROR;     /* Return function status */     return HAL_ERROR;   } }
    3. huo_hu 发表于 2018-4-11 13:15 你再查查硬件,软件这样就可以的
      谢谢!
    4. huo_hu 发表于 2018-4-10 21:06 cube生成的采样边沿调整一下
      感谢回复!我找到了您之前调试can修改边沿的帖子。我这边修改后,Tx口还是一直输出高电平。请问您当时是如何发现是边沿出的问题呢?我想用您的方法试试。下图是我修改后的边沿设置

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:4

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言