Skip to main content
lizheng887
Associate II
October 10, 2015
Question

FlexCAN not work

  • October 10, 2015
  • 3 replies
  • 883 views
Posted on October 10, 2015 at 09:57

Hi,

I am testing SPC560P50L5 with spc5_studio, the built-in example for FlexCAN is loopback test. When I disable loopback and enable supervisor mode, there is nothing on the CAN_TXD pin. I do not know the problem, and I need your help.

Is there any good examples(FlexCAN) for me?

thanks.
    This topic has been closed for replies.

    3 replies

    Erwan YVIN
    ST Technical Moderator
    October 12, 2015
    Posted on October 12, 2015 at 17:52

     Hello Michael ,

    the built-in example is using the Loopback mode.

    if you are not using this loopback mode. 

    Configure correctly your pin (Cf reference Manual)

    and you have to take care about TX Mailbox , RX Mailbox and your RX ID.

    Best regards

                       Erwan

    In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.
    lizheng887
    Associate II
    October 13, 2015
    Posted on October 13, 2015 at 09:55

    Hi Erwan,

    I configured the Flex_CAN0 PIN: TXD(B[0]) and RXD(B[1]), Supervisor mode. MB 8~31 are set to be TX mailbox.

    But after I set the code field 0xc for transmission once, I read the code field back is still 0xc, and noting on the TXD pin.

    I need your further help, thanks.

    The transmission function is as below:

    canmsg_t can_lld_transmit(CANDriver *canp,

                          canmbx_t mailbox,

                          const CANTxFrame *ctfp) {

      CAN_TxMailBox_TypeDef *tmbp = NULL;

      uint8_t mbid = 0;

      /*check if mailbox is non empty */

      if (!can_lld_is_tx_empty(canp,mailbox)){

     return CAN_MSG_WAIT;

      }

      irqIsrDisable();

      /* Pointer to a free transmission mailbox.*/

      if (mailbox == CAN_ANY_MAILBOX) {

    #if SPC5_CAN_USE_FLEXCAN0

        if(&CAND1 == canp) {

          for (mbid = 0; mbid < CAN_TX_MAILBOXES; mbid++) {

            if ((canp->flexcan->BUF[mbid + CAN_RX_MAILBOXES].CS.B.CODE & 8U) == 1) {

              tmbp = (CAN_TxMailBox_TypeDef *)&canp->flexcan->BUF[mbid + CAN_RX_MAILBOXES];

              break;

            }

          }

        }

    #endif

      }

      else {

        tmbp = (CAN_TxMailBox_TypeDef *)&canp->flexcan->BUF[mailbox + CAN_RX_MAILBOXES -1];

      }

      /* Preparing the message.*/

      if (ctfp->IDE) {

        tmbp->CS.B.IDE = 1U;

        tmbp->CS.B.RTR = 0U;

        tmbp->ID.R = ctfp->EID;

      }

      else {

        tmbp->CS.B.IDE = 0U;

        tmbp->CS.B.RTR = 0U;

        tmbp->ID.R = ctfp->SID << 18;

      }

      tmbp->CS.B.LENGTH = ctfp->LENGTH;

      tmbp->DATA[0] = ctfp->data32[0];

      tmbp->DATA[1] = ctfp->data32[1];

      tmbp->CS.B.SRR = 1;

      tmbp->CS.B.CODE = 0x0C;

      

      irqIsrEnable();

      

      return CAN_MSG_OK;

    }

    Erwan YVIN
    ST Technical Moderator
    October 15, 2015
    Posted on October 15, 2015 at 17:20

    Hello Michael ,

    Could you send me your Test application ?

    Could you confirm me your SPC5Studio version ?

    you should be on 3.7.0 version.

                Best Regards

                            Erwan

    In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.