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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? stm32l1xx_flash.c

?? STM32+Grlib
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
  return status;
}

/**
  * @brief  Write a Byte at a specified address in data memory without erase.
  * @note   - To correctly run this function, the DATA_EEPROM_Unlock() function
  *           must be called before.
  *         - Call the DATA_EEPROM_Lock() to he data EEPROM access
  *            and Flash program erase control register access(recommended to protect 
  *            the DATA_EEPROM against possible unwanted operation) 
  * @note   The function  DATA_EEPROM_FixedTimeProgramCmd() can be called before 
  *         this function to configure the Fixed Time Programming.      
  * @param  Address: specifies the address to be written.
  * @param  Data: specifies the data to be written.
  * @retval FLASH Status: The returned value can be: 
  *   FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. 
  */
FLASH_Status DATA_EEPROM_ProgramByte(uint32_t Address, uint8_t Data)
{
  FLASH_Status status = FLASH_COMPLETE;
  uint32_t tmp = 0, tmpaddr = 0;
  
  /* Check the parameters */
  assert_param(IS_FLASH_DATA_ADDRESS(Address)); 

  /* Wait for last operation to be completed */
  status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
  
  if(status == FLASH_COMPLETE)
  {
    if(Data != (uint8_t) 0x00)
    {  
      *(__IO uint8_t *)Address = Data;
    
      /* Wait for last operation to be completed */
      status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);

    }
    else
    {
      tmpaddr = Address & 0xFFFFFFFC;
      tmp = * (__IO uint32_t *) tmpaddr;
      tmpaddr = 0xFF << ((uint32_t) (0x8 * (Address & 0x3)));
      tmp &= ~tmpaddr;        
      status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
      status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);        
    }   
  }
  /* Return the Write Status */
  return status;
}

/**
  * @brief  Writes a half word at a specified address in data memory without erase.
  * @note   - To correctly run this function, the DATA_EEPROM_Unlock() function
  *           must be called before.
  *         - Call the DATA_EEPROM_Lock() to he data EEPROM access
  *            and Flash program erase control register access(recommended to protect 
  *            the DATA_EEPROM against possible unwanted operation)
  * @note   The function  DATA_EEPROM_FixedTimeProgramCmd() can be called before 
  *         this function to configure the Fixed Time Programming                 
  * @param  Address: specifies the address to be written.
  * @param  Data: specifies the data to be written.
  * @retval FLASH Status: The returned value can be:  
  *   FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. 
  */
FLASH_Status DATA_EEPROM_ProgramHalfWord(uint32_t Address, uint16_t Data)
{
  FLASH_Status status = FLASH_COMPLETE;
  uint32_t tmp = 0, tmpaddr = 0;
  
  /* Check the parameters */
  assert_param(IS_FLASH_DATA_ADDRESS(Address));

  /* Wait for last operation to be completed */
  status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
  
  if(status == FLASH_COMPLETE)
  {
    if(Data != (uint16_t)0x0000)
    {
      *(__IO uint16_t *)Address = Data;
   
      /* Wait for last operation to be completed */
      status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);     
    }
    else
    {
      if((Address & 0x3) != 0x3)
      {
        tmpaddr = Address & 0xFFFFFFFC;
        tmp = * (__IO uint32_t *) tmpaddr;
        tmpaddr = 0xFFFF << ((uint32_t) (0x8 * (Address & 0x3)));
        tmp &= ~tmpaddr;          
        status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
        status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);  
      }
      else
      {
        DATA_EEPROM_FastProgramByte(Address, 0x00);
        DATA_EEPROM_FastProgramByte(Address + 1, 0x00);          
      }              
    }    
  } 
  /* Return the Write Status */
  return status;
}

/**
  * @brief  Programs a word at a specified address in data memory without erase.
  * @note   - To correctly run this function, the DATA_EEPROM_Unlock() function
  *           must be called before.
  *         - Call the DATA_EEPROM_Lock() to he data EEPROM access
  *            and Flash program erase control register access(recommended to protect 
  *            the DATA_EEPROM against possible unwanted operation)  
  * @note   The function  DATA_EEPROM_FixedTimeProgramCmd() can be called before 
  *         this function to configure the Fixed Time Programming.               
  * @param  Address: specifies the address to be written.
  * @param  Data: specifies the data to be written.
  * @retval FLASH Status: The returned value can be:  
  *   FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or  FLASH_TIMEOUT. 
  */
