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

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

?? microsd.c

?? STM8示例程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/**
  ******************************************************************************
  * @file microsd.c
  * @brief This file contains basic functions to control the MicroSD card device.
  * @author STMicroelectronics - MCD Application Team
  * @version V1.0.1
  * @date 09/22/2008
  ******************************************************************************
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2008 STMicroelectronics</center></h2>
  * @image html logo.bmp
  ******************************************************************************
  */
  
/* Includes ------------------------------------------------------------------*/
#include "microsd.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/**
  * @brief Write a byte in the MicroSD card the SPI peripheral.
  * @param[in] Data Data to be sent.
  * @retval void None
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
void MSD_WriteByte(u8 Data)
{
  /* Wait until the transmit buffer is empty */
  while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
  /* Send the byte */
  SPI_SendData(Data);
}

/**
  * @brief Read a byte from the MicroSD card the SPI peripheral.
  * @par Parameters:
  * None
  * @retval u8 Data read
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
u8 MSD_ReadByte(void)
{
  u8 Data = 0;

  /* Wait until the transmit buffer is empty */
  while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
  /* Send the byte */
  SPI_SendData(DUMMY);

  /* Wait until a data is received */
  while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);
  /* Get the received data */
  Data = SPI_ReceiveData();

  /* Return the shifted data */
  return Data;
}

/**
  * @brief Initialize the  MicroSD card the SPI peripheral.
  * The MSD Response:
  * - MSD_RESPONSE_FAILURE: Sequence failed.
  * - MSD_RESPONSE_NO_ERROR: Sequence succeed .
  * @par Parameters:
  * None
  * @retval u8 MSD_GoIdleState State of the MSD.
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
u8 MSD_Init(void)
{
  u32 i;

  /* Set MSD ChipSelect pin in Output push-pull high level */
  GPIO_Init(MSD_CS_PORT, MSD_CS_PIN,GPIO_MODE_OUT_PP_HIGH_FAST);

  /* MSD chip select high */
  MSD_ChipSelect(DISABLE);
  /* Send dummy byte 0xFF, 10 times with CS high*/
  /* rise CS and MOSI for 80 clocks cycles */
  for (i = 0; i <= 9; i++)
  {
    /* Send dummy byte 0xFF */
    MSD_WriteByte(DUMMY);
  }
  /*------------Put MSD in SPI mode--------------*/
  /* MSD initialized and set to SPI mode properly */
  return (MSD_GoIdleState());
}

/**
  * @brief Enable or Disable the MicroSD card.
  * @param[in] NewState CS pin state
  * @retval void None
  * @par Required preconditions:
  * None
  * @par Functions called:
  * - GPIO_WriteHigh()
  * - GPIO_WriteLow()
  */
void MSD_ChipSelect(FunctionalState NewState)
{
  if (NewState == ENABLE)
  {
    GPIO_WriteLow(MSD_CS_PORT, MSD_CS_PIN); /* CS pin low: MSD enabled */
  }
  else
  {
    GPIO_WriteHigh(MSD_CS_PORT, MSD_CS_PIN); /* CS pin high: MSD disabled */
  }
}

/**
  * @brief Return the State of the MSD.
  * The MSD Response:
  * - MSD_RESPONSE_FAILURE: Sequence failed.
  * - MSD_RESPONSE_NO_ERROR: Sequence succeed.
  * @par Parameters:
  * None
  * @retval u8 State of MSD
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
u8 MSD_GoIdleState(void)
{
  /* MSD chip select low */
  MSD_ChipSelect(ENABLE);
  /* Send CMD0 (GO_IDLE_STATE) to put MSD in SPI mode */
  MSD_SendCmd(MSD_GO_IDLE_STATE, 0, 0x95);

  /* Wait for In Idle State Response (R1 Format) equal to 0x01 */
  if (MSD_GetResponse(MSD_IN_IDLE_STATE))
  {
    /* No Idle State Response: return response failue */
    return MSD_RESPONSE_FAILURE;
  }
  /*----------Activates the card initialization process-----------*/
  do
  {
    /* MSD chip select high */
    MSD_ChipSelect(DISABLE);
    /* Send Dummy byte 0xFF */
    MSD_WriteByte(DUMMY);

    /* MSD chip select low */
    MSD_ChipSelect(ENABLE);

    /* Send CMD1 (Activates the card process) until response equal to 0x0 */
    MSD_SendCmd(MSD_SEND_OP_COND, 0, 0xFF);
    /* Wait for no error Response (R1 Format) equal to 0x00 */
  }
  while (MSD_GetResponse(MSD_RESPONSE_NO_ERROR));

  /* MSD chip select high */
  MSD_ChipSelect(DISABLE);
  /* Send dummy byte 0xFF */
  MSD_WriteByte(DUMMY);

  return MSD_RESPONSE_NO_ERROR;
}

