⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_can.lst

📁 STM32利用正交编码器实现电机的控制
💻 LST
📖 第 1 页 / 共 4 页
字号:
    460          
    461              /* Request transmission */
    462              CAN->sTxMailBox[TransmitMailbox].TIR |= CAN_TMIDxR_TXRQ;
    463            }
    464          
    465            return TransmitMailbox;
    466          }
    467          
    468          /*******************************************************************************
    469          * Function Name  : CAN_TransmitStatus
    470          * Description    : Checks the transmission of a message.
    471          * Input          : TransmitMailbox: the number of the mailbox that is used for
    472          *                  transmission.
    473          * Output         : None.
    474          * Return         : CANTXOK if the CAN driver transmits the message, CANTXFAILED
    475          *                  in an other case.
    476          *******************************************************************************/
    477          u8 CAN_TransmitStatus(u8 TransmitMailbox)
    478          {
    479            /* RQCP, TXOK and TME bits */
    480            u32 State = 0;
    481          
    482            /* Check the parameters */
    483            assert(IS_CAN_TRANSMITMAILBOX(TransmitMailbox));
    484          
    485            switch (TransmitMailbox)
    486            {
    487              case (0): State |= ((CAN->TSR & CAN_TSR_RQCP0) << 2);
    488                State |= ((CAN->TSR & CAN_TSR_TXOK0) >> 0);
    489                State |= ((CAN->TSR & CAN_TSR_TME0) >> 26);
    490                break;
    491              case (1): State |= ((CAN->TSR & CAN_TSR_RQCP1) >> 6);
    492                State |= ((CAN->TSR & CAN_TSR_TXOK1) >> 8);
    493                State |= ((CAN->TSR & CAN_TSR_TME1) >> 27);
    494                break;
    495              case (2): State |= ((CAN->TSR & CAN_TSR_RQCP2) >> 14);
    496                State |= ((CAN->TSR & CAN_TSR_TXOK2) >> 16);
    497                State |= ((CAN->TSR & CAN_TSR_TME2) >> 28);
    498                break;
    499              default:
    500                State = CANTXFAILED;
    501                break;
    502            }
    503          
    504            switch (State)
    505            {
    506                /* transmit pending  */
    507              case (0x0): State = CANTXPENDING;
    508                break;
    509                /* transmit failed  */
    510              case (0x5): State = CANTXFAILED;
    511                break;
    512                /* transmit succedeed  */
    513              case (0x7): State = CANTXOK;
    514                break;
    515              default:
    516                State = CANTXFAILED;
    517                break;
    518            }
    519          
    520            return State;
    521          }
    522          
    523          /*******************************************************************************
    524          * Function Name  : CAN_CancelTransmit
    525          * Description    : Cancels a transmit request.
    526          * Input          : Mailbox number.
    527          * Output         : None.
    528          * Return         : None.
    529          *******************************************************************************/
    530          void CAN_CancelTransmit(u8 Mailbox)
    531          {
    532            /* Check the parameters */
    533            assert(IS_CAN_TRANSMITMAILBOX(Mailbox));
    534          
    535            /* abort transmission */
    536            switch (Mailbox)
    537            {
    538              case (0): CAN->TSR |= CAN_TSR_ABRQ0;
    539                break;
    540              case (1): CAN->TSR |= CAN_TSR_ABRQ1;
    541                break;
    542              case (2): CAN->TSR |= CAN_TSR_ABRQ2;
    543                break;
    544              default:
    545                break;
    546            }
    547          }
    548          
    549          /*******************************************************************************
    550          * Function Name  : CAN_FIFORelease
    551          * Description    : Releases a FIFO.
    552          * Input          : FIFONumber: FIFO to release, CAN_FIFO0 or CAN_FIFO1.
    553          * Output         : None.
    554          * Return         : None.
    555          *******************************************************************************/
    556          void CAN_FIFORelease(u8 FIFONumber)
    557          {
    558            /* Check the parameters */
    559            assert(IS_CAN_FIFO(FIFONumber));
    560          
    561            /* Release FIFO0 */
    562            if (FIFONumber == CAN_FIFO0)
    563            {
    564              CAN->RF0R = CAN_RF0R_RFOM0;
    565            }
    566            /* Release FIFO1 */
    567            else /* FIFONumber == CAN_FIFO1 */
    568            {
    569              CAN->RF1R = CAN_RF1R_RFOM1;
    570            }
    571          }
    572          
    573          /*******************************************************************************
    574          * Function Name  : CAN_MessagePending
    575          * Description    : Returns the number of pending messages.
    576          * Input          : FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
    577          * Output         : None.
    578          * Return         : NbMessage which is the number of pending message.
    579          *******************************************************************************/
    580          u8 CAN_MessagePending(u8 FIFONumber)
    581          {
    582            u8 MessagePending=0;
    583          
    584            /* Check the parameters */
    585            assert(IS_CAN_FIFO(FIFONumber));
    586          
    587            if (FIFONumber == CAN_FIFO0)
    588            {
    589              MessagePending = (u8)(CAN->RF0R&(u32)0x03);
    590            }
    591            else if (FIFONumber == CAN_FIFO1)
    592            {
    593              MessagePending = (u8)(CAN->RF1R&(u32)0x03);
    594            }
    595            else
    596            {
    597              MessagePending = 0;
    598            }
    599            return MessagePending;
    600          }
    601          
    602          /*******************************************************************************
    603          * Function Name  : CAN_Receive
    604          * Description    : Receives a message.
    605          * Input          : FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
    606          * Output         : RxMessage: pointer to a structure which contains CAN Id,
    607          *                  CAN DLC, CAN datas and FMI number.
    608          * Return         : None.
    609          *******************************************************************************/
    610          void CAN_Receive(u8 FIFONumber, CanRxMsg* RxMessage)
    611          {
    612            /* Check the parameters */
    613            assert(IS_CAN_FIFO(FIFONumber));
    614          
    615            /* Get the Id */
    616            RxMessage->StdId = (u32)0x000007FF & (CAN->sFIFOMailBox[FIFONumber].RIR >> 21);
    617            RxMessage->ExtId = (u32)0x0003FFFF & (CAN->sFIFOMailBox[FIFONumber].RIR >> 3);
    618          
    619            RxMessage->IDE = (u32)0x00000004 & CAN->sFIFOMailBox[FIFONumber].RIR;
    620            RxMessage->RTR = (u32)0x00000002 & CAN->sFIFOMailBox[FIFONumber].RIR;
    621          
    622            /* Get the DLC */
    623            RxMessage->DLC = (u32)0x0000000F & CAN->sFIFOMailBox[FIFONumber].RDTR;
    624          
    625            /* Get the FMI */
    626            RxMessage->FMI = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDTR >> 8);
    627          
    628            /* Get the data field */
    629            RxMessage->Data[0] = (u32)0x000000FF & CAN->sFIFOMailBox[FIFONumber].RDLR;
    630            RxMessage->Data[1] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 8);
    631            RxMessage->Data[2] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 16);
    632            RxMessage->Data[3] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 24);
    633          
    634            RxMessage->Data[4] = (u32)0x000000FF & CAN->sFIFOMailBox[FIFONumber].RDHR;
    635            RxMessage->Data[5] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 8);
    636            RxMessage->Data[6] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 16);
    637            RxMessage->Data[7] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 24);
    638          
    639            /* Release the FIFO */
    640            CAN_FIFORelease(FIFONumber);
    641          }
    642          
    643          /*******************************************************************************
    644          * Function Name  : CAN_Sleep
    645          * Description    : Enters the low power mode.
    646          * Input          : None.
    647          * Output         : None.
    648          * Return         : CANSLEEPOK if sleep entered, CANSLEEPFAILED in an other case.
    649          *******************************************************************************/
    650          u8 CAN_Sleep(void)
    651          {
    652            u8 SleepStatus = 0;
    653          
    654            /* Sleep mode entering request */
    655            CAN->MCR |= CAN_MCR_SLEEP;
    656            SleepStatus = CANSLEEPOK;
    657          
    658            /* Sleep mode status */
    659            if ((CAN->MSR&CAN_MCR_SLEEP) == 0) //if ((CAN->MCR&CAN_MCR_SLEEP) == 0)--D.JIANG
    660            {
    661              /* Sleep mode not entered */
    662              SleepStatus = CANSLEEPFAILED;
    663            }
    664          
    665            /* At this step, sleep mode status */
    666            return SleepStatus;
    667          }
    668          
    669          /*******************************************************************************
    670          * Function Name  : CAN_WakeUp
    671          * Description    : Wakes the CAN up.
    672          * Input          : None.
    673          * Output         : None.
    674          * Return         : CANWAKEUPOK if sleep mode left, CANWAKEUPFAILED in an other
    675          *                  case.
    676          *******************************************************************************/
    677          u8 CAN_WakeUp(void)
    678          {
    679            u8 WakeUpStatus = 0;
    680          
    681            /* Wake up request */
    682            CAN->MCR &= ~CAN_MCR_SLEEP;
    683            WakeUpStatus = CANWAKEUPFAILED;
    684          
    685            /* Sleep mode status */
    686            if ((CAN->MSR&CAN_MCR_SLEEP) == 0) //  if ((CAN->MCR&CAN_MCR_SLEEP) == 0)
    687            {
    688              /* Sleep mode exited */
    689              WakeUpStatus = CANWAKEUPOK;
    690            }
    691          
    692            /* At this step, sleep mode status */
    693            return WakeUpStatus;
    694          }
    695          
    696          /*******************************************************************************
    697          * Function Name  : CAN_GetFlagStatus
    698          * Description    : Checks whether the specified CAN flag is set or not.
    699          * Input          : CAN_FLAG: specifies the flag to check.
    700          *                  This parameter can be: CAN_FLAG_EWG, CAN_FLAG_EPV or
    701          *                                         CAN_FLAG_BOF.
    702          * Output         : None.
    703          * Return         : The new state of CAN_FLAG (SET or RESET).
    704          *******************************************************************************/
    705          FlagStatus CAN_GetFlagStatus(u32 CAN_FLAG)
    706          {
    707            FlagStatus bitstatus = RESET;
    708          
    709            /* Check the parameters */
    710            assert(IS_CAN_FLAG(CAN_FLAG));
    711          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -