亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? stm32f10x_can.c

?? STM32SDCardSourceCodeFATFS.rar
?? C
?? 第 1 頁 / 共 3 頁
字號:
  else if (FIFONumber == CAN_FIFO1)
  {
    message_pending = (uint8_t)(CANx->RF1R&(uint32_t)0x03);
  }
  else
  {
    message_pending = 0;
  }
  return message_pending;
}

/**
  * @brief  Receives a message.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @param  FIFONumber: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.
  * @param  RxMessage: pointer to a structure receive message which 
  *   contains CAN Id, CAN DLC, CAN datas and FMI number.
  * @retval None.
  */
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FIFO(FIFONumber));
  /* Get the Id */
  RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RIR;
  if (RxMessage->IDE == CAN_ID_STD)
  {
    RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21);
  }
  else
  {
    RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3);
  }
  
  RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR;
  /* Get the DLC */
  RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR;
  /* Get the FMI */
  RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8);
  /* Get the data field */
  RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR;
  RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8);
  RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16);
  RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24);
  RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR;
  RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8);
  RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16);
  RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 24);
  /* Release the FIFO */
  CAN_FIFORelease(CANx, FIFONumber);
}

/**
  * @brief  Enables or disables the DBG Freeze for CAN.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @param  NewState: new state of the CAN peripheral.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None.
  */
void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState != DISABLE)
  {
    /* Enable Debug Freeze  */
    CANx->MCR |= MCR_DBF;
  }
  else
  {
    /* Disable Debug Freeze */
    CANx->MCR &= ~MCR_DBF;
  }
}

/**
  * @brief  Enters the low power mode.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @retval CANSLEEPOK if sleep entered, CANSLEEPFAILED in an other case.
  */
uint8_t CAN_Sleep(CAN_TypeDef* CANx)
{
  uint8_t sleepstatus = CANSLEEPFAILED;
  
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
    
  /* Request Sleep mode */
   CANx->MCR = (((CANx->MCR) & (uint32_t)(~MCR_INRQ)) | MCR_SLEEP);
   
  /* Sleep mode status */
  if ((CANx->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) == CAN_MSR_SLAK)
  {
    /* Sleep mode not entered */
    sleepstatus =  CANSLEEPOK;
  }
  /* At this step, sleep mode status */
   return (uint8_t)sleepstatus;
}

/**
  * @brief  Wakes the CAN up.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @retval CANWAKEUPOK if sleep mode left, CANWAKEUPFAILED in an other case.
  */
uint8_t CAN_WakeUp(CAN_TypeDef* CANx)
{
  uint32_t wait_slak = SLAK_TimeOut	;
  uint8_t wakeupstatus = CANWAKEUPFAILED;
  
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
    
  /* Wake up request */
  CANx->MCR &= ~MCR_SLEEP;
    
  /* Sleep mode status */
  while(((CANx->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)&&(wait_slak!=0x00))
  {
   wait_slak--;
  }
  if((CANx->MSR & CAN_MSR_SLAK) != CAN_MSR_SLAK)
  {
   /* Sleep mode exited */
    wakeupstatus = CANWAKEUPOK;
  }
  /* At this step, sleep mode status */
  return (uint8_t)wakeupstatus;
}

/**
  * @brief  Checks whether the specified CAN flag is set or not.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_FLAG: specifies the flag to check.
  *   This parameter can be: CAN_FLAG_EWG, CAN_FLAG_EPV or CAN_FLAG_BOF.
  * @retval The new state of CAN_FLAG (SET or RESET).
  */
FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FLAG(CAN_FLAG));
  /* Check the status of the specified CAN flag */
  if ((CANx->ESR & CAN_FLAG) != (uint32_t)RESET)
  {
    /* CAN_FLAG is set */
    bitstatus = SET;
  }
  else
  {
    /* CAN_FLAG is reset */
    bitstatus = RESET;
  }
  /* Return the CAN_FLAG status */
  return  bitstatus;
}

