STM32F439xx HAL User Manual
|
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>© 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****/