STM32F439xx 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) 2017 STMicroelectronics</center></h2>
00010   *
00011   * Redistribution and use in source and binary forms, with or without modification,
00012   * are permitted provided that the following conditions are met:
00013   *   1. Redistributions of source code must retain the above copyright notice,
00014   *      this list of conditions and the following disclaimer.
00015   *   2. Redistributions in binary form must reproduce the above copyright notice,
00016   *      this list of conditions and the following disclaimer in the documentation
00017   *      and/or other materials provided with the distribution.
00018   *   3. Neither the name of STMicroelectronics nor the names of its contributors
00019   *      may be used to endorse or promote products derived from this software
00020   *      without specific prior written permission.
00021   *
00022   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00023   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00024   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00025   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
00026   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00027   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00028   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00030   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00031   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00032   *
00033   ******************************************************************************
00034   */
00035 
00036 /* Define to prevent recursive inclusion -------------------------------------*/
00037 #ifndef __STM32F4xx_LL_IWDG_H
00038 #define __STM32F4xx_LL_IWDG_H
00039 
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043 
00044 /* Includes ------------------------------------------------------------------*/
00045 #include "stm32f4xx.h"
00046 
00047 /** @addtogroup STM32F4xx_LL_Driver
00048   * @{
00049   */
00050 
00051 #if defined(IWDG)
00052 
00053 /** @defgroup IWDG_LL IWDG
00054   * @{
00055   */
00056 
00057 /* Private types -------------------------------------------------------------*/
00058 /* Private variables ---------------------------------------------------------*/
00059 
00060 /* Private constants ---------------------------------------------------------*/
00061 /** @defgroup IWDG_LL_Private_Constants IWDG Private Constants
00062   * @{
00063   */
00064 
00065 #define LL_IWDG_KEY_RELOAD                 0x0000AAAAU               /*!< IWDG Reload Counter Enable   */
00066 #define LL_IWDG_KEY_ENABLE                 0x0000CCCCU               /*!< IWDG Peripheral Enable       */
00067 #define LL_IWDG_KEY_WR_ACCESS_ENABLE       0x00005555U               /*!< IWDG KR Write Access Enable  */
00068 #define LL_IWDG_KEY_WR_ACCESS_DISABLE      0x00000000U               /*!< IWDG KR Write Access Disable */
00069 
00070 /**
00071   * @}
00072   */
00073 
00074 /* Private macros ------------------------------------------------------------*/
00075 
00076 /* Exported types ------------------------------------------------------------*/
00077 /* Exported constants --------------------------------------------------------*/
00078 /** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants
00079   * @{
00080   */
00081 
00082 /** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines
00083   * @brief    Flags defines which can be used with LL_IWDG_ReadReg function
00084   * @{
00085   */
00086 #define LL_IWDG_SR_PVU                     IWDG_SR_PVU                           /*!< Watchdog prescaler value update */
00087 #define LL_IWDG_SR_RVU                     IWDG_SR_RVU                           /*!< Watchdog counter reload value update */
00088 
00089 /**
00090   * @}
00091   */
00092 
00093 /** @defgroup IWDG_LL_EC_PRESCALER  Prescaler Divider
00094   * @{
00095   */
00096 #define LL_IWDG_PRESCALER_4                0x00000000U                           /*!< Divider by 4   */
00097 #define LL_IWDG_PRESCALER_8                (IWDG_PR_PR_0)                        /*!< Divider by 8   */
00098 #define LL_IWDG_PRESCALER_16               (IWDG_PR_PR_1)                        /*!< Divider by 16  */
00099 #define LL_IWDG_PRESCALER_32               (IWDG_PR_PR_1 | IWDG_PR_PR_0)         /*!< Divider by 32  */
00100 #define LL_IWDG_PRESCALER_64               (IWDG_PR_PR_2)                        /*!< Divider by 64  */
00101 #define LL_IWDG_PRESCALER_128              (IWDG_PR_PR_2 | IWDG_PR_PR_0)         /*!< Divider by 128 */
00102 #define LL_IWDG_PRESCALER_256              (IWDG_PR_PR_2 | IWDG_PR_PR_1)         /*!< Divider by 256 */
00103 /**
00104   * @}
00105   */
00106 
00107 /**
00108   * @}
00109   */
00110 
00111 /* Exported macro ------------------------------------------------------------*/
00112 /** @defgroup IWDG_LL_Exported_Macros IWDG Exported Macros
00113   * @{
00114   */
00115 
00116 /** @defgroup IWDG_LL_EM_WRITE_READ Common Write and read registers Macros
00117   * @{
00118   */
00119 
00120 /**
00121   * @brief  Write a value in IWDG register
00122   * @param  __INSTANCE__ IWDG Instance
00123   * @param  __REG__ Register to be written
00124   * @param  __VALUE__ Value to be written in the register
00125   * @retval None
00126   */
00127 #define LL_IWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00128 
00129 /**
00130   * @brief  Read a value in IWDG register
00131   * @param  __INSTANCE__ IWDG Instance
00132   * @param  __REG__ Register to be read
00133   * @retval Register value
00134   */
00135 #define LL_IWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00136 /**
00137   * @}
00138   */
00139 
00140 /**
00141   * @}
00142   */
00143 
00144 
00145 /* Exported functions --------------------------------------------------------*/
00146 /** @defgroup IWDG_LL_Exported_Functions IWDG Exported Functions
00147   * @{
00148   */
00149 /** @defgroup IWDG_LL_EF_Configuration Configuration
00150   * @{
00151   */
00152 
00153 /**
00154   * @brief  Start the Independent Watchdog
00155   * @note   Except if the hardware watchdog option is selected
00156   * @rmtoll KR           KEY           LL_IWDG_Enable
00157   * @param  IWDGx IWDG Instance
00158   * @retval None
00159   */
00160 __STATIC_INLINE void LL_IWDG_Enable(IWDG_TypeDef *IWDGx)
00161 {
00162   WRITE_REG(IWDG->KR, LL_IWDG_KEY_ENABLE);
00163 }
00164 
00165 /**
00166   * @brief  Reloads IWDG counter with value defined in the reload register
00167   * @rmtoll KR           KEY           LL_IWDG_ReloadCounter
00168   * @param  IWDGx IWDG Instance
00169   * @retval None
00170   */
00171 __STATIC_INLINE void LL_IWDG_ReloadCounter(IWDG_TypeDef *IWDGx)
00172 {
00173   WRITE_REG(IWDG->KR, LL_IWDG_KEY_RELOAD);
00174 }
00175 
00176 /**
00177   * @brief  Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
00178   * @rmtoll KR           KEY           LL_IWDG_EnableWriteAccess
00179   * @param  IWDGx IWDG Instance
00180   * @retval None
00181   */
00182 __STATIC_INLINE void LL_IWDG_EnableWriteAccess(IWDG_TypeDef *IWDGx)
00183 {
00184   WRITE_REG(IWDG->KR, LL_IWDG_KEY_WR_ACCESS_ENABLE);
00185 }
00186 
00187 /**
00188   * @brief  Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
00189   * @rmtoll KR           KEY           LL_IWDG_DisableWriteAccess
00190   * @param  IWDGx IWDG Instance
00191   * @retval None
00192   */
00193 __STATIC_INLINE void LL_IWDG_DisableWriteAccess(IWDG_TypeDef *IWDGx)
00194 {
00195   WRITE_REG(IWDG->KR, LL_IWDG_KEY_WR_ACCESS_DISABLE);
00196 }
00197 
00198 /**
00199   * @brief  Select the prescaler of the IWDG
00200   * @rmtoll PR           PR            LL_IWDG_SetPrescaler
00201   * @param  IWDGx IWDG Instance
00202   * @param  Prescaler This parameter 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   * @retval None
00211   */
00212 __STATIC_INLINE void LL_IWDG_SetPrescaler(IWDG_TypeDef *IWDGx, uint32_t Prescaler)
00213 {
00214   WRITE_REG(IWDGx->PR, IWDG_PR_PR & Prescaler);
00215 }
00216 
00217 /**
00218   * @brief  Get the selected prescaler of the IWDG
00219   * @rmtoll PR           PR            LL_IWDG_GetPrescaler
00220   * @param  IWDGx IWDG Instance
00221   * @retval Returned value can be one of the following values:
00222   *         @arg @ref LL_IWDG_PRESCALER_4
00223   *         @arg @ref LL_IWDG_PRESCALER_8
00224   *         @arg @ref LL_IWDG_PRESCALER_16
00225   *         @arg @ref LL_IWDG_PRESCALER_32
00226   *         @arg @ref LL_IWDG_PRESCALER_64
00227   *         @arg @ref LL_IWDG_PRESCALER_128
00228   *         @arg @ref LL_IWDG_PRESCALER_256
00229   */
00230 __STATIC_INLINE uint32_t LL_IWDG_GetPrescaler(IWDG_TypeDef *IWDGx)
00231 {
00232   return (uint32_t)(READ_REG(IWDGx->PR));
00233 }
00234 
00235 /**
00236   * @brief  Specify the IWDG down-counter reload value
00237   * @rmtoll RLR          RL            LL_IWDG_SetReloadCounter
00238   * @param  IWDGx IWDG Instance
00239   * @param  Counter Value between Min_Data=0 and Max_Data=0x0FFF
00240   * @retval None
00241   */
00242 __STATIC_INLINE void LL_IWDG_SetReloadCounter(IWDG_TypeDef *IWDGx, uint32_t Counter)
00243 {
00244   WRITE_REG(IWDGx->RLR, IWDG_RLR_RL & Counter);
00245 }
00246 
00247 /**
00248   * @brief  Get the specified IWDG down-counter reload value
00249   * @rmtoll RLR          RL            LL_IWDG_GetReloadCounter
00250   * @param  IWDGx IWDG Instance
00251   * @retval Value between Min_Data=0 and Max_Data=0x0FFF
00252   */
00253 __STATIC_INLINE uint32_t LL_IWDG_GetReloadCounter(IWDG_TypeDef *IWDGx)
00254 {
00255   return (uint32_t)(READ_REG(IWDGx->RLR));
00256 }
00257 
00258 
00259 /**
00260   * @}
00261   */
00262 
00263 /** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management
00264   * @{
00265   */
00266 
00267 /**
00268   * @brief  Check if flag Prescaler Value Update is set or not
00269   * @rmtoll SR           PVU           LL_IWDG_IsActiveFlag_PVU
00270   * @param  IWDGx IWDG Instance
00271   * @retval State of bit (1 or 0).
00272   */
00273 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx)
00274 {
00275   return (READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU));
00276 }
00277 
00278 /**
00279   * @brief  Check if flag Reload Value Update is set or not
00280   * @rmtoll SR           RVU           LL_IWDG_IsActiveFlag_RVU
00281   * @param  IWDGx IWDG Instance
00282   * @retval State of bit (1 or 0).
00283   */
00284 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx)
00285 {
00286   return (READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU));
00287 }
00288 
00289 
00290 /**
00291   * @brief  Check if all flags Prescaler, Reload & Window Value Update are reset or not
00292   * @rmtoll SR           PVU           LL_IWDG_IsReady\n
00293   *         SR           RVU           LL_IWDG_IsReady
00294   * @param  IWDGx IWDG Instance
00295   * @retval State of bits (1 or 0).
00296   */
00297 __STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx)
00298 {
00299   return (READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU) == 0U);
00300 }
00301 
00302 /**
00303   * @}
00304   */
00305 
00306 
00307 /**
00308   * @}
00309   */
00310 
00311 /**
00312   * @}
00313   */
00314 
00315 #endif /* IWDG) */
00316 
00317 /**
00318   * @}
00319   */
00320 
00321 #ifdef __cplusplus
00322 }
00323 #endif
00324 
00325 #endif /* __STM32F4xx_LL_IWDG_H */
00326 
00327 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/