STM32L443xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_ll_iwdg.h 00004 * @author MCD Application Team 00005 * @brief Header file of IWDG LL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32L4xx_LL_IWDG_H 00021 #define STM32L4xx_LL_IWDG_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32l4xx.h" 00029 00030 /** @addtogroup STM32L4xx_LL_Driver 00031 * @{ 00032 */ 00033 00034 #if defined(IWDG) 00035 00036 /** @defgroup IWDG_LL IWDG 00037 * @{ 00038 */ 00039 00040 /* Private types -------------------------------------------------------------*/ 00041 /* Private variables ---------------------------------------------------------*/ 00042 00043 /* Private constants ---------------------------------------------------------*/ 00044 /** @defgroup IWDG_LL_Private_Constants IWDG Private Constants 00045 * @{ 00046 */ 00047 #define LL_IWDG_KEY_RELOAD 0x0000AAAAU /*!< IWDG Reload Counter Enable */ 00048 #define LL_IWDG_KEY_ENABLE 0x0000CCCCU /*!< IWDG Peripheral Enable */ 00049 #define LL_IWDG_KEY_WR_ACCESS_ENABLE 0x00005555U /*!< IWDG KR Write Access Enable */ 00050 #define LL_IWDG_KEY_WR_ACCESS_DISABLE 0x00000000U /*!< IWDG KR Write Access Disable */ 00051 /** 00052 * @} 00053 */ 00054 00055 /* Private macros ------------------------------------------------------------*/ 00056 00057 /* Exported types ------------------------------------------------------------*/ 00058 /* Exported constants --------------------------------------------------------*/ 00059 /** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants 00060 * @{ 00061 */ 00062 00063 /** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines 00064 * @brief Flags defines which can be used with LL_IWDG_ReadReg function 00065 * @{ 00066 */ 00067 #define LL_IWDG_SR_PVU IWDG_SR_PVU /*!< Watchdog prescaler value update */ 00068 #define LL_IWDG_SR_RVU IWDG_SR_RVU /*!< Watchdog counter reload value update */ 00069 #define LL_IWDG_SR_WVU IWDG_SR_WVU /*!< Watchdog counter window 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 * @brief Specify high limit of the window value to be compared to the down-counter. 00241 * @rmtoll WINR WIN LL_IWDG_SetWindow 00242 * @param IWDGx IWDG Instance 00243 * @param Window Value between Min_Data=0 and Max_Data=0x0FFF 00244 * @retval None 00245 */ 00246 __STATIC_INLINE void LL_IWDG_SetWindow(IWDG_TypeDef *IWDGx, uint32_t Window) 00247 { 00248 WRITE_REG(IWDGx->WINR, IWDG_WINR_WIN & Window); 00249 } 00250 00251 /** 00252 * @brief Get the high limit of the window value specified. 00253 * @rmtoll WINR WIN LL_IWDG_GetWindow 00254 * @param IWDGx IWDG Instance 00255 * @retval Value between Min_Data=0 and Max_Data=0x0FFF 00256 */ 00257 __STATIC_INLINE uint32_t LL_IWDG_GetWindow(IWDG_TypeDef *IWDGx) 00258 { 00259 return (READ_REG(IWDGx->WINR)); 00260 } 00261 00262 /** 00263 * @} 00264 */ 00265 00266 /** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management 00267 * @{ 00268 */ 00269 00270 /** 00271 * @brief Check if flag Prescaler Value Update is set or not 00272 * @rmtoll SR PVU LL_IWDG_IsActiveFlag_PVU 00273 * @param IWDGx IWDG Instance 00274 * @retval State of bit (1 or 0). 00275 */ 00276 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx) 00277 { 00278 return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU)) ? 1UL : 0UL); 00279 } 00280 00281 /** 00282 * @brief Check if flag Reload Value Update is set or not 00283 * @rmtoll SR RVU LL_IWDG_IsActiveFlag_RVU 00284 * @param IWDGx IWDG Instance 00285 * @retval State of bit (1 or 0). 00286 */ 00287 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx) 00288 { 00289 return ((READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU)) ? 1UL : 0UL); 00290 } 00291 00292 /** 00293 * @brief Check if flag Window Value Update is set or not 00294 * @rmtoll SR WVU LL_IWDG_IsActiveFlag_WVU 00295 * @param IWDGx IWDG Instance 00296 * @retval State of bit (1 or 0). 00297 */ 00298 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_WVU(IWDG_TypeDef *IWDGx) 00299 { 00300 return ((READ_BIT(IWDGx->SR, IWDG_SR_WVU) == (IWDG_SR_WVU)) ? 1UL : 0UL); 00301 } 00302 00303 /** 00304 * @brief Check if all flags Prescaler, Reload & Window Value Update are reset or not 00305 * @rmtoll SR PVU LL_IWDG_IsReady\n 00306 * SR RVU LL_IWDG_IsReady\n 00307 * SR WVU LL_IWDG_IsReady 00308 * @param IWDGx IWDG Instance 00309 * @retval State of bits (1 or 0). 00310 */ 00311 __STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx) 00312 { 00313 return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU | IWDG_SR_WVU) == 0U) ? 1UL : 0UL); 00314 } 00315 00316 /** 00317 * @} 00318 */ 00319 00320 /** 00321 * @} 00322 */ 00323 00324 /** 00325 * @} 00326 */ 00327 00328 #endif /* IWDG */ 00329 00330 /** 00331 * @} 00332 */ 00333 00334 #ifdef __cplusplus 00335 } 00336 #endif 00337 00338 #endif /* STM32L4xx_LL_IWDG_H */