FLASH_Status DATA_EEPROM_ProgramWord(uint32_t Address, uint32_t Data)
{
  FLASH_Status status = FLASH_COMPLETE;
  
  /* Check the parameters */
  assert_param(IS_FLASH_DATA_ADDRESS(Address));
  
  /* Wait for last operation to be completed */
  status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
  
  if(status == FLASH_COMPLETE)
  {
    *(__IO uint32_t *)Address = Data;

    /* Wait for last operation to be completed */
    status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);        
  }
  /* Return the Write Status */
  return status;
}

/**
  * @}
  */

/** @defgroup FLASH_Group4 Option Bytes Programming functions
 *  @brief   Option Bytes Programming functions 
 *
@verbatim   
 ===============================================================================
                        Option Bytes Programming functions
 ===============================================================================  

   The FLASH_Option Bytes Programming_functions, includes the following functions:
   - void FLASH_OB_Unlock(void);
   - void FLASH_OB_Lock(void);
   - void FLASH_OB_Launch(void);
   - FLASH_Status FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState);
   - FLASH_Status FLASH_OB_RDPConfig(uint8_t OB_RDP);
   - FLASH_Status FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY);
   - FLASH_Status FLASH_OB_BORConfig(uint8_t OB_BOR);
   - uint8_t FLASH_OB_GetUser(void);
   - uint32_t FLASH_OB_GetWRP(void);
   - FlagStatus FLASH_OB_GetRDP(void);
   - uint8_t FLASH_OB_GetBOR(void);
   
   Any operation of erase or program should follow these steps:
   
   1. Call the FLASH_OB_Unlock() function to enable the Flash option control register access
   
   2. Call one or several functions to program the desired option bytes 
      - void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState) => to Enable/Disable 
        the desired sector write protection
      - void FLASH_OB_RDPConfig(uint8_t OB_RDP) => to set the desired read Protection Level
      - void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY) => to configure 
        the user option Bytes: IWDG, STOP and the Standby.
      - void FLASH_OB_BORConfig(uint8_t OB_BOR) => to Set the BOR level 
      - FLASH_Status FLASH_ProgramOTP(uint32_t Address, uint32_t Data) => to program the OTP bytes			 
   
   3. Once all needed option bytes to be programmed are correctly written, call the
     FLASH_OB_Launch(void) function to launch the Option Bytes programming process.  
   
   4. Call the FLASH_OB_Lock() to disable the Flash option control register access (recommended
      to protect the option Bytes against possible unwanted operations)

@endverbatim
  * @{
  */

/**
  * @brief  Unlocks the option bytes block access.
  * @param  None
  * @retval None
  */
void FLASH_OB_Unlock(void)
{
  if((FLASH->PECR & FLASH_PECR_OPTLOCK) != RESET)
  {
    /* Unlocking the data memory and FLASH_PECR register access */
    DATA_EEPROM_Unlock();
  
    /* Unlocking the option bytes block access */
    FLASH->OPTKEYR = FLASH_OPTKEY1;
    FLASH->OPTKEYR = FLASH_OPTKEY2;
  }
}

/**
  * @brief  Locks the option bytes block access.
  * @param  None
  * @retval None
  */
void FLASH_OB_Lock(void)
{
  /* Set the OPTLOCK Bit to lock the option bytes block access */
  FLASH->PECR |= FLASH_PECR_OPTLOCK;
}

/**
  * @brief  Launch the option byte loading.
  * @param  None
  * @retval None
  */
void FLASH_OB_Launch(void)
{
  /* Set the OBL_Launch bit to lauch the option byte loading */
  FLASH->PECR |= FLASH_PECR_OBL_LAUNCH;
}

/**
  * @brief  Write protects the desired pages
  * @note   - To correctly run this function, the FLASH_OB_Unlock() function
  *           must be called before.
  *         - Call the FLASH_OB_Lock() to disable the flash control register access and the option bytes 
  *          (recommended to protect the FLASH memory against possible unwanted operation)    
  * @param  OB_WRP: specifies the address of the pages to be write protected.
  *   This parameter can be:
  *     @arg  value between OB_WRP_Pages0to15 and OB_WRP_Pages496to511
  *     @arg OB_WRP_AllPages
  * @param  NewState: new state of the specified FLASH Pages Wtite protection.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval FLASH Status: The returned value can be: 
  * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
  */