/**
  * @brief Send 5 bytes command to the MSD.
  * @param[in] Cmd The user expected command to send to MSD card.
  * @param[in] Arg The command argument.
  * @param[in] Crc The CRC.
  * @retval void None
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
void MSD_SendCmd(u8 Cmd, u32 Arg, u8 Crc)
{
  u32 i = 0x00;
  u8 Frame[6];

  /* Construct byte1 */
  Frame[0] = (u8)(Cmd | 0x40);
  /* Construct byte2 */
  Frame[1] = (u8)(Arg >> 24);
  /* Construct byte3 */
  Frame[2] = (u8)(Arg >> 16);
  /* Construct byte4 */
  Frame[3] = (u8)(Arg >> 8);
  /* Construct byte5 */
  Frame[4] = (u8)(Arg);
  /* Construct CRC: byte6 */
  Frame[5] = (Crc);

  /* Send the Cmd bytes */
  for (i = 0; i < 6; i++)
  {
    MSD_WriteByte(Frame[i]);
  }
}

/**
  * @brief Get response from the MSD.
  * The MSD Response:
  * - MSD_RESPONSE_FAILURE: Sequence failed.
  * - MSD_RESPONSE_NO_ERROR: Sequence succeed 
  * @param[in] Response Response to get
  * @retval u8 Response value
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
u8 MSD_GetResponse(u8 Response)
{
  u32 Count = 0xFFF;

  /* Check if response is got or a timeout is happen */
  while ((MSD_ReadByte() != Response) && Count)
  {
    Count--;
  }

  if (Count == 0)
  {
    /* After time out */
    return MSD_RESPONSE_FAILURE;
  }
  else
  {
    /* Right response got */
    return MSD_RESPONSE_NO_ERROR;
  }
}

/**
  * @brief Detect if MSD card is correctly plugged in the memory slot.
  * @par Parameters:
  * None
  * @retval u8 Return if MSD is detected or not
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
u8 MSD_Detect(void)
{
  u8 status = MICROSD_PRESENT;
  /* Check GPIO to detect microSD */
  if (GPIO_ReadInputData(GPIOE) & GPIO_PIN_4)
  {
    status = MICROSD_NOT_PRESENT;
  }
  return status;
}

/**
  * @brief Write a block in the MSD card.
  * @param[in] pBuffer pointer to the buffer containing the data to be written on the MSD.
  * @param[in] WriteAddr address to write on.
  * @param[in] NumByteToWrite number of data to write
  * @retval u8 MSD response
  * @par Required preconditions:
  * None
  * @par Functions called:
  * None
  */
