STM32F479xx HAL User Manual
stm32f4xx_ll_iwdg.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f4xx_ll_iwdg.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of IWDG LL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                        opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 
00020 /* Define to prevent recursive inclusion -------------------------------------*/
00021 #ifndef STM32F4xx_LL_IWDG_H
00022 #define STM32F4xx_LL_IWDG_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 /* Includes ------------------------------------------------------------------*/
00029 #include "stm32f4xx.h"
00030 
00031 /** @addtogroup STM32F4xx_LL_Driver
00032   * @{
00033   */
00034 
00035 #if defined(IWDG)
00036 
00037 /** @defgroup IWDG_LL IWDG
00038   * @{
00039   */
00040 
00041 /* Private types -------------------------------------------------------------*/
00042 /* Private variables ---------------------------------------------------------*/
00043 
00044 /* Private constants ---------------------------------------------------------*/
00045 /** @defgroup IWDG_LL_Private_Constants IWDG Private Constants
00046   * @{
00047   */
00048 #define LL_IWDG_KEY_RELOAD                 0x0000AAAAU               /*!< IWDG Reload Counter Enable   */
00049 #define LL_IWDG_KEY_ENABLE                 0x0000CCCCU               /*!< IWDG Peripheral Enable       */
00050 #define LL_IWDG_KEY_WR_ACCESS_ENABLE       0x00005555U               /*!< IWDG KR Write Access Enable  */
00051 #define LL_IWDG_KEY_WR_ACCESS_DISABLE      0x00000000U               /*!< IWDG KR Write Access Disable */
00052 /**
00053   * @}
00054   */
00055 
00056 /* Private macros ------------------------------------------------------------*/
00057 
00058 /* Exported types ------------------------------------------------------------*/
00059 /* Exported constants --------------------------------------------------------*/
00060 /** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants
00061   * @{
00062   */
00063 
00064 /** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines
00065   * @brief    Flags defines which can be used with LL_IWDG_ReadReg function
00066   * @{
00067   */
00068 #define LL_IWDG_SR_PVU                     IWDG_SR_PVU                           /*!< Watchdog prescaler value update */
00069 #define LL_IWDG_SR_RVU                     IWDG_SR_RVU                           /*!< Watchdog counter reload value update */
00070 /**
00071   * @}
00072   */
00073 
00074 /** @defgroup IWDG_LL_EC_PRESCALER  Prescaler Divider
00075   * @{
00076   */
00077 #define LL_IWDG_PRESCALER_4                0x00000000U                           /*!< Divider by 4   */
00078 #define LL_IWDG_PRESCALER_8                (IWDG_PR_PR_0)                        /*!< Divider by 8   */
00079 #define LL_IWDG_PRESCALER_16               (IWDG_PR_PR_1)                        /*!< Divider by 16  */
00080 #define LL_IWDG_PRESCALER_32               (IWDG_PR_PR_1 | IWDG_PR_PR_0)         /*!< Divider by 32  */
00081 #define LL_IWDG_PRESCALER_64               (IWDG_PR_PR_2)                        /*!< Divider by 64  */
00082 #define LL_IWDG_PRESCALER_128              (IWDG_PR_PR_2 | IWDG_PR_PR_0)         /*!< Divider by 128 */
00083 #define LL_IWDG_PRESCALER_256              (IWDG_PR_PR_2 | IWDG_PR_PR_1)         /*!< Divider by 256 */
00084 /**
00085   * @}
00086   */
00087 
00088 /**
00089   * @}
00090   */
00091 
00092 /* Exported macro ------------------------------------------------------------*/
00093 /** @defgroup IWDG_LL_Exported_Macros IWDG Exported Macros
00094   * @{
00095   */
00096 
00097 /** @defgroup IWDG_LL_EM_WRITE_READ Common Write and read registers Macros
00098   * @{
00099   */
00100 
00101 /**
00102   * @brief  Write a value in IWDG register
00103   * @param  __INSTANCE__ IWDG Instance
00104   * @param  __REG__ Register to be written
00105   * @param  __VALUE__ Value to be written in the register
00106   * @retval None
00107   */
00108 #define LL_IWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00109 
00110 /**
00111   * @brief  Read a value in IWDG register
00112   * @param  __INSTANCE__ IWDG Instance
00113   * @param  __REG__ Register to be read
00114   * @retval Register value
00115   */
00116 #define LL_IWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00117 /**
00118   * @}
00119   */
00120 
00121 /**
00122   * @}
00123   */
00124 
00125 
00126 /* Exported functions --------------------------------------------------------*/
00127 /** @defgroup IWDG_LL_Exported_Functions IWDG Exported Functions
00128   * @{
00129   */
00130 /** @defgroup IWDG_LL_EF_Configuration Configuration
00131   * @{
00132   */
00133 
00134 /**
00135   * @brief  Start the Independent Watchdog
00136   * @note   Except if the hardware watchdog option is selected
00137   * @rmtoll KR           KEY           LL_IWDG_Enable
00138   * @param  IWDGx IWDG Instance
00139   * @retval None
00140   */
00141 __STATIC_INLINE void LL_IWDG_Enable(IWDG_TypeDef *IWDGx)
00142 {
00143   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_ENABLE);
00144 }
00145 
00146 /**
00147   * @brief  Reloads IWDG counter with value defined in the reload register
00148   * @rmtoll KR           KEY           LL_IWDG_ReloadCounter
00149   * @param  IWDGx IWDG Instance
00150   * @retval None
00151   */
00152 __STATIC_INLINE void LL_IWDG_ReloadCounter(IWDG_TypeDef *IWDGx)
00153 {
00154   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_RELOAD);
00155 }
00156 
00157 /**
00158   * @brief  Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
00159   * @rmtoll KR           KEY           LL_IWDG_EnableWriteAccess
00160   * @param  IWDGx IWDG Instance
00161   * @retval None
00162   */
00163 __STATIC_INLINE void LL_IWDG_EnableWriteAccess(IWDG_TypeDef *IWDGx)
00164 {
00165   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_WR_ACCESS_ENABLE);
00166 }
00167 
00168 /**
00169   * @brief  Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
00170   * @rmtoll KR           KEY           LL_IWDG_DisableWriteAccess
00171   * @param  IWDGx IWDG Instance
00172   * @retval None
00173   */
00174 __STATIC_INLINE void LL_IWDG_DisableWriteAccess(IWDG_TypeDef *IWDGx)
00175 {
00176   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_WR_ACCESS_DISABLE);
00177 }
00178 
00179 /**
00180   * @brief  Select the prescaler of the IWDG
00181   * @rmtoll PR           PR            LL_IWDG_SetPrescaler
00182   * @param  IWDGx IWDG Instance
00183   * @param  Prescaler This parameter can be one of the following values:
00184   *         @arg @ref LL_IWDG_PRESCALER_4
00185   *         @arg @ref LL_IWDG_PRESCALER_8
00186   *         @arg @ref LL_IWDG_PRESCALER_16
00187   *         @arg @ref LL_IWDG_PRESCALER_32
00188   *         @arg @ref LL_IWDG_PRESCALER_64
00189   *         @arg @ref LL_IWDG_PRESCALER_128
00190   *         @arg @ref LL_IWDG_PRESCALER_256
00191   * @retval None
00192   */
00193 __STATIC_INLINE void LL_IWDG_SetPrescaler(IWDG_TypeDef *IWDGx, uint32_t Prescaler)
00194 {
00195   WRITE_REG(IWDGx->PR, IWDG_PR_PR & Prescaler);
00196 }
00197 
00198 /**
00199   * @brief  Get the selected prescaler of the IWDG
00200   * @rmtoll PR           PR            LL_IWDG_GetPrescaler
00201   * @param  IWDGx IWDG Instance
00202   * @retval Returned value can be one of the following values:
00203   *         @arg @ref LL_IWDG_PRESCALER_4
00204   *         @arg @ref LL_IWDG_PRESCALER_8
00205   *         @arg @ref LL_IWDG_PRESCALER_16
00206   *         @arg @ref LL_IWDG_PRESCALER_32
00207   *         @arg @ref LL_IWDG_PRESCALER_64
00208   *         @arg @ref LL_IWDG_PRESCALER_128
00209   *         @arg @ref LL_IWDG_PRESCALER_256
00210   */
00211 __STATIC_INLINE uint32_t LL_IWDG_GetPrescaler(IWDG_TypeDef *IWDGx)
00212 {
00213   return (READ_REG(IWDGx->PR));
00214 }
00215 
00216 /**
00217   * @brief  Specify the IWDG down-counter reload value
00218   * @rmtoll RLR          RL            LL_IWDG_SetReloadCounter
00219   * @param  IWDGx IWDG Instance
00220   * @param  Counter Value between Min_Data=0 and Max_Data=0x0FFF
00221   * @retval None
00222   */
00223 __STATIC_INLINE void LL_IWDG_SetReloadCounter(IWDG_TypeDef *IWDGx, uint32_t Counter)
00224 {
00225   WRITE_REG(IWDGx->RLR, IWDG_RLR_RL & Counter);
00226 }
00227 
00228 /**
00229   * @brief  Get the specified IWDG down-counter reload value
00230   * @rmtoll RLR          RL            LL_IWDG_GetReloadCounter
00231   * @param  IWDGx IWDG Instance
00232   * @retval Value between Min_Data=0 and Max_Data=0x0FFF
00233   */
00234 __STATIC_INLINE uint32_t LL_IWDG_GetReloadCounter(IWDG_TypeDef *IWDGx)
00235 {
00236   return (READ_REG(IWDGx->RLR));
00237 }
00238 
00239 /**
00240   * @}
00241   */
00242 
00243 /** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management
00244   * @{
00245   */
00246 
00247 /**
00248   * @brief  Check if flag Prescaler Value Update is set or not
00249   * @rmtoll SR           PVU           LL_IWDG_IsActiveFlag_PVU
00250   * @param  IWDGx IWDG Instance
00251   * @retval State of bit (1 or 0).
00252   */
00253 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx)
00254 {
00255   return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU)) ? 1UL : 0UL);
00256 }
00257 
00258 /**
00259   * @brief  Check if flag Reload Value Update is set or not
00260   * @rmtoll SR           RVU           LL_IWDG_IsActiveFlag_RVU
00261   * @param  IWDGx IWDG Instance
00262   * @retval State of bit (1 or 0).
00263   */
00264 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx)
00265 {
00266   return ((READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU)) ? 1UL : 0UL);
00267 }
00268 
00269 /**
00270   * @brief  Check if flags Prescaler & Reload Value Update are reset or not
00271   * @rmtoll SR           PVU           LL_IWDG_IsReady\n
00272   *         SR           RVU           LL_IWDG_IsReady
00273   * @param  IWDGx IWDG Instance
00274   * @retval State of bits (1 or 0).
00275   */
00276 __STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx)
00277 {
00278   return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU) == 0U) ? 1UL : 0UL);
00279 }
00280 
00281 /**
00282   * @}
00283   */
00284 
00285 /**
00286   * @}
00287   */
00288 
00289 /**
00290   * @}
00291   */
00292 
00293 #endif /* IWDG */
00294 
00295 /**
00296   * @}
00297   */
00298 
00299 #ifdef __cplusplus
00300 }
00301 #endif
00302 
00303 #endif /* STM32F4xx_LL_IWDG_H */
00304 
00305 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/