/**
  * @brief  Clears the CAN's pending flags.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_FLAG: specifies the flag to clear.
  * @retval None.
  */
void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FLAG(CAN_FLAG));
  /* Clear the selected CAN flags */
  CANx->ESR &= ~CAN_FLAG;
}

/**
  * @brief  Checks whether the specified CAN interrupt has occurred or not.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_IT: specifies the CAN interrupt source to check.
  *   This parameter can be: CAN_IT_RQCP0, CAN_IT_RQCP1, CAN_IT_RQCP2,
  *   CAN_IT_FF0, CAN_IT_FOV0, CAN_IT_FF1,
  *   CAN_IT_FOV1, CAN_IT_EWG, CAN_IT_EPV, 
  *   CAN_IT_BOF, CAN_IT_WKU or CAN_IT_SLK.
  * @retval The new state of CAN_IT (SET or RESET).
  */
ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT)
{
  ITStatus pendingbitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_ITStatus(CAN_IT));
  switch (CAN_IT)
  {
    case CAN_IT_RQCP0:
      pendingbitstatus = CheckITStatus(CANx->TSR, TSR_RQCP0);
      break;
    case CAN_IT_RQCP1:
      pendingbitstatus = CheckITStatus(CANx->TSR, TSR_RQCP1);
      break;
    case CAN_IT_RQCP2:
      pendingbitstatus = CheckITStatus(CANx->TSR, TSR_RQCP2);
      break;
    case CAN_IT_FF0:
      pendingbitstatus = CheckITStatus(CANx->RF0R, RF0R_FULL0);
      break;
    case CAN_IT_FOV0:
      pendingbitstatus = CheckITStatus(CANx->RF0R, RF0R_FOVR0);
      break;
    case CAN_IT_FF1:
      pendingbitstatus = CheckITStatus(CANx->RF1R, RF1R_FULL1);
      break;
    case CAN_IT_FOV1:
      pendingbitstatus = CheckITStatus(CANx->RF1R, RF1R_FOVR1);
      break;
    case CAN_IT_EWG:
      pendingbitstatus = CheckITStatus(CANx->ESR, ESR_EWGF);
      break;
    case CAN_IT_EPV:
      pendingbitstatus = CheckITStatus(CANx->ESR, ESR_EPVF);
      break;
    case CAN_IT_BOF:
      pendingbitstatus = CheckITStatus(CANx->ESR, ESR_BOFF);
      break;
    case CAN_IT_SLK:
      pendingbitstatus = CheckITStatus(CANx->MSR, MSR_SLAKI);
      break;
    case CAN_IT_WKU:
      pendingbitstatus = CheckITStatus(CANx->MSR, MSR_WKUI);
      break;
    default :
      pendingbitstatus = RESET;
      break;
  }
  /* Return the CAN_IT status */
  return  pendingbitstatus;
}

/**
  * @brief  Clears the CAN抯 interrupt pending bits.
  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.
  * @param  CAN_IT: specifies the interrupt pending bit to clear.
  * @retval None.
  */
void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_ITStatus(CAN_IT));
  switch (CAN_IT)
  {
    case CAN_IT_RQCP0:
      CANx->TSR = TSR_RQCP0; /* rc_w1*/
      break;
    case CAN_IT_RQCP1:
      CANx->TSR = TSR_RQCP1; /* rc_w1*/
      break;
    case CAN_IT_RQCP2:
      CANx->TSR = TSR_RQCP2; /* rc_w1*/
      break;
    case CAN_IT_FF0:
      CANx->RF0R = RF0R_FULL0; /* rc_w1*/
      break;
    case CAN_IT_FOV0:
      CANx->RF0R = RF0R_FOVR0; /* rc_w1*/
      break;
    case CAN_IT_FF1:
      CANx->RF1R = RF1R_FULL1; /* rc_w1*/
      break;
    case CAN_IT_FOV1:
      CANx->RF1R = RF1R_FOVR1; /* rc_w1*/
      break;
    case CAN_IT_EWG:
      CANx->ESR &= ~ ESR_EWGF; /* rw */
      break;
    case CAN_IT_EPV:
      CANx->ESR &= ~ ESR_EPVF; /* rw */
      break;
    case CAN_IT_BOF:
      CANx->ESR &= ~ ESR_BOFF; /* rw */
      break;
    case CAN_IT_WKU:
      CANx->MSR = MSR_WKUI;  /* rc_w1*/
      break;
    case CAN_IT_SLK:
      CANx->MSR = MSR_SLAKI;  /* rc_w1*/
      break;
    default :
      break;
  }
}

