blob: e39bf3f31a3e01aa2b63e2d2f1e954692043a5bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
////////////////////////////////////////////////////////////////////////////////
/// @file hal_pwr.c
/// @author AE TEAM
/// @brief THIS FILE PROVIDES ALL THE PWR FIRMWARE FUNCTIONS.
////////////////////////////////////////////////////////////////////////////////
/// @attention
///
/// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
/// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
/// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
/// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
/// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
/// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
///
/// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
////////////////////////////////////////////////////////////////////////////////
// Define to prevent recursive inclusion
#define __HAL_PWR_C_
// Files includes
#include "hal_pwr.h"
#include "hal_rcc.h"
#include "hal_syscfg.h"
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup MM32_Hardware_Abstract_Layer
/// @{
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup PWR_HAL
/// @{
////////////////////////////////////////////////////////////////////////////////
/// @addtogroup PWR_Exported_Functions
/// @{
////////////////////////////////////////////////////////////////////////////////
/// @brief Deinitializes the PWR peripheral registers to their default reset
/// values.
/// @param None.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_DeInit(void)
{
exRCC_APB1PeriphReset(RCC_APB1ENR_PWR);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Enables or disables access to the RTC and backup registers.
/// @param state: new state of the access to the RTC and backup
/// registers. This parameter can be: ENABLE or DISABLE.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_BackupAccessCmd(FunctionalState state)
{
(state) ? (RCC->BDCR |= RCC_BDCR_DBP) : (RCC->BDCR &= ~RCC_BDCR_DBP);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Enables or disables the Power Voltage Detector(PVD).
/// @param state: new state of the PVD.
/// This parameter can be: ENABLE or DISABLE.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_PVDCmd(FunctionalState state)
{
(state) ? (SYSCFG->PDETCSR |= SYSCFG_PDETCSR_PVDE) : (SYSCFG->PDETCSR &= ~SYSCFG_PDETCSR_PVDE);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Configures the voltage threshold detected by the Power Voltage
/// Detector(PVD).
/// @param pvd_level: specifies the PVD detection level
/// This parameter can be one of the following values:
/// @arg emPVD_LEVEL0 : PVD detection level set to 1.7V
/// @arg emPVD_LEVEL1 : PVD detection level set to 2.0V
/// @arg emPVD_LEVEL2 : PVD detection level set to 2.3V
/// @arg emPVD_LEVEL3 : PVD detection level set to 2.6V
/// @arg emPVD_LEVEL4 : PVD detection level set to 2.9V
/// @arg emPVD_LEVEL5 : PVD detection level set to 3.2V
/// @arg emPVD_LEVEL6 : PVD detection level set to 3.5V
/// @arg emPVD_LEVEL7 : PVD detection level set to 3.8V
/// @arg emPVD_LEVEL8 : PVD detection level set to 4.1V
/// @arg emPVD_LEVEL9 : PVD detection level set to 4.4V
/// @arg emPVD_LEVEL10: PVD detection level set to 4.7V
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_PVDLevelConfig(emPVD_Level_Typedef pvd_level)
{
SYSCFG->PDETCSR = (SYSCFG->PDETCSR & (~SYSCFG_PDETCSR_PLS)) | pvd_level;
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Enables or disables the WakeUp Pin functionality.
/// @param state: new state of the WakeUp Pin functionality.
/// This parameter can be: ENABLE or DISABLE.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_WakeUpPinCmd(FunctionalState state)
{
(state != DISABLE) ? (PWR->CR2 |= PWR_CR2_EWUP1) : (PWR->CSR &= ~PWR_CR2_EWUP1);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Enables or disables the WakeUp Pin functionality.
/// @param state: new state of the WakeUp Pin functionality.
/// This parameter can be: ENABLE or DISABLE.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_WakeUpPinXCmd(emWUP_Pin_Typedef pin, FunctionalState state)
{
(state != DISABLE) ? (PWR->CR2 |= (PWR_CR2_EWUP1 << pin)) : (PWR->CSR &= ~(PWR_CR2_EWUP1 << pin));
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Enters STOP mode.
/// @param regulator: specifies the regulator state in STOP mode.
/// This parameter can be one of the following values:
/// @arg PWR_Regulator_ON: STOP mode with regulator ON
/// @arg PWR_Regulator_LowPower: STOP mode with regulator in low power mode.
/// @param stop_entry: specifies if STOP mode in entered with WFI or WFE
/// instruction.
/// This parameter can be one of the following values:
/// @arg PWR_STOPEntry_WFI: enter STOP mode with WFI instruction
/// @arg PWR_STOPEntry_WFE: enter STOP mode with WFE instruction
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_EnterSTOPMode(emPWR_Reg_Stop_mode_Typedef regulator, emPWR_STOP_ModeEn_Typedef stop_entry)
{
MODIFY_REG(PWR->CR, PWR_CR_LDPS, regulator);
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
if(stop_entry == PWR_STOPEntry_WFI) {
__WFI();
}
else {
__WFE();
}
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Enters STANDBY mode.
/// @param None.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_EnterSTANDBYMode(void)
{
PWR->CR |= PWR_CR_PDDS;
PWR->SCR |= PWR_SCR_CWUF1 | PWR_SCR_CWUF2 | PWR_SCR_CWUF3 | PWR_SCR_CWUF4 | PWR_SCR_CWUF5 | PWR_SCR_CWUF6;
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
#if defined(__CC_ARM)
__force_stores();
#endif
__WFI();
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Checks whether the specified PWR flag is set or not.
/// @param flag: specifies the flag to check.
/// This parameter can be one of the following values:
/// @arg PWR_FLAG_WU: Wake Up flag
/// @arg PWR_FLAG_SB: StandBy flag
/// @arg PWR_FLAG_PVDO: PVD Output
/// @retval The new state of PWR_FLAG (SET or RESET).
////////////////////////////////////////////////////////////////////////////////
FlagStatus PWR_GetPVDOFlagStatus(u32 flag)
{
return (FlagStatus)(SYSCFG->PDETCSR & flag);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Clears the PWR's pending flags.
/// @param flag: specifies the flag to clear.
/// This parameter can be one of the following values:
/// @arg PWR_FLAG_WU: Wake Up flag
/// @arg PWR_FLAG_SB: StandBy flag
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_ClearPVDOFlag(u32 flag)
{
PWR->CR |= flag << 2;
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Checks whether the specified PWR flag is set or not.
/// @param flag: specifies the flag to check.
/// This parameter can be one of the following values:
/// @arg PWR_FLAG_WU: Wake Up flag
/// @arg PWR_FLAG_SB: StandBy flag
/// @arg PWR_FLAG_PVDO: PVD Output
/// @retval The new state of PWR_FLAG (SET or RESET).
////////////////////////////////////////////////////////////////////////////////
FlagStatus PWR_GetFlagStatus(u32 flag)
{
return (FlagStatus)(PWR->CSR & flag);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief Clears the PWR's pending flags.
/// @param flag: specifies the flag to clear.
/// This parameter can be one of the following values:
/// @arg PWR_FLAG_WU: Wake Up flag
/// @arg PWR_FLAG_SB: StandBy flag
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void PWR_ClearFlag(u32 flag)
{
PWR->CR |= flag << 2;
}
/// @}
/// @}
/// @}
|