FLASH_Status FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState)
{
  uint32_t WRP01_Data = 0, WRP23_Data = 0;
  
  FLASH_Status status = FLASH_COMPLETE;
  uint32_t tmp1 = 0, tmp2 = 0;
  
  /* Check the parameters */
  assert_param(IS_OB_WRP(OB_WRP));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
     
  /* Wait for last operation to be completed */
  status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
 
  if(status == FLASH_COMPLETE)
  {
    if (NewState != DISABLE)
    {
      WRP01_Data = (uint16_t)(((OB_WRP & WRP01_MASK) | OB->WRP01));
      WRP23_Data = (uint16_t)((((OB_WRP & WRP23_MASK)>>16 | OB->WRP23))); 
      tmp1 = (uint32_t)(~(WRP01_Data) << 16)|(WRP01_Data);
      OB->WRP01 = tmp1;
      
      tmp2 = (uint32_t)(~(WRP23_Data) << 16)|(WRP23_Data);
      OB->WRP23 = tmp2;      
    }             
    
    else
    {
      WRP01_Data = (uint16_t)(~OB_WRP & (WRP01_MASK & OB->WRP01));
      WRP23_Data = (uint16_t)((((~OB_WRP & WRP23_MASK)>>16 & OB->WRP23))); 

      tmp1 = (uint32_t)((~WRP01_Data) << 16)|(WRP01_Data);
      OB->WRP01 = tmp1;
      
      tmp2 = (uint32_t)((~WRP23_Data) << 16)|(WRP23_Data);
      OB->WRP23 = tmp2;
    }
    /* Wait for last operation to be completed */
    status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
  }

  /* Return the write protection operation Status */
  return status;      
}

/**
  * @brief  Enables or disables the read out protection.
  * @note   - To correctly run this function, the FLASH_OB_Unlock() function
  *           must be called before.
  *         - Call the FLASH_OB_Lock() to disable the flash control register access and the option bytes 
  *          (recommended to protect the FLASH memory against possible unwanted operation)   
  * @param  FLASH_ReadProtection_Level: specifies the read protection level. 
  *   This parameter can be:
  *     @arg OB_RDP_Level_0: No protection
  *     @arg OB_RDP_Level_1: Read protection of the memory                     
  *     @arg OB_RDP_Level_2: Chip protection
  *     @retval FLASH Status: The returned value can be: 
  * FLASH_ERROR_PROGRAM, FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.
  */
FLASH_Status FLASH_OB_RDPConfig(uint8_t OB_RDP)
{
  FLASH_Status status = FLASH_COMPLETE;
  uint8_t tmp1 = 0;
  uint32_t tmp2 = 0;
  
  /* Check the parameters */
  assert_param(IS_OB_RDP(OB_RDP));
  status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
  
  /* calculate the option byte to write */
  tmp1 = (uint8_t)(~(OB_RDP ));
  tmp2 = (uint32_t)(((uint32_t)((uint32_t)(tmp1) << 16)) | ((uint32_t)OB_RDP));
  
  if(status == FLASH_COMPLETE)
  {         
   /* program read protection level */
    OB->RDP = tmp2;
  }
  
  /* Wait for last operation to be completed */
    status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
     
  /* Return the Read protection operation Status */
  return status;            
}

