Subversion Repositories DashDisplay

Rev

Rev 30 | Rev 50 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32l1xx_hal_flash.h
  4.   * @author  MCD Application Team
  5.   * @version V1.2.0
  6.   * @date    01-July-2016
  7.   * @brief   Header file of Flash HAL module.
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  12.   *
  13.   * Redistribution and use in source and binary forms, with or without modification,
  14.   * are permitted provided that the following conditions are met:
  15.   *   1. Redistributions of source code must retain the above copyright notice,
  16.   *      this list of conditions and the following disclaimer.
  17.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  18.   *      this list of conditions and the following disclaimer in the documentation
  19.   *      and/or other materials provided with the distribution.
  20.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  21.   *      may be used to endorse or promote products derived from this software
  22.   *      without specific prior written permission.
  23.   *
  24.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34.   *
  35.   ******************************************************************************  
  36.   */
  37.  
  38. /* Define to prevent recursive inclusion -------------------------------------*/
  39. #ifndef __STM32L1xx_HAL_FLASH_H
  40. #define __STM32L1xx_HAL_FLASH_H
  41.  
  42. #ifdef __cplusplus
  43.  extern "C" {
  44. #endif
  45.  
  46. /* Includes ------------------------------------------------------------------*/
  47. #include "stm32l1xx_hal_def.h"
  48.    
  49. /** @addtogroup STM32L1xx_HAL_Driver
  50.   * @{
  51.   */
  52.  
  53. /** @addtogroup FLASH
  54.   * @{
  55.   */
  56.  
  57. /** @addtogroup FLASH_Private_Constants
  58.   * @{
  59.   */
  60. #define FLASH_TIMEOUT_VALUE   ((uint32_t)50000U) /* 50 s */
  61. /**
  62.   * @}
  63.   */
  64.  
  65. /** @addtogroup FLASH_Private_Macros
  66.   * @{
  67.   */
  68.  
  69. #define IS_FLASH_TYPEPROGRAM(_VALUE_)   (((_VALUE_) == FLASH_TYPEPROGRAM_WORD))
  70.  
  71. #define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || \
  72.                                        ((__LATENCY__) == FLASH_LATENCY_1))
  73.  
  74. /**
  75.   * @}
  76.   */  
  77.  
  78. /* Exported types ------------------------------------------------------------*/
  79. /** @defgroup FLASH_Exported_Types FLASH Exported Types
  80.   * @{
  81.   */  
  82.  
  83. /**
  84.   * @brief  FLASH Procedure structure definition
  85.   */
  86. typedef enum
  87. {
  88.   FLASH_PROC_NONE              = 0,
  89.   FLASH_PROC_PAGEERASE         = 1,
  90.   FLASH_PROC_PROGRAM           = 2,
  91. } FLASH_ProcedureTypeDef;
  92.  
  93. /**
  94.   * @brief  FLASH handle Structure definition  
  95.   */
  96. typedef struct
  97. {
  98.   __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */
  99.  
  100.   __IO uint32_t               NbPagesToErase;   /*!< Internal variable to save the remaining sectors to erase in IT context*/
  101.  
  102.   __IO uint32_t               Address;          /*!< Internal variable to save address selected for program or erase */
  103.  
  104.   __IO uint32_t               Page;             /*!< Internal variable to define the current page which is erasing */
  105.  
  106.   HAL_LockTypeDef             Lock;             /*!< FLASH locking object                */
  107.  
  108.   __IO uint32_t               ErrorCode;        /*!< FLASH error code                    
  109.                                                      This parameter can be a value of @ref FLASH_Error_Codes  */
  110. } FLASH_ProcessTypeDef;
  111.  
  112. /**
  113.   * @}
  114.   */
  115.  
  116. /* Exported constants --------------------------------------------------------*/
  117. /** @defgroup FLASH_Exported_Constants FLASH Exported Constants
  118.   * @{
  119.   */  
  120.  
  121. /** @defgroup FLASH_Error_Codes FLASH Error Codes
  122.   * @{
  123.   */
  124.  
  125. #define HAL_FLASH_ERROR_NONE      0x00U  /*!< No error */
  126. #define HAL_FLASH_ERROR_PGA       0x01U  /*!< Programming alignment error */
  127. #define HAL_FLASH_ERROR_WRP       0x02U  /*!< Write protection error */
  128. #define HAL_FLASH_ERROR_OPTV      0x04U  /*!< Option validity error */
  129. #define HAL_FLASH_ERROR_SIZE      0x08U  /*!<  */
  130. #define HAL_FLASH_ERROR_RD        0x10U  /*!< Read protected error */
  131. #define HAL_FLASH_ERROR_OPTVUSR   0x20U  /*!< Option UserValidity Error. */
  132. #define HAL_FLASH_ERROR_OPERATION 0x40U  /*!< Not used */
  133.  
  134. /**
  135.   * @}
  136.   */
  137.  
  138. /** @defgroup FLASH_Page_Size FLASH size information
  139.   * @{
  140.   */
  141.  
  142. #define FLASH_SIZE                (uint32_t)(*((uint16_t *)FLASHSIZE_BASE) * 1024U)
  143. #define FLASH_PAGE_SIZE           ((uint32_t)256U)  /*!< FLASH Page Size in bytes */
  144.  
  145. /**
  146.   * @}
  147.   */
  148.  
  149. /** @defgroup FLASH_Type_Program FLASH Type Program
  150.   * @{
  151.   */
  152. #define FLASH_TYPEPROGRAM_WORD       ((uint32_t)0x02U)  /*!<Program a word (32-bit) at a specified address.*/
  153.  
  154. /**
  155.   * @}
  156.   */
  157.  
  158. /** @defgroup FLASH_Latency FLASH Latency
  159.   * @{
  160.   */
  161. #define FLASH_LATENCY_0            ((uint32_t)0x00000000U)    /*!< FLASH Zero Latency cycle */
  162. #define FLASH_LATENCY_1            FLASH_ACR_LATENCY         /*!< FLASH One Latency cycle */
  163.  
  164. /**
  165.   * @}
  166.   */
  167.  
  168. /** @defgroup FLASH_Interrupts FLASH Interrupts
  169.   * @{
  170.   */
  171.    
  172. #define FLASH_IT_EOP               FLASH_PECR_EOPIE  /*!< End of programming interrupt source */
  173. #define FLASH_IT_ERR               FLASH_PECR_ERRIE  /*!< Error interrupt source */
  174. /**
  175.   * @}
  176.   */
  177.  
  178. /** @defgroup FLASH_Flags FLASH Flags
  179.   * @{
  180.   */
  181.  
  182. #define FLASH_FLAG_BSY             FLASH_SR_BSY        /*!< FLASH Busy flag */
  183. #define FLASH_FLAG_EOP             FLASH_SR_EOP        /*!< FLASH End of Programming flag */
  184. #define FLASH_FLAG_ENDHV           FLASH_SR_ENDHV      /*!< FLASH End of High Voltage flag */
  185. #define FLASH_FLAG_READY           FLASH_SR_READY      /*!< FLASH Ready flag after low power mode */
  186. #define FLASH_FLAG_WRPERR          FLASH_SR_WRPERR     /*!< FLASH Write protected error flag */
  187. #define FLASH_FLAG_PGAERR          FLASH_SR_PGAERR     /*!< FLASH Programming Alignment error flag */
  188. #define FLASH_FLAG_SIZERR          FLASH_SR_SIZERR     /*!< FLASH Size error flag  */
  189. #define FLASH_FLAG_OPTVERR         FLASH_SR_OPTVERR    /*!< FLASH Option Validity error flag  */
  190. /* Cat2 & Cat3*/
  191. #if defined(FLASH_SR_RDERR)
  192. #define FLASH_FLAG_RDERR           FLASH_SR_RDERR    /*!< Read protected error flag  */
  193. #endif /* FLASH_SR_RDERR */
  194. /* Cat3, Cat4 & Cat5*/
  195. #if defined(FLASH_SR_OPTVERRUSR)
  196. #define FLASH_FLAG_OPTVERRUSR      FLASH_SR_OPTVERRUSR /*!< FLASH Option User Validity error flag  */
  197. #endif /* FLASH_SR_OPTVERRUSR */
  198.  
  199. /**
  200.   * @}
  201.   */
  202.  
  203. /** @defgroup FLASH_Keys FLASH Keys
  204.   * @{
  205.   */
  206.  
  207. #define FLASH_PDKEY1               ((uint32_t)0x04152637U) /*!< Flash power down key1 */
  208. #define FLASH_PDKEY2               ((uint32_t)0xFAFBFCFDU) /*!< Flash power down key2: used with FLASH_PDKEY1
  209.                                                               to unlock the RUN_PD bit in FLASH_ACR */
  210.  
  211. #define FLASH_PEKEY1               ((uint32_t)0x89ABCDEFU) /*!< Flash program erase key1 */
  212. #define FLASH_PEKEY2               ((uint32_t)0x02030405U) /*!< Flash program erase key: used with FLASH_PEKEY2
  213.                                                                to unlock the write access to the FLASH_PECR register and
  214.                                                                data EEPROM */
  215.  
  216. #define FLASH_PRGKEY1              ((uint32_t)0x8C9DAEBFU) /*!< Flash program memory key1 */
  217. #define FLASH_PRGKEY2              ((uint32_t)0x13141516U) /*!< Flash program memory key2: used with FLASH_PRGKEY2
  218.                                                                to unlock the program memory */
  219.  
  220. #define FLASH_OPTKEY1              ((uint32_t)0xFBEAD9C8U) /*!< Flash option key1 */
  221. #define FLASH_OPTKEY2              ((uint32_t)0x24252627U) /*!< Flash option key2: used with FLASH_OPTKEY1 to
  222.                                                               unlock the write access to the option byte block */
  223. /**
  224.   * @}
  225.   */
  226. /**
  227.   * @}
  228.   */  
  229.  
  230. /* Exported macro ------------------------------------------------------------*/
  231.  
  232. /** @defgroup FLASH_Exported_Macros FLASH Exported Macros
  233.  *  @brief macros to control FLASH features
  234.  *  @{
  235.  */
  236.  
  237.  
  238. /** @defgroup FLASH_Interrupt FLASH Interrupts
  239.  *  @brief macros to handle FLASH interrupts
  240.  * @{
  241.  */
  242.  
  243. /**
  244.   * @brief  Enable the specified FLASH interrupt.
  245.   * @param  __INTERRUPT__  FLASH interrupt
  246.   *         This parameter can be any combination of the following values:
  247.   *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt
  248.   *     @arg @ref FLASH_IT_ERR Error Interrupt    
  249.   * @retval none
  250.   */  
  251. #define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  SET_BIT((FLASH->PECR), (__INTERRUPT__))
  252.  
  253. /**
  254.   * @brief  Disable the specified FLASH interrupt.
  255.   * @param  __INTERRUPT__  FLASH interrupt
  256.   *         This parameter can be any combination of the following values:
  257.   *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt
  258.   *     @arg @ref FLASH_IT_ERR Error Interrupt    
  259.   * @retval none
  260.   */  
  261. #define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  CLEAR_BIT((FLASH->PECR), (uint32_t)(__INTERRUPT__))
  262.  
  263. /**
  264.   * @brief  Get the specified FLASH flag status.
  265.   * @param  __FLAG__ specifies the FLASH flag to check.
  266.   *          This parameter can be one of the following values:
  267.   *            @arg @ref FLASH_FLAG_BSY         FLASH Busy flag
  268.   *            @arg @ref FLASH_FLAG_EOP         FLASH End of Operation flag
  269.   *            @arg @ref FLASH_FLAG_ENDHV       FLASH End of High Voltage flag
  270.   *            @arg @ref FLASH_FLAG_READY       FLASH Ready flag after low power mode
  271.   *            @arg @ref FLASH_FLAG_PGAERR      FLASH Programming Alignment error flag
  272.   *            @arg @ref FLASH_FLAG_SIZERR      FLASH Size error flag
  273.   *            @arg @ref FLASH_FLAG_OPTVERR     FLASH Option validity error error flag
  274. @if STM32L100xB
  275. @elif STM32L100xBA
  276.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  277. @elif STM32L151xB
  278. @elif STM32L151xBA
  279.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  280. @elif STM32L152xB
  281. @elif STM32L152xBA
  282.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  283. @elif STM32L100xC
  284.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  285.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  286. @elif STM32L151xC
  287.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  288.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  289. @elif STM32L152xC
  290.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  291.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  292. @elif STM32L162xC
  293.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  294.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  295. @else
  296.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  297. @endif
  298.   *            @arg @ref FLASH_FLAG_WRPERR      FLASH Write protected error flag
  299.   * @retval The new state of __FLAG__ (SET or RESET).
  300.   */
  301. #define __HAL_FLASH_GET_FLAG(__FLAG__)   (((FLASH->SR) & (__FLAG__)) == (__FLAG__))
  302.  
  303. /**
  304.   * @brief  Clear the specified FLASH flag.
  305.   * @param  __FLAG__ specifies the FLASH flags to clear.
  306.   *          This parameter can be any combination of the following values:
  307.   *            @arg @ref FLASH_FLAG_EOP         FLASH End of Operation flag
  308.   *            @arg @ref FLASH_FLAG_ENDHV       FLASH End of High Voltage flag
  309.   *            @arg @ref FLASH_FLAG_READY       FLASH Ready flag after low power mode
  310.   *            @arg @ref FLASH_FLAG_PGAERR      FLASH Programming Alignment error flag
  311.   *            @arg @ref FLASH_FLAG_SIZERR      FLASH Size error flag
  312.   *            @arg @ref FLASH_FLAG_OPTVERR     FLASH Option validity error error flag
  313. @if STM32L100xB
  314. @elif STM32L100xBA
  315.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  316. @elif STM32L151xB
  317. @elif STM32L151xBA
  318.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  319. @elif STM32L152xB
  320. @elif STM32L152xBA
  321.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  322. @elif STM32L100xC
  323.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  324.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  325. @elif STM32L151xC
  326.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  327.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  328. @elif STM32L152xC
  329.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  330.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  331. @elif STM32L162xC
  332.   *            @arg @ref FLASH_FLAG_RDERR       FLASH Read Protection error flag (PCROP)
  333.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  334. @else
  335.   *            @arg @ref FLASH_FLAG_OPTVERRUSR  FLASH Option User validity error
  336. @endif
  337.   *            @arg @ref FLASH_FLAG_WRPERR      FLASH Write protected error flag
  338.   * @retval none
  339.   */
  340. #define __HAL_FLASH_CLEAR_FLAG(__FLAG__)   ((FLASH->SR) = (__FLAG__))
  341.  
  342. /**
  343.   * @}
  344.   */
  345.  
  346. /**
  347.   * @}
  348.   */
  349.  
  350. /* Include FLASH HAL Extended module */
  351. #include "stm32l1xx_hal_flash_ex.h"  
  352. #include "stm32l1xx_hal_flash_ramfunc.h"  
  353.  
  354. /* Exported functions --------------------------------------------------------*/
  355. /** @addtogroup FLASH_Exported_Functions
  356.   * @{
  357.   */
  358.  
  359. /** @addtogroup FLASH_Exported_Functions_Group1
  360.   * @{
  361.   */
  362. /* IO operation functions *****************************************************/
  363. HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint32_t Data);
  364. HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint32_t Data);
  365.  
  366. /* FLASH IRQ handler function */
  367. void       HAL_FLASH_IRQHandler(void);
  368. /* Callbacks in non blocking modes */
  369. void       HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
  370. void       HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
  371.  
  372. /**
  373.   * @}
  374.   */
  375.  
  376. /** @addtogroup FLASH_Exported_Functions_Group2
  377.   * @{
  378.   */
  379. /* Peripheral Control functions ***********************************************/
  380. HAL_StatusTypeDef HAL_FLASH_Unlock(void);
  381. HAL_StatusTypeDef HAL_FLASH_Lock(void);
  382. HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
  383. HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
  384. HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
  385.  
  386. /**
  387.   * @}
  388.   */
  389.  
  390. /** @addtogroup FLASH_Exported_Functions_Group3
  391.   * @{
  392.   */
  393. /* Peripheral State and Error functions ***************************************/
  394. uint32_t HAL_FLASH_GetError(void);
  395.  
  396. /**
  397.   * @}
  398.   */
  399.  
  400. /**
  401.   * @}
  402.   */
  403.  
  404. /* Private function -------------------------------------------------*/
  405. /** @addtogroup FLASH_Private_Functions
  406.  * @{
  407.  */
  408. HAL_StatusTypeDef       FLASH_WaitForLastOperation(uint32_t Timeout);
  409.  
  410. /**
  411.   * @}
  412.   */
  413.  
  414. /**
  415.   * @}
  416.   */
  417.  
  418. /**
  419.   * @}
  420.   */
  421.  
  422. #ifdef __cplusplus
  423. }
  424. #endif
  425.  
  426. #endif /* __STM32L1xx_HAL_FLASH_H */
  427.  
  428. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  429.  
  430.