1 /**
2   ******************************************************************************
3   * @file    stm32l4xx_hal_iwdg.h
4   * @author  MCD Application Team
5   * @brief   Header file of IWDG HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32L4xx_HAL_IWDG_H
21 #define STM32L4xx_HAL_IWDG_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32l4xx_hal_def.h"
29 
30 /** @addtogroup STM32L4xx_HAL_Driver
31   * @{
32   */
33 
34 /** @defgroup IWDG IWDG
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 /** @defgroup IWDG_Exported_Types IWDG Exported Types
40   * @{
41   */
42 
43 /**
44   * @brief  IWDG Init structure definition
45   */
46 typedef struct
47 {
48   uint32_t Prescaler;  /*!< Select the prescaler of the IWDG.
49                             This parameter can be a value of @ref IWDG_Prescaler */
50 
51   uint32_t Reload;     /*!< Specifies the IWDG down-counter reload value.
52                             This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */
53 
54   uint32_t Window;     /*!< Specifies the window value to be compared to the down-counter.
55                             This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */
56 
57 } IWDG_InitTypeDef;
58 
59 /**
60   * @brief  IWDG Handle Structure definition
61   */
62 typedef struct
63 {
64   IWDG_TypeDef                 *Instance;  /*!< Register base address    */
65 
66   IWDG_InitTypeDef             Init;       /*!< IWDG required parameters */
67 } IWDG_HandleTypeDef;
68 
69 
70 /**
71   * @}
72   */
73 
74 /* Exported constants --------------------------------------------------------*/
75 /** @defgroup IWDG_Exported_Constants IWDG Exported Constants
76   * @{
77   */
78 
79 /** @defgroup IWDG_Prescaler IWDG Prescaler
80   * @{
81   */
82 #define IWDG_PRESCALER_4                0x00000000u                                     /*!< IWDG prescaler set to 4   */
83 #define IWDG_PRESCALER_8                IWDG_PR_PR_0                                    /*!< IWDG prescaler set to 8   */
84 #define IWDG_PRESCALER_16               IWDG_PR_PR_1                                    /*!< IWDG prescaler set to 16  */
85 #define IWDG_PRESCALER_32               (IWDG_PR_PR_1 | IWDG_PR_PR_0)                   /*!< IWDG prescaler set to 32  */
86 #define IWDG_PRESCALER_64               IWDG_PR_PR_2                                    /*!< IWDG prescaler set to 64  */
87 #define IWDG_PRESCALER_128              (IWDG_PR_PR_2 | IWDG_PR_PR_0)                   /*!< IWDG prescaler set to 128 */
88 #define IWDG_PRESCALER_256              (IWDG_PR_PR_2 | IWDG_PR_PR_1)                   /*!< IWDG prescaler set to 256 */
89 /**
90   * @}
91   */
92 
93 /** @defgroup IWDG_Window_option IWDG Window option
94   * @{
95   */
96 #define IWDG_WINDOW_DISABLE             IWDG_WINR_WIN
97 /**
98   * @}
99   */
100 
101 /**
102   * @}
103   */
104 
105 /* Exported macros -----------------------------------------------------------*/
106 /** @defgroup IWDG_Exported_Macros IWDG Exported Macros
107   * @{
108   */
109 
110 /**
111   * @brief  Enable the IWDG peripheral.
112   * @param  __HANDLE__  IWDG handle
113   * @retval None
114   */
115 #define __HAL_IWDG_START(__HANDLE__)                WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)
116 
117 /**
118   * @brief  Reload IWDG counter with value defined in the reload register
119   *         (write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers disabled).
120   * @param  __HANDLE__  IWDG handle
121   * @retval None
122   */
123 #define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__)       WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_RELOAD)
124 
125 /**
126   * @}
127   */
128 
129 /* Exported functions --------------------------------------------------------*/
130 /** @defgroup IWDG_Exported_Functions  IWDG Exported Functions
131   * @{
132   */
133 
134 /** @defgroup IWDG_Exported_Functions_Group1 Initialization and Start functions
135   * @{
136   */
137 /* Initialization/Start functions  ********************************************/
138 HAL_StatusTypeDef     HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);
139 /**
140   * @}
141   */
142 
143 /** @defgroup IWDG_Exported_Functions_Group2 IO operation functions
144   * @{
145   */
146 /* I/O operation functions ****************************************************/
147 HAL_StatusTypeDef     HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);
148 /**
149   * @}
150   */
151 
152 /**
153   * @}
154   */
155 
156 /* Private constants ---------------------------------------------------------*/
157 /** @defgroup IWDG_Private_Constants IWDG Private Constants
158   * @{
159   */
160 
161 /**
162   * @brief  IWDG Key Register BitMask
163   */
164 #define IWDG_KEY_RELOAD                 0x0000AAAAu  /*!< IWDG Reload Counter Enable   */
165 #define IWDG_KEY_ENABLE                 0x0000CCCCu  /*!< IWDG Peripheral Enable       */
166 #define IWDG_KEY_WRITE_ACCESS_ENABLE    0x00005555u  /*!< IWDG KR Write Access Enable  */
167 #define IWDG_KEY_WRITE_ACCESS_DISABLE   0x00000000u  /*!< IWDG KR Write Access Disable */
168 
169 /**
170   * @}
171   */
172 
173 /* Private macros ------------------------------------------------------------*/
174 /** @defgroup IWDG_Private_Macros IWDG Private Macros
175   * @{
176   */
177 
178 /**
179   * @brief  Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers.
180   * @param  __HANDLE__  IWDG handle
181   * @retval None
182   */
183 #define IWDG_ENABLE_WRITE_ACCESS(__HANDLE__)  WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_ENABLE)
184 
185 /**
186   * @brief  Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers.
187   * @param  __HANDLE__  IWDG handle
188   * @retval None
189   */
190 #define IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_DISABLE)
191 
192 /**
193   * @brief  Check IWDG prescaler value.
194   * @param  __PRESCALER__  IWDG prescaler value
195   * @retval None
196   */
197 #define IS_IWDG_PRESCALER(__PRESCALER__)      (((__PRESCALER__) == IWDG_PRESCALER_4)  || \
198                                                ((__PRESCALER__) == IWDG_PRESCALER_8)  || \
199                                                ((__PRESCALER__) == IWDG_PRESCALER_16) || \
200                                                ((__PRESCALER__) == IWDG_PRESCALER_32) || \
201                                                ((__PRESCALER__) == IWDG_PRESCALER_64) || \
202                                                ((__PRESCALER__) == IWDG_PRESCALER_128)|| \
203                                                ((__PRESCALER__) == IWDG_PRESCALER_256))
204 
205 /**
206   * @brief  Check IWDG reload value.
207   * @param  __RELOAD__  IWDG reload value
208   * @retval None
209   */
210 #define IS_IWDG_RELOAD(__RELOAD__)            ((__RELOAD__) <= IWDG_RLR_RL)
211 
212 /**
213   * @brief  Check IWDG window value.
214   * @param  __WINDOW__  IWDG window value
215   * @retval None
216   */
217 #define IS_IWDG_WINDOW(__WINDOW__)            ((__WINDOW__) <= IWDG_WINR_WIN)
218 
219 
220 /**
221   * @}
222   */
223 
224 /**
225   * @}
226   */
227 
228 /**
229   * @}
230   */
231 
232 
233 #ifdef __cplusplus
234 }
235 #endif
236 
237 #endif /* STM32L4xx_HAL_IWDG_H */
238