/**

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二三区好的| 成人18视频日本| 亚洲色图欧美在线| 日韩视频免费直播| 91蝌蚪国产九色| 国产在线一区二区综合免费视频| 亚洲三级电影网站| 久久久无码精品亚洲日韩按摩| 91国产成人在线| 粉嫩绯色av一区二区在线观看 | 国产欧美日韩另类一区| 欧美日本视频在线| 99久久99久久免费精品蜜臀| 国产综合色精品一区二区三区| 亚洲一区二区不卡免费| 国产精品久久777777| 精品三级av在线| 91精品一区二区三区久久久久久| 99久久精品一区| 国产黄人亚洲片| 国产在线不卡一区| 奇米一区二区三区| 午夜精品久久久久影视| 亚洲精品国产视频| 中文字幕一区二区三区精华液 | 亚洲综合久久久| 中文字幕在线不卡| 欧美极品aⅴ影院| 久久久久久久精| 日韩精品一区二区三区在线观看| 91精选在线观看| 欧美精品一二三四| 欧美顶级少妇做爰| 欧美年轻男男videosbes| 日本久久电影网| 色94色欧美sute亚洲线路一ni| www.欧美色图| 99vv1com这只有精品| av成人免费在线观看| 成人av综合一区| 97精品电影院| 一本在线高清不卡dvd| 91小视频在线免费看| 91色porny在线视频| 色综合天天综合在线视频| 99国产一区二区三精品乱码| 97超碰欧美中文字幕| 色婷婷亚洲一区二区三区| 色综合视频在线观看| 在线观看日产精品| 欧美肥胖老妇做爰| 精品少妇一区二区三区在线播放| 精品不卡在线视频| 国产女人aaa级久久久级 | 日韩精品一区二区三区视频| 91精品国产综合久久福利| 日韩欧美国产一二三区| 精品国产成人系列| 国产午夜亚洲精品理论片色戒| 日本一区二区三区四区在线视频| 国产精品网站在线| 一区二区三区四区亚洲| 日韩国产在线观看| 久久国产婷婷国产香蕉| 成人永久看片免费视频天堂| 91亚洲精品久久久蜜桃| 欧美日韩国产高清一区二区| 欧美成人一区二区三区在线观看 | 欧美mv日韩mv亚洲| 国产精品免费av| 五月激情丁香一区二区三区| 久久福利视频一区二区| www.亚洲精品| 91精品中文字幕一区二区三区| 久久精品水蜜桃av综合天堂| 亚洲欧美一区二区三区国产精品 | aaa欧美色吧激情视频| 欧美日韩精品二区第二页| 欧美精品一区二区三区视频| 亚洲欧洲av另类| 日韩中文字幕区一区有砖一区| 国产在线一区观看| 在线免费观看日韩欧美| 精品久久久久久亚洲综合网| 1000精品久久久久久久久| 日日夜夜精品免费视频| 春色校园综合激情亚洲| 欧美剧情片在线观看| 日本一区二区在线不卡| 轻轻草成人在线| 99re亚洲国产精品| 欧美精品一区二区高清在线观看| 亚洲天天做日日做天天谢日日欢| 免费观看在线色综合| 99视频超级精品| 精品国产一区二区三区久久久蜜月| 亚洲欧洲性图库| 久久99精品国产麻豆婷婷洗澡| 在线免费观看日本欧美| 久久精品一级爱片| 秋霞电影网一区二区| 在线观看欧美精品| 国产精品久久久99| 国产一区二区三区蝌蚪| 91精选在线观看| 亚洲午夜在线观看视频在线| 成人一级视频在线观看| 26uuu欧美日本| 日韩av电影免费观看高清完整版| 色综合久久久久综合体| 中文字幕第一页久久| 激情综合网最新| 在线电影一区二区三区| 一区二区久久久久久| 成人免费的视频| 国产亚洲精品aa午夜观看| 毛片av一区二区三区| 欧美另类一区二区三区| 亚洲综合激情另类小说区| 91麻豆自制传媒国产之光| 国产精品视频一区二区三区不卡| 老司机精品视频在线| 91麻豆精品国产| 欧美aaaaaa午夜精品| 欧美人与性动xxxx| 亚洲aaa精品| 欧美日韩你懂得| 亚洲成a人v欧美综合天堂下载| 色综合激情五月| 亚洲美女区一区| 日本韩国欧美国产| 亚洲综合免费观看高清完整版 | 亚洲欧洲三级电影| 国产成人免费视频网站高清观看视频| 欧美mv日韩mv国产| 国产又粗又猛又爽又黄91精品| 日韩一级高清毛片| 久久精品国产亚洲aⅴ| 欧美电影免费观看高清完整版在| 三级久久三级久久| 日韩女同互慰一区二区| 精品一区二区三区视频| 精品国产sm最大网站| 国产一区二区久久| 国产精品五月天| 色综合亚洲欧洲| 午夜欧美在线一二页| 91精品麻豆日日躁夜夜躁| 久久国产婷婷国产香蕉| 国产亚洲一二三区| 99久精品国产| 亚洲一区在线视频观看| 91精品国产综合久久精品图片 | 色偷偷久久一区二区三区| 亚洲中国最大av网站| 欧美精品在线一区二区三区| 欧美bbbbb| 久久久久国产精品麻豆ai换脸| 成人一区二区三区| 亚洲国产一二三| 91精品国产一区二区三区香蕉| 国精品**一区二区三区在线蜜桃| 久久伊人蜜桃av一区二区| 成人ar影院免费观看视频| 一区二区三区国产精华| 91精品国产91热久久久做人人| 精品一区二区日韩| 日韩毛片精品高清免费| 欧美福利一区二区| 丰满少妇久久久久久久| 亚洲一区二区成人在线观看| 精品少妇一区二区三区日产乱码| 成人h精品动漫一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品久久久久久久午夜片| 色悠久久久久综合欧美99| 美女一区二区视频| 中文字幕一区二区三区在线不卡| 在线不卡一区二区| 丁香婷婷综合激情五月色| 亚洲不卡在线观看| 欧美激情在线免费观看| 欧美日韩高清在线播放| 成人动漫一区二区三区| 日本成人在线电影网| 国产精品乱码久久久久久| 欧美一区二区女人| 99久久精品费精品国产一区二区| 免费成人在线视频观看| 亚洲欧美激情一区二区| 亚洲精品在线免费观看视频| 在线一区二区视频| 国产精品影视天天线| 婷婷开心激情综合| 亚洲手机成人高清视频| 久久麻豆一区二区| 91麻豆精品国产综合久久久久久| 91在线码无精品| 国产一区美女在线| 视频在线观看国产精品|