/**
  * @brief  Checks whether the CAN interrupt has occurred or not.
  * @param  CAN_Reg: specifies the CAN interrupt register to check.
  * @param  It_Bit: specifies the interrupt source bit to check.
  * @retval The new state of the CAN Interrupt (SET or RESET).
  */
static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit)
{
  ITStatus pendingbitstatus = RESET;
  
  if ((CAN_Reg & It_Bit) != (uint32_t)RESET)
  {
    /* CAN_IT is set */
    pendingbitstatus = SET;
  }
  else
  {
    /* CAN_IT is reset */
    pendingbitstatus = RESET;
  }
  return pendingbitstatus;
}

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性欧美大战久久久久久久久| 精品国产自在久精品国产| 青青国产91久久久久久| 国产午夜精品久久久久久免费视| 99精品桃花视频在线观看| 日本欧美在线观看| 亚洲欧美日韩国产一区二区三区| 欧美成人精品高清在线播放| 色av成人天堂桃色av| 国产高清不卡一区二区| 日韩专区中文字幕一区二区| 一级中文字幕一区二区| 久久日韩粉嫩一区二区三区| 欧美精品九九99久久| 色94色欧美sute亚洲线路二| 大尺度一区二区| 精品夜夜嗨av一区二区三区| 亚洲成精国产精品女| 亚洲精品一二三区| 国产精品丝袜在线| 国产欧美一区二区精品忘忧草| 日韩一区二区三区三四区视频在线观看| 91丨porny丨蝌蚪视频| 国产99久久久精品| 国产成人综合视频| 韩国毛片一区二区三区| 久久国内精品自在自线400部| 热久久国产精品| 亚洲v日本v欧美v久久精品| 亚洲国产日韩a在线播放| 亚洲乱码国产乱码精品精98午夜| 最新不卡av在线| 中文字幕在线不卡视频| 国产精品不卡在线| 中文字幕中文字幕在线一区| 国产精品久久久久婷婷二区次| 久久精品人人爽人人爽| 国产性做久久久久久| 国产欧美一区视频| 国产精品乱码一区二区三区软件| 久久久九九九九| 中文成人综合网| 国产精品你懂的在线| 国产精品久久久一区麻豆最新章节| 国产精品毛片无遮挡高清| 亚洲欧洲精品一区二区精品久久久 | 国产suv一区二区三区88区| 狠狠色狠狠色综合日日91app| 国内精品在线播放| 成人精品小蝌蚪| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩在线亚洲一区蜜芽| 成人性生交大片| 成人一级片网址| 91视视频在线观看入口直接观看www| 99精品欧美一区二区三区小说| 色综合网站在线| 51久久夜色精品国产麻豆| 欧美一级夜夜爽| 欧美精品一区二区精品网| 亚洲国产精品t66y| 亚洲影视在线观看| 日韩一区精品视频| 国产精品资源网站| 97久久超碰精品国产| 欧美精品乱人伦久久久久久| 精品国产sm最大网站免费看| 国产精品午夜免费| 亚洲国产精品人人做人人爽| 久久99蜜桃精品| 成人av资源下载| 欧美久久一二三四区| 久久先锋影音av鲁色资源网| 亚洲视频一区在线| 日本不卡高清视频| av在线播放不卡| 麻豆精品在线看| 秋霞国产午夜精品免费视频| 国产91在线观看| 欧美性大战xxxxx久久久| 精品国产亚洲在线| 亚洲欧美日韩人成在线播放| 免费成人你懂的| 91网页版在线| 欧美va亚洲va香蕉在线| 亚洲蜜臀av乱码久久精品| 麻豆成人91精品二区三区| 国产精品亚洲一区二区三区在线| 日本福利一区二区| 欧美韩国日本不卡| 麻豆成人av在线| 欧美日韩在线亚洲一区蜜芽| 中文字幕第一区二区| 免费观看在线综合色| 色综合久久久久| 国产欧美精品国产国产专区 | 免费视频一区二区| 在线中文字幕一区| 国产精品区一区二区三| 日本va欧美va欧美va精品| 欧美中文字幕一区二区三区| 久久精品亚洲一区二区三区浴池| 亚洲国产精品久久久男人的天堂| av资源网一区| 久久精品这里都是精品| 日本不卡在线视频| 欧美视频完全免费看| 国产精品美女www爽爽爽| 国产一区亚洲一区| 欧美一级黄色片| 五月天久久比比资源色| 91国偷自产一区二区三区观看| 国产精品婷婷午夜在线观看| 国产精选一区二区三区| 日韩欧美中文字幕制服| 日日摸夜夜添夜夜添精品视频| 色中色一区二区| 亚洲婷婷在线视频| 成人免费视频播放| 国产欧美一区二区三区网站| 国产一区久久久| 精品日韩在线一区| 麻豆精品久久久| 精品少妇一区二区三区日产乱码 | 欧美日韩亚洲丝袜制服| 亚洲免费大片在线观看| 91香蕉国产在线观看软件| 国产精品高潮呻吟久久| 成人一级黄色片| 18成人在线观看| 97国产一区二区| 专区另类欧美日韩| 一本久久a久久精品亚洲| 最好看的中文字幕久久| 色综合婷婷久久| 亚洲综合免费观看高清完整版| 91黄视频在线| 亚洲成人第一页| 国产色综合一区| 成人午夜视频在线观看| 国产精品丝袜黑色高跟| 99riav久久精品riav| 亚洲精品乱码久久久久| 欧美亚洲综合色| 天使萌一区二区三区免费观看| 欧美精品高清视频| 日本不卡一区二区三区高清视频| 日韩欧美一区二区视频| 国产米奇在线777精品观看| 欧美成人精品高清在线播放 | 欧美影院午夜播放| 亚洲6080在线| 国产精品三级视频| 日韩av在线发布| 精品精品欲导航| 自拍偷拍亚洲激情| 欧美电影影音先锋| 秋霞影院一区二区| 中文字幕第一页久久| 国模少妇一区二区三区| 国产mv日韩mv欧美| 亚洲欧美偷拍卡通变态| 欧美日韩亚洲国产综合| 美腿丝袜在线亚洲一区| 国产欧美精品一区| 欧美午夜影院一区| 久久国产精品色婷婷| 国产精品欧美一级免费| 欧美在线你懂的| 国产乱一区二区| 一区二区三区在线免费播放| 日韩一级片网站| 成人sese在线| 美女性感视频久久| 欧美激情在线观看视频免费| 欧美日韩亚洲综合| 国产成人av影院| 亚洲va韩国va欧美va精品| 国产日韩欧美制服另类| 欧美日韩亚洲另类| 成人性生交大片免费看中文网站| 亚洲一二三级电影| 中文一区在线播放| 欧美福利视频一区| 99国产精品视频免费观看| 青青草国产精品97视觉盛宴| 中文字幕一区二区日韩精品绯色| 7777精品伊人久久久大香线蕉经典版下载| 国产一区二区三区免费在线观看| 一区二区三区在线观看网站| 日韩精品在线看片z| 欧美亚洲日本国产| 亚洲欧洲精品一区二区三区| 久久99久久久久久久久久久| 最新热久久免费视频| 日韩女同互慰一区二区| 色综合久久88色综合天天免费| 久久超碰97中文字幕| 亚洲黄色免费网站| 国产精品私人影院|