u8 MSD_WriteBlock(u8 *pBuffer, u32 WriteAddr, u16 NumByteToWrite)
{
  u32 i = 0;
  u8 rvalue = MSD_RESPONSE_FAILURE;

  /* MSD chip select low */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三区不卡| 欧美日韩一区三区四区| 欧美日韩www| 国产精品久久久久一区 | 亚洲成人精品在线观看| 欧美老年两性高潮| 老司机精品视频在线| 成人91在线观看| 欧美大片国产精品| 一级特黄大欧美久久久| 中文字幕亚洲一区二区va在线| 欧美国产精品久久| 蜜臀av国产精品久久久久| 91社区在线播放| 日韩欧美一区二区久久婷婷| 欧美区一区二区三区| 中文字幕不卡三区| 精品伊人久久久久7777人| 欧美电影在线免费观看| 亚洲黄色尤物视频| 91麻豆精东视频| 欧美韩国一区二区| 国产伦精品一区二区三区视频青涩 | 国产做a爰片久久毛片| 欧美剧在线免费观看网站| 亚洲男人的天堂一区二区 | 日韩在线卡一卡二| 欧美日韩精品一区二区三区四区| 亚洲欧美在线观看| av高清不卡在线| 中文字幕中文字幕中文字幕亚洲无线| 国产精品一区二区免费不卡| 精品88久久久久88久久久| 免费一区二区视频| 欧美一区二区三区男人的天堂| 亚洲成人动漫在线观看| 欧美日韩一区视频| 日韩国产精品大片| 日韩欧美一区二区不卡| 麻豆久久久久久久| 日韩欧美黄色影院| 国产一区二区三区av电影| 2019国产精品| 懂色av一区二区夜夜嗨| 国产精品国产三级国产aⅴ入口| 成人在线视频一区二区| 国产精品国产三级国产aⅴ中文 | 国产风韵犹存在线视精品| 国产欧美一区二区三区在线老狼| 国产精品亚洲第一| 国产精品天美传媒沈樵| 91一区二区在线| 亚洲一区二区偷拍精品| 欧美日韩三级在线| 日韩影院免费视频| 26uuu亚洲| 懂色av中文字幕一区二区三区| 中文字幕一区二| 欧美性猛片xxxx免费看久爱| 舔着乳尖日韩一区| 日韩精品一区国产麻豆| 国产高清精品在线| 亚洲猫色日本管| 欧美日韩一区成人| 裸体一区二区三区| 欧美激情一区二区三区在线| 色偷偷久久一区二区三区| 五月天一区二区三区| 日韩欧美视频在线| 成人免费高清在线| 亚洲一区视频在线| 精品国产一区二区三区av性色| 国产精品一色哟哟哟| 亚洲免费观看视频| 69精品人人人人| 国产成人在线视频网站| 亚洲黄色录像片| 91精品国产品国语在线不卡| 国产乱国产乱300精品| 亚洲欧洲精品一区二区精品久久久 | 麻豆91小视频| 国产精品网站一区| 欧美日韩成人综合在线一区二区| 精品一区精品二区高清| 亚洲天堂av老司机| 日韩视频一区二区三区| 成人精品亚洲人成在线| 亚洲大片一区二区三区| 国产午夜精品久久久久久免费视 | 欧美日韩国产综合视频在线观看 | 蜜臀av一区二区在线观看| 国产亚洲一二三区| 欧美视频一二三区| 国产jizzjizz一区二区| 天天综合色天天| 中文幕一区二区三区久久蜜桃| 欧美色窝79yyyycom| 国产一区二区不卡老阿姨| 亚洲图片欧美一区| 欧美激情在线观看视频免费| 欧美日韩成人综合天天影院| 成人午夜av电影| 日本不卡免费在线视频| 亚洲三级久久久| 久久网站热最新地址| 欧美艳星brazzers| 国产一区二区三区精品视频| 亚洲精品美腿丝袜| 国产目拍亚洲精品99久久精品| 欧美视频在线播放| www.日韩精品| 一本久久综合亚洲鲁鲁五月天| 欧美成人午夜电影| 亚洲一区二区三区爽爽爽爽爽| 95精品视频在线| 日韩欧美在线123| 中文字幕国产一区| 国产成人丝袜美腿| 欧美一区二区三区人| 国产精品家庭影院| 国产99一区视频免费| 久久精品免费在线观看| 麻豆精品在线播放| 精品欧美一区二区在线观看| 亚洲一二三四区不卡| 欧美自拍偷拍午夜视频| 国产精品美女一区二区| 美腿丝袜一区二区三区| 色先锋aa成人| 玉米视频成人免费看| 99精品视频中文字幕| 国产精品素人一区二区| 国产东北露脸精品视频| 6080yy午夜一二三区久久| 亚洲激情图片一区| 欧美日韩激情一区二区三区| 亚洲色图.com| 91影院在线免费观看| 精品剧情v国产在线观看在线| 亚洲国产aⅴ天堂久久| 91视频在线观看| 中文字幕欧美区| 国产精品香蕉一区二区三区| 精品久久久久久久久久久久包黑料| 亚洲永久精品大片| 欧美色综合天天久久综合精品| 亚洲男女一区二区三区| 国产真实乱偷精品视频免| 制服丝袜亚洲色图| 精品一区二区三区欧美| 亚洲国产电影在线观看| 国产91在线观看| 亚洲视频电影在线| 91麻豆精品国产91久久久久久久久| 韩国av一区二区| 中文字幕视频一区| 色婷婷久久99综合精品jk白丝| 亚洲综合免费观看高清完整版| 久久精品视频免费| 极品少妇xxxx偷拍精品少妇| 国产免费久久精品| 欧美男男青年gay1069videost| 狠狠色丁香婷婷综合| 欧美激情在线观看视频免费| 99久久精品免费看国产免费软件| www.欧美日韩| eeuss鲁片一区二区三区在线观看| 成人教育av在线| 99视频一区二区| 一本大道综合伊人精品热热 | 欧美一卡二卡三卡| 欧美一区二区日韩一区二区| 欧美成人综合网站| 久久九九99视频| ...中文天堂在线一区| 亚洲欧美日本韩国| 天天综合网 天天综合色| 蜜桃久久精品一区二区| 国产精品一区二区久久精品爱涩| 成人av在线资源网| 欧美亚洲动漫精品| 欧美大片拔萝卜| 国产精品午夜春色av| 悠悠色在线精品| 日本va欧美va精品| 国产成人av自拍| 色欧美乱欧美15图片| 7777精品伊人久久久大香线蕉的| 精品国产一区二区在线观看| 亚洲国产岛国毛片在线| 伊人性伊人情综合网| 美女在线视频一区| 国产不卡视频在线播放| 91色porny蝌蚪| 欧美大片在线观看| 综合色中文字幕| 午夜精品久久久久久| 国产一区二区伦理| 欧美丝袜丝交足nylons图片| 亚洲精品在线电影|