fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
nameless129
Date:
Mon May 16 16:50:30 2016 +0000
Revision:
129:2e517c56bcfb
Parent:
0:9b334a45a8ff
PWM Fix:Duty 0%??H???????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32f3xx_hal_rtc.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.1.0
bogdanm 0:9b334a45a8ff 6 * @date 12-Sept-2014
bogdanm 0:9b334a45a8ff 7 * @brief RTC HAL module driver.
bogdanm 0:9b334a45a8ff 8 *
bogdanm 0:9b334a45a8ff 9 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 10 * functionalities of the Real-Time Clock (RTC) peripheral:
bogdanm 0:9b334a45a8ff 11 * - Initialization
bogdanm 0:9b334a45a8ff 12 * - Calendar (Time and Date) configuration
bogdanm 0:9b334a45a8ff 13 * - Alarms (Alarm A and Alarm B) configuration
bogdanm 0:9b334a45a8ff 14 * - WakeUp Timer configuration
bogdanm 0:9b334a45a8ff 15 * - TimeStamp configuration
bogdanm 0:9b334a45a8ff 16 * - Tampers configuration
bogdanm 0:9b334a45a8ff 17 * - Backup Data Registers configuration
bogdanm 0:9b334a45a8ff 18 * - RTC Tamper and TimeStamp Pins Selection
bogdanm 0:9b334a45a8ff 19 * - Interrupts and flags management
bogdanm 0:9b334a45a8ff 20 *
bogdanm 0:9b334a45a8ff 21 @verbatim
bogdanm 0:9b334a45a8ff 22
bogdanm 0:9b334a45a8ff 23 ===============================================================================
bogdanm 0:9b334a45a8ff 24 ##### RTC Operating Condition #####
bogdanm 0:9b334a45a8ff 25 ===============================================================================
bogdanm 0:9b334a45a8ff 26 [..] The real-time clock (RTC) and the RTC backup registers can be powered
bogdanm 0:9b334a45a8ff 27 from the VBAT voltage when the main VDD supply is powered off.
bogdanm 0:9b334a45a8ff 28 To retain the content of the RTC backup registers and supply the RTC
bogdanm 0:9b334a45a8ff 29 when VDD is turned off, VBAT pin can be connected to an optional
bogdanm 0:9b334a45a8ff 30 standby voltage supplied by a battery or by another source.
bogdanm 0:9b334a45a8ff 31
bogdanm 0:9b334a45a8ff 32 [..] To allow the RTC to operate even when the main digital supply (VDD)
bogdanm 0:9b334a45a8ff 33 is turned off, the VBAT pin powers the following blocks:
bogdanm 0:9b334a45a8ff 34 (#) The RTC
bogdanm 0:9b334a45a8ff 35 (#) The LSE oscillator
bogdanm 0:9b334a45a8ff 36 (#) PC13 to PC15 I/Os (when available)
bogdanm 0:9b334a45a8ff 37
bogdanm 0:9b334a45a8ff 38 [..] When the backup domain is supplied by VDD (analog switch connected
bogdanm 0:9b334a45a8ff 39 to VDD), the following functions are available:
bogdanm 0:9b334a45a8ff 40 (#) PC14 and PC15 can be used as either GPIO or LSE pins
bogdanm 0:9b334a45a8ff 41 (#) PC13 can be used as a GPIO or as the RTC_AF pin
bogdanm 0:9b334a45a8ff 42
bogdanm 0:9b334a45a8ff 43 [..] When the backup domain is supplied by VBAT (analog switch connected
bogdanm 0:9b334a45a8ff 44 to VBAT because VDD is not present), the following functions are available:
bogdanm 0:9b334a45a8ff 45 (#) PC14 and PC15 can be used as LSE pins only
bogdanm 0:9b334a45a8ff 46 (#) PC13 can be used as the RTC_AF pin
bogdanm 0:9b334a45a8ff 47
bogdanm 0:9b334a45a8ff 48 ##### Backup Domain Reset #####
bogdanm 0:9b334a45a8ff 49 ===============================================================================
bogdanm 0:9b334a45a8ff 50 [..] The backup domain reset sets all RTC registers and the RCC_BDCR
bogdanm 0:9b334a45a8ff 51 register to their reset values.
bogdanm 0:9b334a45a8ff 52 A backup domain reset is generated when one of the following events
bogdanm 0:9b334a45a8ff 53 occurs:
bogdanm 0:9b334a45a8ff 54 (#) Software reset, triggered by setting the BDRST bit in the
bogdanm 0:9b334a45a8ff 55 RCC Backup domain control register (RCC_BDCR).
bogdanm 0:9b334a45a8ff 56 (#) VDD or VBAT power on, if both supplies have previously been
bogdanm 0:9b334a45a8ff 57 powered off.
bogdanm 0:9b334a45a8ff 58
bogdanm 0:9b334a45a8ff 59 ##### Backup Domain Access #####
bogdanm 0:9b334a45a8ff 60 ===================================================================
bogdanm 0:9b334a45a8ff 61 [..] After reset, the backup domain (RTC registers, RTC backup data
bogdanm 0:9b334a45a8ff 62 registers and backup SRAM) is protected against possible unwanted write
bogdanm 0:9b334a45a8ff 63 accesses.
bogdanm 0:9b334a45a8ff 64
bogdanm 0:9b334a45a8ff 65 [..] To enable access to the RTC Domain and RTC registers, proceed as follows:
bogdanm 0:9b334a45a8ff 66 (#) Enable the Power Controller (PWR) APB1 interface clock using the
bogdanm 0:9b334a45a8ff 67 __PWR_CLK_ENABLE() function.
bogdanm 0:9b334a45a8ff 68 (#) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.
bogdanm 0:9b334a45a8ff 69 (#) Select the RTC clock source using the __HAL_RCC_RTC_CONFIG() function.
bogdanm 0:9b334a45a8ff 70 (#) Enable RTC Clock using the __HAL_RCC_RTC_ENABLE() function.
bogdanm 0:9b334a45a8ff 71
bogdanm 0:9b334a45a8ff 72
bogdanm 0:9b334a45a8ff 73 ##### How to use RTC Driver #####
bogdanm 0:9b334a45a8ff 74 ===================================================================
bogdanm 0:9b334a45a8ff 75 [..]
bogdanm 0:9b334a45a8ff 76 (+) Enable the RTC domain access (see description in the section above).
bogdanm 0:9b334a45a8ff 77 (+) Configure the RTC Prescaler (Asynchronous and Synchronous) and RTC hour
bogdanm 0:9b334a45a8ff 78 format using the HAL_RTC_Init() function.
bogdanm 0:9b334a45a8ff 79
bogdanm 0:9b334a45a8ff 80 *** Time and Date configuration ***
bogdanm 0:9b334a45a8ff 81 ===================================
bogdanm 0:9b334a45a8ff 82 [..]
bogdanm 0:9b334a45a8ff 83 (+) To configure the RTC Calendar (Time and Date) use the HAL_RTC_SetTime()
bogdanm 0:9b334a45a8ff 84 and HAL_RTC_SetDate() functions.
bogdanm 0:9b334a45a8ff 85 (+) To read the RTC Calendar, use the HAL_RTC_GetTime() and HAL_RTC_GetDate() functions.
bogdanm 0:9b334a45a8ff 86
bogdanm 0:9b334a45a8ff 87 *** Alarm configuration ***
bogdanm 0:9b334a45a8ff 88 ===========================
bogdanm 0:9b334a45a8ff 89 [..]
bogdanm 0:9b334a45a8ff 90 (+) To configure the RTC Alarm use the HAL_RTC_SetAlarm() function.
bogdanm 0:9b334a45a8ff 91 You can also configure the RTC Alarm with interrupt mode using the
bogdanm 0:9b334a45a8ff 92 HAL_RTC_SetAlarm_IT() function.
bogdanm 0:9b334a45a8ff 93 (+) To read the RTC Alarm, use the HAL_RTC_GetAlarm() function.
bogdanm 0:9b334a45a8ff 94
bogdanm 0:9b334a45a8ff 95 *** RTC Wakeup configuration ***
bogdanm 0:9b334a45a8ff 96 ================================
bogdanm 0:9b334a45a8ff 97 [..]
bogdanm 0:9b334a45a8ff 98 (+) To configure the RTC Wakeup Clock source and Counter use the HAL_RTC_SetWakeUpTimer()
bogdanm 0:9b334a45a8ff 99 function. You can also configure the RTC Wakeup timer with interrupt mode
bogdanm 0:9b334a45a8ff 100 using the HAL_RTC_SetWakeUpTimer_IT() function.
bogdanm 0:9b334a45a8ff 101 (+) To read the RTC WakeUp Counter register, use the HAL_RTC_GetWakeUpTimer()
bogdanm 0:9b334a45a8ff 102 function.
bogdanm 0:9b334a45a8ff 103
bogdanm 0:9b334a45a8ff 104 *** TimeStamp configuration ***
bogdanm 0:9b334a45a8ff 105 ===============================
bogdanm 0:9b334a45a8ff 106 [..]
bogdanm 0:9b334a45a8ff 107 (+) Configure the RTC_AF trigger and enables the RTC TimeStamp using the
bogdanm 0:9b334a45a8ff 108 HAL_RTC_SetTimeStamp() function. You can also configure the RTC TimeStamp with
bogdanm 0:9b334a45a8ff 109 interrupt mode using the HAL_RTC_SetTimeStamp_IT() function.
bogdanm 0:9b334a45a8ff 110 (+) To read the RTC TimeStamp Time and Date register, use the HAL_RTC_GetTimeStamp()
bogdanm 0:9b334a45a8ff 111 function.
bogdanm 0:9b334a45a8ff 112
bogdanm 0:9b334a45a8ff 113 *** Tamper configuration ***
bogdanm 0:9b334a45a8ff 114 ============================
bogdanm 0:9b334a45a8ff 115 [..]
bogdanm 0:9b334a45a8ff 116 (+) Enable the RTC Tamper and Configure the Tamper filter count, trigger Edge
bogdanm 0:9b334a45a8ff 117 or Level according to the Tamper filter (if equal to 0 Edge else Level)
bogdanm 0:9b334a45a8ff 118 value, sampling frequency, precharge or discharge and Pull-UP using the
bogdanm 0:9b334a45a8ff 119 HAL_RTC_SetTamper() function. You can configure RTC Tamper with interrupt
bogdanm 0:9b334a45a8ff 120 mode using HAL_RTC_SetTamper_IT() function.
bogdanm 0:9b334a45a8ff 121
bogdanm 0:9b334a45a8ff 122 *** Backup Data Registers configuration ***
bogdanm 0:9b334a45a8ff 123 ===========================================
bogdanm 0:9b334a45a8ff 124 [..]
bogdanm 0:9b334a45a8ff 125 (+) To write to the RTC Backup Data registers, use the HAL_RTC_BKUPWrite()
bogdanm 0:9b334a45a8ff 126 function.
bogdanm 0:9b334a45a8ff 127 (+) To read the RTC Backup Data registers, use the HAL_RTC_BKUPRead()
bogdanm 0:9b334a45a8ff 128 function.
bogdanm 0:9b334a45a8ff 129
bogdanm 0:9b334a45a8ff 130
bogdanm 0:9b334a45a8ff 131 ##### RTC and low power modes #####
bogdanm 0:9b334a45a8ff 132 ===================================================================
bogdanm 0:9b334a45a8ff 133 [..] The MCU can be woken up from a low power mode by an RTC alternate
bogdanm 0:9b334a45a8ff 134 function.
bogdanm 0:9b334a45a8ff 135 [..] The RTC alternate functions are the RTC alarms (Alarm A and Alarm B),
bogdanm 0:9b334a45a8ff 136 RTC wakeup, RTC tamper event detection and RTC time stamp event detection.
bogdanm 0:9b334a45a8ff 137 These RTC alternate functions can wake up the system from the Stop and
bogdanm 0:9b334a45a8ff 138 Standby low power modes.
bogdanm 0:9b334a45a8ff 139 [..] The system can also wake up from low power modes without depending
bogdanm 0:9b334a45a8ff 140 on an external interrupt (Auto-wakeup mode), by using the RTC alarm
bogdanm 0:9b334a45a8ff 141 or the RTC wakeup events.
bogdanm 0:9b334a45a8ff 142 [..] The RTC provides a programmable time base for waking up from the
bogdanm 0:9b334a45a8ff 143 Stop or Standby mode at regular intervals.
bogdanm 0:9b334a45a8ff 144 Wakeup from STOP and Standby modes is possible only when the RTC clock source
bogdanm 0:9b334a45a8ff 145 is LSE or LSI.
bogdanm 0:9b334a45a8ff 146
bogdanm 0:9b334a45a8ff 147 @endverbatim
bogdanm 0:9b334a45a8ff 148
bogdanm 0:9b334a45a8ff 149 ******************************************************************************
bogdanm 0:9b334a45a8ff 150 * @attention
bogdanm 0:9b334a45a8ff 151 *
bogdanm 0:9b334a45a8ff 152 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 153 *
bogdanm 0:9b334a45a8ff 154 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 155 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 156 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 157 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 158 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 159 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 160 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 161 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 162 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 163 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 164 *
bogdanm 0:9b334a45a8ff 165 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 166 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 167 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 168 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 169 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 170 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 171 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 172 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 173 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 174 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 175 *
bogdanm 0:9b334a45a8ff 176 ******************************************************************************
bogdanm 0:9b334a45a8ff 177 */
bogdanm 0:9b334a45a8ff 178
bogdanm 0:9b334a45a8ff 179 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 180 #include "stm32f3xx_hal.h"
bogdanm 0:9b334a45a8ff 181
bogdanm 0:9b334a45a8ff 182 /** @addtogroup STM32F3xx_HAL_Driver
bogdanm 0:9b334a45a8ff 183 * @{
bogdanm 0:9b334a45a8ff 184 */
bogdanm 0:9b334a45a8ff 185
bogdanm 0:9b334a45a8ff 186 /** @defgroup RTC RTC HAL module driver
bogdanm 0:9b334a45a8ff 187 * @brief RTC HAL module driver
bogdanm 0:9b334a45a8ff 188 * @{
bogdanm 0:9b334a45a8ff 189 */
bogdanm 0:9b334a45a8ff 190
bogdanm 0:9b334a45a8ff 191 #ifdef HAL_RTC_MODULE_ENABLED
bogdanm 0:9b334a45a8ff 192
bogdanm 0:9b334a45a8ff 193 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 194 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 195 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 196 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 197 /* Private function prototypes -----------------------------------------------*/
bogdanm 0:9b334a45a8ff 198 /* Exported functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 199
bogdanm 0:9b334a45a8ff 200 /** @defgroup RTC_Exported_Functions RTC Exported Functions
bogdanm 0:9b334a45a8ff 201 * @{
bogdanm 0:9b334a45a8ff 202 */
bogdanm 0:9b334a45a8ff 203
bogdanm 0:9b334a45a8ff 204 /** @defgroup RTC_Exported_Functions_Group1 Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 205 * @brief Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 206 *
bogdanm 0:9b334a45a8ff 207 @verbatim
bogdanm 0:9b334a45a8ff 208 ===============================================================================
bogdanm 0:9b334a45a8ff 209 ##### Initialization and de-initialization functions #####
bogdanm 0:9b334a45a8ff 210 ===============================================================================
bogdanm 0:9b334a45a8ff 211 [..] This section provide functions allowing to initialize and configure the
bogdanm 0:9b334a45a8ff 212 RTC Prescaler (Synchronous and Asynchronous), RTC Hour format, disable
bogdanm 0:9b334a45a8ff 213 RTC registers Write protection, enter and exit the RTC initialization mode,
bogdanm 0:9b334a45a8ff 214 RTC registers synchronization check and reference clock detection enable.
bogdanm 0:9b334a45a8ff 215 (#) The RTC Prescaler is programmed to generate the RTC 1Hz time base.
bogdanm 0:9b334a45a8ff 216 It is split into 2 programmable prescalers to minimize power consumption.
bogdanm 0:9b334a45a8ff 217 (++) A 7-bit asynchronous prescaler and A 13-bit synchronous prescaler.
bogdanm 0:9b334a45a8ff 218 (++) When both prescalers are used, it is recommended to configure the
bogdanm 0:9b334a45a8ff 219 asynchronous prescaler to a high value to minimize consumption.
bogdanm 0:9b334a45a8ff 220 (#) All RTC registers are Write protected. Writing to the RTC registers
bogdanm 0:9b334a45a8ff 221 is enabled by writing a key into the Write Protection register, RTC_WPR.
bogdanm 0:9b334a45a8ff 222 (#) To Configure the RTC Calendar, user application should enter
bogdanm 0:9b334a45a8ff 223 initialization mode. In this mode, the calendar counter is stopped
bogdanm 0:9b334a45a8ff 224 and its value can be updated. When the initialization sequence is
bogdanm 0:9b334a45a8ff 225 complete, the calendar restarts counting after 4 RTCCLK cycles.
bogdanm 0:9b334a45a8ff 226 (#) To read the calendar through the shadow registers after Calendar
bogdanm 0:9b334a45a8ff 227 initialization, calendar update or after wakeup from low power modes
bogdanm 0:9b334a45a8ff 228 the software must first clear the RSF flag. The software must then
bogdanm 0:9b334a45a8ff 229 wait until it is set again before reading the calendar, which means
bogdanm 0:9b334a45a8ff 230 that the calendar registers have been correctly copied into the
bogdanm 0:9b334a45a8ff 231 RTC_TR and RTC_DR shadow registers.The HAL_RTC_WaitForSynchro() function
bogdanm 0:9b334a45a8ff 232 implements the above software sequence (RSF clear and RSF check).
bogdanm 0:9b334a45a8ff 233
bogdanm 0:9b334a45a8ff 234 @endverbatim
bogdanm 0:9b334a45a8ff 235 * @{
bogdanm 0:9b334a45a8ff 236 */
bogdanm 0:9b334a45a8ff 237
bogdanm 0:9b334a45a8ff 238 /**
bogdanm 0:9b334a45a8ff 239 * @brief Initializes the RTC peripheral
bogdanm 0:9b334a45a8ff 240 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 241 * @retval HAL status
bogdanm 0:9b334a45a8ff 242 */
bogdanm 0:9b334a45a8ff 243 HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc)
bogdanm 0:9b334a45a8ff 244 {
bogdanm 0:9b334a45a8ff 245 /* Check the RTC peripheral state */
bogdanm 0:9b334a45a8ff 246 if(hrtc == HAL_NULL)
bogdanm 0:9b334a45a8ff 247 {
bogdanm 0:9b334a45a8ff 248 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 249 }
bogdanm 0:9b334a45a8ff 250
bogdanm 0:9b334a45a8ff 251 /* Check the parameters */
bogdanm 0:9b334a45a8ff 252 assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));
bogdanm 0:9b334a45a8ff 253 assert_param(IS_RTC_HOUR_FORMAT(hrtc->Init.HourFormat));
bogdanm 0:9b334a45a8ff 254 assert_param(IS_RTC_ASYNCH_PREDIV(hrtc->Init.AsynchPrediv));
bogdanm 0:9b334a45a8ff 255 assert_param(IS_RTC_SYNCH_PREDIV(hrtc->Init.SynchPrediv));
bogdanm 0:9b334a45a8ff 256 assert_param(IS_RTC_OUTPUT(hrtc->Init.OutPut));
bogdanm 0:9b334a45a8ff 257 assert_param(IS_RTC_OUTPUT_POL(hrtc->Init.OutPutPolarity));
bogdanm 0:9b334a45a8ff 258 assert_param(IS_RTC_OUTPUT_TYPE(hrtc->Init.OutPutType));
bogdanm 0:9b334a45a8ff 259
bogdanm 0:9b334a45a8ff 260 if(hrtc->State == HAL_RTC_STATE_RESET)
bogdanm 0:9b334a45a8ff 261 {
bogdanm 0:9b334a45a8ff 262 /* Initialize RTC MSP */
bogdanm 0:9b334a45a8ff 263 HAL_RTC_MspInit(hrtc);
bogdanm 0:9b334a45a8ff 264 }
bogdanm 0:9b334a45a8ff 265
bogdanm 0:9b334a45a8ff 266 /* Set RTC state */
bogdanm 0:9b334a45a8ff 267 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 268
bogdanm 0:9b334a45a8ff 269 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 270 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 271
bogdanm 0:9b334a45a8ff 272 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 273 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 274 {
bogdanm 0:9b334a45a8ff 275 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 276 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 277
bogdanm 0:9b334a45a8ff 278 /* Set RTC state */
bogdanm 0:9b334a45a8ff 279 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 280
bogdanm 0:9b334a45a8ff 281 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 282 }
bogdanm 0:9b334a45a8ff 283 else
bogdanm 0:9b334a45a8ff 284 {
bogdanm 0:9b334a45a8ff 285 /* Clear RTC_CR FMT, OSEL and POL Bits */
bogdanm 0:9b334a45a8ff 286 hrtc->Instance->CR &= ((uint32_t)~(RTC_CR_FMT | RTC_CR_OSEL | RTC_CR_POL));
bogdanm 0:9b334a45a8ff 287 /* Set RTC_CR register */
bogdanm 0:9b334a45a8ff 288 hrtc->Instance->CR |= (uint32_t)(hrtc->Init.HourFormat | hrtc->Init.OutPut | hrtc->Init.OutPutPolarity);
bogdanm 0:9b334a45a8ff 289
bogdanm 0:9b334a45a8ff 290 /* Configure the RTC PRER */
bogdanm 0:9b334a45a8ff 291 hrtc->Instance->PRER = (uint32_t)(hrtc->Init.SynchPrediv);
bogdanm 0:9b334a45a8ff 292 hrtc->Instance->PRER |= (uint32_t)(hrtc->Init.AsynchPrediv << 16);
bogdanm 0:9b334a45a8ff 293
bogdanm 0:9b334a45a8ff 294 /* Exit Initialization mode */
bogdanm 0:9b334a45a8ff 295 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
bogdanm 0:9b334a45a8ff 296
bogdanm 0:9b334a45a8ff 297 hrtc->Instance->TAFCR &= (uint32_t)~RTC_TAFCR_ALARMOUTTYPE;
bogdanm 0:9b334a45a8ff 298 hrtc->Instance->TAFCR |= (uint32_t)(hrtc->Init.OutPutType);
bogdanm 0:9b334a45a8ff 299
bogdanm 0:9b334a45a8ff 300 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 301 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 302
bogdanm 0:9b334a45a8ff 303 /* Set RTC state */
bogdanm 0:9b334a45a8ff 304 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 305
bogdanm 0:9b334a45a8ff 306 return HAL_OK;
bogdanm 0:9b334a45a8ff 307 }
bogdanm 0:9b334a45a8ff 308 }
bogdanm 0:9b334a45a8ff 309
bogdanm 0:9b334a45a8ff 310 /**
bogdanm 0:9b334a45a8ff 311 * @brief DeInitializes the RTC peripheral
bogdanm 0:9b334a45a8ff 312 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 313 * @note This function doesn't reset the RTC Backup Data registers.
bogdanm 0:9b334a45a8ff 314 * @retval HAL status
bogdanm 0:9b334a45a8ff 315 */
bogdanm 0:9b334a45a8ff 316 HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc)
bogdanm 0:9b334a45a8ff 317 {
bogdanm 0:9b334a45a8ff 318 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 319
bogdanm 0:9b334a45a8ff 320 /* Check the parameters */
bogdanm 0:9b334a45a8ff 321 assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));
bogdanm 0:9b334a45a8ff 322
bogdanm 0:9b334a45a8ff 323 /* Set RTC state */
bogdanm 0:9b334a45a8ff 324 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 325
bogdanm 0:9b334a45a8ff 326 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 327 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 328
bogdanm 0:9b334a45a8ff 329 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 330 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 331 {
bogdanm 0:9b334a45a8ff 332 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 333 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 334
bogdanm 0:9b334a45a8ff 335 /* Set RTC state */
bogdanm 0:9b334a45a8ff 336 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 337
bogdanm 0:9b334a45a8ff 338 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 339 }
bogdanm 0:9b334a45a8ff 340 else
bogdanm 0:9b334a45a8ff 341 {
bogdanm 0:9b334a45a8ff 342 /* Reset TR, DR and CR registers */
bogdanm 0:9b334a45a8ff 343 hrtc->Instance->TR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 344 hrtc->Instance->DR = (uint32_t)0x00002101;
bogdanm 0:9b334a45a8ff 345 /* Reset All CR bits except CR[2:0] */
bogdanm 0:9b334a45a8ff 346 hrtc->Instance->CR &= (uint32_t)0x00000007;
bogdanm 0:9b334a45a8ff 347
bogdanm 0:9b334a45a8ff 348 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 349
bogdanm 0:9b334a45a8ff 350 /* Wait till WUTWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 351 while(((hrtc->Instance->ISR) & RTC_ISR_WUTWF) == (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 352 {
bogdanm 0:9b334a45a8ff 353 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 354 {
bogdanm 0:9b334a45a8ff 355 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 356 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 357
bogdanm 0:9b334a45a8ff 358 /* Set RTC state */
bogdanm 0:9b334a45a8ff 359 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 360
bogdanm 0:9b334a45a8ff 361 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 362 }
bogdanm 0:9b334a45a8ff 363 }
bogdanm 0:9b334a45a8ff 364
bogdanm 0:9b334a45a8ff 365 /* Reset all RTC CR register bits */
bogdanm 0:9b334a45a8ff 366 hrtc->Instance->CR &= (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 367 hrtc->Instance->WUTR = (uint32_t)0x0000FFFF;
bogdanm 0:9b334a45a8ff 368 hrtc->Instance->PRER = (uint32_t)0x007F00FF;
bogdanm 0:9b334a45a8ff 369 hrtc->Instance->ALRMAR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 370 hrtc->Instance->ALRMBR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 371 hrtc->Instance->SHIFTR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 372 hrtc->Instance->CALR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 373 hrtc->Instance->ALRMASSR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 374 hrtc->Instance->ALRMBSSR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 375
bogdanm 0:9b334a45a8ff 376 /* Reset ISR register and exit initialization mode */
bogdanm 0:9b334a45a8ff 377 hrtc->Instance->ISR = (uint32_t)0x00000000;
bogdanm 0:9b334a45a8ff 378
bogdanm 0:9b334a45a8ff 379 /* Reset Tamper and alternate functions configuration register */
bogdanm 0:9b334a45a8ff 380 hrtc->Instance->TAFCR = 0x00000000;
bogdanm 0:9b334a45a8ff 381
bogdanm 0:9b334a45a8ff 382 /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
bogdanm 0:9b334a45a8ff 383 if((hrtc->Instance->CR & RTC_CR_BYPSHAD) == RESET)
bogdanm 0:9b334a45a8ff 384 {
bogdanm 0:9b334a45a8ff 385 if(HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 386 {
bogdanm 0:9b334a45a8ff 387 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 388 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 389
bogdanm 0:9b334a45a8ff 390 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 391
bogdanm 0:9b334a45a8ff 392 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 393 }
bogdanm 0:9b334a45a8ff 394 }
bogdanm 0:9b334a45a8ff 395 }
bogdanm 0:9b334a45a8ff 396
bogdanm 0:9b334a45a8ff 397 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 398 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 399
bogdanm 0:9b334a45a8ff 400 /* De-Initialize RTC MSP */
bogdanm 0:9b334a45a8ff 401 HAL_RTC_MspDeInit(hrtc);
bogdanm 0:9b334a45a8ff 402
bogdanm 0:9b334a45a8ff 403 hrtc->State = HAL_RTC_STATE_RESET;
bogdanm 0:9b334a45a8ff 404
bogdanm 0:9b334a45a8ff 405 /* Release Lock */
bogdanm 0:9b334a45a8ff 406 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 407
bogdanm 0:9b334a45a8ff 408 return HAL_OK;
bogdanm 0:9b334a45a8ff 409 }
bogdanm 0:9b334a45a8ff 410
bogdanm 0:9b334a45a8ff 411 /**
bogdanm 0:9b334a45a8ff 412 * @brief Initializes the RTC MSP.
bogdanm 0:9b334a45a8ff 413 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 414 * @retval None
bogdanm 0:9b334a45a8ff 415 */
bogdanm 0:9b334a45a8ff 416 __weak void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 417 {
bogdanm 0:9b334a45a8ff 418 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 419 the HAL_RTC_MspInit could be implenetd in the user file
bogdanm 0:9b334a45a8ff 420 */
bogdanm 0:9b334a45a8ff 421 }
bogdanm 0:9b334a45a8ff 422
bogdanm 0:9b334a45a8ff 423 /**
bogdanm 0:9b334a45a8ff 424 * @brief DeInitializes the RTC MSP.
bogdanm 0:9b334a45a8ff 425 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 426 * @retval None
bogdanm 0:9b334a45a8ff 427 */
bogdanm 0:9b334a45a8ff 428 __weak void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 429 {
bogdanm 0:9b334a45a8ff 430 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 431 the HAL_RTC_MspDeInit could be implenetd in the user file
bogdanm 0:9b334a45a8ff 432 */
bogdanm 0:9b334a45a8ff 433 }
bogdanm 0:9b334a45a8ff 434
bogdanm 0:9b334a45a8ff 435 /**
bogdanm 0:9b334a45a8ff 436 * @}
bogdanm 0:9b334a45a8ff 437 */
bogdanm 0:9b334a45a8ff 438
bogdanm 0:9b334a45a8ff 439 /** @defgroup RTC_Exported_Functions_Group2 RTC Time and Date functions
bogdanm 0:9b334a45a8ff 440 * @brief RTC Time and Date functions
bogdanm 0:9b334a45a8ff 441 *
bogdanm 0:9b334a45a8ff 442 @verbatim
bogdanm 0:9b334a45a8ff 443 ===============================================================================
bogdanm 0:9b334a45a8ff 444 ##### RTC Time and Date functions #####
bogdanm 0:9b334a45a8ff 445 ===============================================================================
bogdanm 0:9b334a45a8ff 446
bogdanm 0:9b334a45a8ff 447 [..] This section provide functions allowing to configure Time and Date features
bogdanm 0:9b334a45a8ff 448
bogdanm 0:9b334a45a8ff 449 @endverbatim
bogdanm 0:9b334a45a8ff 450 * @{
bogdanm 0:9b334a45a8ff 451 */
bogdanm 0:9b334a45a8ff 452
bogdanm 0:9b334a45a8ff 453 /**
bogdanm 0:9b334a45a8ff 454 * @brief Sets RTC current time.
bogdanm 0:9b334a45a8ff 455 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 456 * @param sTime: Pointer to Time structure
bogdanm 0:9b334a45a8ff 457 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 458 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 459 * @arg Format_BIN: Binary data format
bogdanm 0:9b334a45a8ff 460 * @arg Format_BCD: BCD data format
bogdanm 0:9b334a45a8ff 461 * @retval HAL status
bogdanm 0:9b334a45a8ff 462 */
bogdanm 0:9b334a45a8ff 463 HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
bogdanm 0:9b334a45a8ff 464 {
bogdanm 0:9b334a45a8ff 465 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 466
bogdanm 0:9b334a45a8ff 467 /* Check the parameters */
bogdanm 0:9b334a45a8ff 468 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 469 assert_param(IS_RTC_DAYLIGHT_SAVING(sTime->DayLightSaving));
bogdanm 0:9b334a45a8ff 470 assert_param(IS_RTC_STORE_OPERATION(sTime->StoreOperation));
bogdanm 0:9b334a45a8ff 471
bogdanm 0:9b334a45a8ff 472 /* Process Locked */
bogdanm 0:9b334a45a8ff 473 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 474
bogdanm 0:9b334a45a8ff 475 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 476
bogdanm 0:9b334a45a8ff 477 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 478 {
bogdanm 0:9b334a45a8ff 479 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 480 {
bogdanm 0:9b334a45a8ff 481 assert_param(IS_RTC_HOUR12(sTime->Hours));
bogdanm 0:9b334a45a8ff 482 assert_param(IS_RTC_HOURFORMAT12(sTime->TimeFormat));
bogdanm 0:9b334a45a8ff 483 }
bogdanm 0:9b334a45a8ff 484 else
bogdanm 0:9b334a45a8ff 485 {
bogdanm 0:9b334a45a8ff 486 sTime->TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 487 assert_param(IS_RTC_HOUR24(sTime->Hours));
bogdanm 0:9b334a45a8ff 488 }
bogdanm 0:9b334a45a8ff 489 assert_param(IS_RTC_MINUTES(sTime->Minutes));
bogdanm 0:9b334a45a8ff 490 assert_param(IS_RTC_SECONDS(sTime->Seconds));
bogdanm 0:9b334a45a8ff 491
bogdanm 0:9b334a45a8ff 492 tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(sTime->Hours) << 16) | \
bogdanm 0:9b334a45a8ff 493 ((uint32_t)RTC_ByteToBcd2(sTime->Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 494 ((uint32_t)RTC_ByteToBcd2(sTime->Seconds)) | \
bogdanm 0:9b334a45a8ff 495 (((uint32_t)sTime->TimeFormat) << 16));
bogdanm 0:9b334a45a8ff 496 }
bogdanm 0:9b334a45a8ff 497 else
bogdanm 0:9b334a45a8ff 498 {
bogdanm 0:9b334a45a8ff 499 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 500 {
bogdanm 0:9b334a45a8ff 501 tmpreg = RTC_Bcd2ToByte(sTime->Hours);
bogdanm 0:9b334a45a8ff 502 assert_param(IS_RTC_HOUR12(tmpreg));
bogdanm 0:9b334a45a8ff 503 assert_param(IS_RTC_HOURFORMAT12(sTime->TimeFormat));
bogdanm 0:9b334a45a8ff 504 }
bogdanm 0:9b334a45a8ff 505 else
bogdanm 0:9b334a45a8ff 506 {
bogdanm 0:9b334a45a8ff 507 sTime->TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 508 assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sTime->Hours)));
bogdanm 0:9b334a45a8ff 509 }
bogdanm 0:9b334a45a8ff 510 assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sTime->Minutes)));
bogdanm 0:9b334a45a8ff 511 assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sTime->Seconds)));
bogdanm 0:9b334a45a8ff 512 tmpreg = (((uint32_t)(sTime->Hours) << 16) | \
bogdanm 0:9b334a45a8ff 513 ((uint32_t)(sTime->Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 514 ((uint32_t)sTime->Seconds) | \
bogdanm 0:9b334a45a8ff 515 ((uint32_t)(sTime->TimeFormat) << 16));
bogdanm 0:9b334a45a8ff 516 }
bogdanm 0:9b334a45a8ff 517
bogdanm 0:9b334a45a8ff 518 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 519 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 520
bogdanm 0:9b334a45a8ff 521 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 522 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 523 {
bogdanm 0:9b334a45a8ff 524 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 525 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 526
bogdanm 0:9b334a45a8ff 527 /* Set RTC state */
bogdanm 0:9b334a45a8ff 528 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 529
bogdanm 0:9b334a45a8ff 530 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 531 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 532
bogdanm 0:9b334a45a8ff 533 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 534 }
bogdanm 0:9b334a45a8ff 535 else
bogdanm 0:9b334a45a8ff 536 {
bogdanm 0:9b334a45a8ff 537 /* Set the RTC_TR register */
bogdanm 0:9b334a45a8ff 538 hrtc->Instance->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 539
bogdanm 0:9b334a45a8ff 540 /* Clear the bits to be configured */
bogdanm 0:9b334a45a8ff 541 hrtc->Instance->CR &= (uint32_t)~RTC_CR_BCK;
bogdanm 0:9b334a45a8ff 542
bogdanm 0:9b334a45a8ff 543 /* Configure the RTC_CR register */
bogdanm 0:9b334a45a8ff 544 hrtc->Instance->CR |= (uint32_t)(sTime->DayLightSaving | sTime->StoreOperation);
bogdanm 0:9b334a45a8ff 545
bogdanm 0:9b334a45a8ff 546 /* Exit Initialization mode */
bogdanm 0:9b334a45a8ff 547 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
bogdanm 0:9b334a45a8ff 548
bogdanm 0:9b334a45a8ff 549 /* If CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
bogdanm 0:9b334a45a8ff 550 if((hrtc->Instance->CR & RTC_CR_BYPSHAD) == RESET)
bogdanm 0:9b334a45a8ff 551 {
bogdanm 0:9b334a45a8ff 552 if(HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 553 {
bogdanm 0:9b334a45a8ff 554 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 555 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 556
bogdanm 0:9b334a45a8ff 557 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 558
bogdanm 0:9b334a45a8ff 559 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 560 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 561
bogdanm 0:9b334a45a8ff 562 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 563 }
bogdanm 0:9b334a45a8ff 564 }
bogdanm 0:9b334a45a8ff 565
bogdanm 0:9b334a45a8ff 566 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 567 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 568
bogdanm 0:9b334a45a8ff 569 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 570
bogdanm 0:9b334a45a8ff 571 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 572
bogdanm 0:9b334a45a8ff 573 return HAL_OK;
bogdanm 0:9b334a45a8ff 574 }
bogdanm 0:9b334a45a8ff 575 }
bogdanm 0:9b334a45a8ff 576
bogdanm 0:9b334a45a8ff 577 /**
bogdanm 0:9b334a45a8ff 578 * @brief Gets RTC current time.
bogdanm 0:9b334a45a8ff 579 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 580 * @param sTime: Pointer to Time structure
bogdanm 0:9b334a45a8ff 581 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 582 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 583 * @arg Format_BIN: Binary data format
bogdanm 0:9b334a45a8ff 584 * @arg Format_BCD: BCD data format
bogdanm 0:9b334a45a8ff 585 * @note Call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values
bogdanm 0:9b334a45a8ff 586 * in the higher-order calendar shadow registers.
bogdanm 0:9b334a45a8ff 587 * @retval HAL status
bogdanm 0:9b334a45a8ff 588 */
bogdanm 0:9b334a45a8ff 589 HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
bogdanm 0:9b334a45a8ff 590 {
bogdanm 0:9b334a45a8ff 591 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 592
bogdanm 0:9b334a45a8ff 593 /* Check the parameters */
bogdanm 0:9b334a45a8ff 594 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 595
bogdanm 0:9b334a45a8ff 596 /* Get subseconds values from the correspondent registers*/
bogdanm 0:9b334a45a8ff 597 sTime->SubSeconds = (uint32_t)(hrtc->Instance->SSR);
bogdanm 0:9b334a45a8ff 598
bogdanm 0:9b334a45a8ff 599 /* Get the TR register */
bogdanm 0:9b334a45a8ff 600 tmpreg = (uint32_t)(hrtc->Instance->TR & RTC_TR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 601
bogdanm 0:9b334a45a8ff 602 /* Fill the structure fields with the read parameters */
bogdanm 0:9b334a45a8ff 603 sTime->Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
bogdanm 0:9b334a45a8ff 604 sTime->Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
bogdanm 0:9b334a45a8ff 605 sTime->Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
bogdanm 0:9b334a45a8ff 606 sTime->TimeFormat = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
bogdanm 0:9b334a45a8ff 607
bogdanm 0:9b334a45a8ff 608 /* Check the input parameters format */
bogdanm 0:9b334a45a8ff 609 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 610 {
bogdanm 0:9b334a45a8ff 611 /* Convert the time structure parameters to Binary format */
bogdanm 0:9b334a45a8ff 612 sTime->Hours = (uint8_t)RTC_Bcd2ToByte(sTime->Hours);
bogdanm 0:9b334a45a8ff 613 sTime->Minutes = (uint8_t)RTC_Bcd2ToByte(sTime->Minutes);
bogdanm 0:9b334a45a8ff 614 sTime->Seconds = (uint8_t)RTC_Bcd2ToByte(sTime->Seconds);
bogdanm 0:9b334a45a8ff 615 }
bogdanm 0:9b334a45a8ff 616
bogdanm 0:9b334a45a8ff 617 return HAL_OK;
bogdanm 0:9b334a45a8ff 618 }
bogdanm 0:9b334a45a8ff 619
bogdanm 0:9b334a45a8ff 620 /**
bogdanm 0:9b334a45a8ff 621 * @brief Sets RTC current date.
bogdanm 0:9b334a45a8ff 622 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 623 * @param sDate: Pointer to date structure
bogdanm 0:9b334a45a8ff 624 * @param Format: specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 625 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 626 * @arg Format_BIN: Binary data format
bogdanm 0:9b334a45a8ff 627 * @arg Format_BCD: BCD data format
bogdanm 0:9b334a45a8ff 628 * @retval HAL status
bogdanm 0:9b334a45a8ff 629 */
bogdanm 0:9b334a45a8ff 630 HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
bogdanm 0:9b334a45a8ff 631 {
bogdanm 0:9b334a45a8ff 632 uint32_t datetmpreg = 0;
bogdanm 0:9b334a45a8ff 633
bogdanm 0:9b334a45a8ff 634 /* Check the parameters */
bogdanm 0:9b334a45a8ff 635 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 636
bogdanm 0:9b334a45a8ff 637 /* Process Locked */
bogdanm 0:9b334a45a8ff 638 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 639
bogdanm 0:9b334a45a8ff 640 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 641
bogdanm 0:9b334a45a8ff 642 if((Format == FORMAT_BIN) && ((sDate->Month & 0x10) == 0x10))
bogdanm 0:9b334a45a8ff 643 {
bogdanm 0:9b334a45a8ff 644 sDate->Month = (uint8_t)((sDate->Month & (uint8_t)~(0x10)) + (uint8_t)0x0A);
bogdanm 0:9b334a45a8ff 645 }
bogdanm 0:9b334a45a8ff 646
bogdanm 0:9b334a45a8ff 647 assert_param(IS_RTC_WEEKDAY(sDate->WeekDay));
bogdanm 0:9b334a45a8ff 648
bogdanm 0:9b334a45a8ff 649 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 650 {
bogdanm 0:9b334a45a8ff 651 assert_param(IS_RTC_YEAR(sDate->Year));
bogdanm 0:9b334a45a8ff 652 assert_param(IS_RTC_MONTH(sDate->Month));
bogdanm 0:9b334a45a8ff 653 assert_param(IS_RTC_DATE(sDate->Date));
bogdanm 0:9b334a45a8ff 654
bogdanm 0:9b334a45a8ff 655 datetmpreg = (((uint32_t)RTC_ByteToBcd2(sDate->Year) << 16) | \
bogdanm 0:9b334a45a8ff 656 ((uint32_t)RTC_ByteToBcd2(sDate->Month) << 8) | \
bogdanm 0:9b334a45a8ff 657 ((uint32_t)RTC_ByteToBcd2(sDate->Date)) | \
bogdanm 0:9b334a45a8ff 658 ((uint32_t)sDate->WeekDay << 13));
bogdanm 0:9b334a45a8ff 659 }
bogdanm 0:9b334a45a8ff 660 else
bogdanm 0:9b334a45a8ff 661 {
bogdanm 0:9b334a45a8ff 662 assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(sDate->Year)));
bogdanm 0:9b334a45a8ff 663 datetmpreg = RTC_Bcd2ToByte(sDate->Month);
bogdanm 0:9b334a45a8ff 664 assert_param(IS_RTC_MONTH(datetmpreg));
bogdanm 0:9b334a45a8ff 665 datetmpreg = RTC_Bcd2ToByte(sDate->Date);
bogdanm 0:9b334a45a8ff 666 assert_param(IS_RTC_DATE(datetmpreg));
bogdanm 0:9b334a45a8ff 667
bogdanm 0:9b334a45a8ff 668 datetmpreg = ((((uint32_t)sDate->Year) << 16) | \
bogdanm 0:9b334a45a8ff 669 (((uint32_t)sDate->Month) << 8) | \
bogdanm 0:9b334a45a8ff 670 ((uint32_t)sDate->Date) | \
bogdanm 0:9b334a45a8ff 671 (((uint32_t)sDate->WeekDay) << 13));
bogdanm 0:9b334a45a8ff 672 }
bogdanm 0:9b334a45a8ff 673
bogdanm 0:9b334a45a8ff 674 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 675 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 676
bogdanm 0:9b334a45a8ff 677 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 678 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 679 {
bogdanm 0:9b334a45a8ff 680 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 681 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 682
bogdanm 0:9b334a45a8ff 683 /* Set RTC state*/
bogdanm 0:9b334a45a8ff 684 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 685
bogdanm 0:9b334a45a8ff 686 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 687 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 688
bogdanm 0:9b334a45a8ff 689 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 690 }
bogdanm 0:9b334a45a8ff 691 else
bogdanm 0:9b334a45a8ff 692 {
bogdanm 0:9b334a45a8ff 693 /* Set the RTC_DR register */
bogdanm 0:9b334a45a8ff 694 hrtc->Instance->DR = (uint32_t)(datetmpreg & RTC_DR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 695
bogdanm 0:9b334a45a8ff 696 /* Exit Initialization mode */
bogdanm 0:9b334a45a8ff 697 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
bogdanm 0:9b334a45a8ff 698
bogdanm 0:9b334a45a8ff 699 /* If CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
bogdanm 0:9b334a45a8ff 700 if((hrtc->Instance->CR & RTC_CR_BYPSHAD) == RESET)
bogdanm 0:9b334a45a8ff 701 {
bogdanm 0:9b334a45a8ff 702 if(HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 703 {
bogdanm 0:9b334a45a8ff 704 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 705 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 706
bogdanm 0:9b334a45a8ff 707 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 708
bogdanm 0:9b334a45a8ff 709 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 710 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 711
bogdanm 0:9b334a45a8ff 712 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 713 }
bogdanm 0:9b334a45a8ff 714 }
bogdanm 0:9b334a45a8ff 715
bogdanm 0:9b334a45a8ff 716 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 717 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 718
bogdanm 0:9b334a45a8ff 719 hrtc->State = HAL_RTC_STATE_READY ;
bogdanm 0:9b334a45a8ff 720
bogdanm 0:9b334a45a8ff 721 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 722 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 723
bogdanm 0:9b334a45a8ff 724 return HAL_OK;
bogdanm 0:9b334a45a8ff 725 }
bogdanm 0:9b334a45a8ff 726 }
bogdanm 0:9b334a45a8ff 727
bogdanm 0:9b334a45a8ff 728 /**
bogdanm 0:9b334a45a8ff 729 * @brief Gets RTC current date.
bogdanm 0:9b334a45a8ff 730 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 731 * @param sDate: Pointer to Date structure
bogdanm 0:9b334a45a8ff 732 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 733 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 734 * @arg Format_BIN : Binary data format
bogdanm 0:9b334a45a8ff 735 * @arg Format_BCD : BCD data format
bogdanm 0:9b334a45a8ff 736 * @retval HAL status
bogdanm 0:9b334a45a8ff 737 */
bogdanm 0:9b334a45a8ff 738 HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
bogdanm 0:9b334a45a8ff 739 {
bogdanm 0:9b334a45a8ff 740 uint32_t datetmpreg = 0;
bogdanm 0:9b334a45a8ff 741
bogdanm 0:9b334a45a8ff 742 /* Check the parameters */
bogdanm 0:9b334a45a8ff 743 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 744
bogdanm 0:9b334a45a8ff 745 /* Get the DR register */
bogdanm 0:9b334a45a8ff 746 datetmpreg = (uint32_t)(hrtc->Instance->DR & RTC_DR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 747
bogdanm 0:9b334a45a8ff 748 /* Fill the structure fields with the read parameters */
bogdanm 0:9b334a45a8ff 749 sDate->Year = (uint8_t)((datetmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
bogdanm 0:9b334a45a8ff 750 sDate->Month = (uint8_t)((datetmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
bogdanm 0:9b334a45a8ff 751 sDate->Date = (uint8_t)(datetmpreg & (RTC_DR_DT | RTC_DR_DU));
bogdanm 0:9b334a45a8ff 752 sDate->WeekDay = (uint8_t)((datetmpreg & (RTC_DR_WDU)) >> 13);
bogdanm 0:9b334a45a8ff 753
bogdanm 0:9b334a45a8ff 754 /* Check the input parameters format */
bogdanm 0:9b334a45a8ff 755 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 756 {
bogdanm 0:9b334a45a8ff 757 /* Convert the date structure parameters to Binary format */
bogdanm 0:9b334a45a8ff 758 sDate->Year = (uint8_t)RTC_Bcd2ToByte(sDate->Year);
bogdanm 0:9b334a45a8ff 759 sDate->Month = (uint8_t)RTC_Bcd2ToByte(sDate->Month);
bogdanm 0:9b334a45a8ff 760 sDate->Date = (uint8_t)RTC_Bcd2ToByte(sDate->Date);
bogdanm 0:9b334a45a8ff 761 }
bogdanm 0:9b334a45a8ff 762 return HAL_OK;
bogdanm 0:9b334a45a8ff 763 }
bogdanm 0:9b334a45a8ff 764
bogdanm 0:9b334a45a8ff 765 /**
bogdanm 0:9b334a45a8ff 766 * @}
bogdanm 0:9b334a45a8ff 767 */
bogdanm 0:9b334a45a8ff 768
bogdanm 0:9b334a45a8ff 769 /** @defgroup RTC_Exported_Functions_Group3 RTC Alarm functions
bogdanm 0:9b334a45a8ff 770 * @brief RTC Alarm functions
bogdanm 0:9b334a45a8ff 771 *
bogdanm 0:9b334a45a8ff 772 @verbatim
bogdanm 0:9b334a45a8ff 773 ===============================================================================
bogdanm 0:9b334a45a8ff 774 ##### RTC Alarm functions #####
bogdanm 0:9b334a45a8ff 775 ===============================================================================
bogdanm 0:9b334a45a8ff 776
bogdanm 0:9b334a45a8ff 777 [..] This section provide functions allowing to configure Alarm feature
bogdanm 0:9b334a45a8ff 778
bogdanm 0:9b334a45a8ff 779 @endverbatim
bogdanm 0:9b334a45a8ff 780 * @{
bogdanm 0:9b334a45a8ff 781 */
bogdanm 0:9b334a45a8ff 782 /**
bogdanm 0:9b334a45a8ff 783 * @brief Sets the specified RTC Alarm.
bogdanm 0:9b334a45a8ff 784 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 785 * @param sAlarm: Pointer to Alarm structure
bogdanm 0:9b334a45a8ff 786 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 787 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 788 * @arg Format_BIN: Binary data format
bogdanm 0:9b334a45a8ff 789 * @arg Format_BCD: BCD data format
bogdanm 0:9b334a45a8ff 790 * @retval HAL status
bogdanm 0:9b334a45a8ff 791 */
bogdanm 0:9b334a45a8ff 792 HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
bogdanm 0:9b334a45a8ff 793 {
bogdanm 0:9b334a45a8ff 794 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 795 uint32_t tmpreg = 0, subsecondtmpreg = 0;
bogdanm 0:9b334a45a8ff 796
bogdanm 0:9b334a45a8ff 797 /* Check the parameters */
bogdanm 0:9b334a45a8ff 798 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 799 assert_param(IS_ALARM(sAlarm->Alarm));
bogdanm 0:9b334a45a8ff 800 assert_param(IS_ALARM_MASK(sAlarm->AlarmMask));
bogdanm 0:9b334a45a8ff 801 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_SEL(sAlarm->AlarmDateWeekDaySel));
bogdanm 0:9b334a45a8ff 802 assert_param(IS_RTC_ALARM_SUB_SECOND_VALUE(sAlarm->AlarmTime.SubSeconds));
bogdanm 0:9b334a45a8ff 803 assert_param(IS_RTC_ALARM_SUB_SECOND_MASK(sAlarm->AlarmSubSecondMask));
bogdanm 0:9b334a45a8ff 804
bogdanm 0:9b334a45a8ff 805 /* Process Locked */
bogdanm 0:9b334a45a8ff 806 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 807
bogdanm 0:9b334a45a8ff 808 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 809
bogdanm 0:9b334a45a8ff 810 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 811 {
bogdanm 0:9b334a45a8ff 812 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 813 {
bogdanm 0:9b334a45a8ff 814 assert_param(IS_RTC_HOUR12(sAlarm->AlarmTime.Hours));
bogdanm 0:9b334a45a8ff 815 assert_param(IS_RTC_HOURFORMAT12(sAlarm->AlarmTime.TimeFormat));
bogdanm 0:9b334a45a8ff 816 }
bogdanm 0:9b334a45a8ff 817 else
bogdanm 0:9b334a45a8ff 818 {
bogdanm 0:9b334a45a8ff 819 sAlarm->AlarmTime.TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 820 assert_param(IS_RTC_HOUR24(sAlarm->AlarmTime.Hours));
bogdanm 0:9b334a45a8ff 821 }
bogdanm 0:9b334a45a8ff 822 assert_param(IS_RTC_MINUTES(sAlarm->AlarmTime.Minutes));
bogdanm 0:9b334a45a8ff 823 assert_param(IS_RTC_SECONDS(sAlarm->AlarmTime.Seconds));
bogdanm 0:9b334a45a8ff 824
bogdanm 0:9b334a45a8ff 825 if(sAlarm->AlarmDateWeekDaySel == RTC_ALARMDATEWEEKDAYSEL_DATE)
bogdanm 0:9b334a45a8ff 826 {
bogdanm 0:9b334a45a8ff 827 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(sAlarm->AlarmDateWeekDay));
bogdanm 0:9b334a45a8ff 828 }
bogdanm 0:9b334a45a8ff 829 else
bogdanm 0:9b334a45a8ff 830 {
bogdanm 0:9b334a45a8ff 831 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(sAlarm->AlarmDateWeekDay));
bogdanm 0:9b334a45a8ff 832 }
bogdanm 0:9b334a45a8ff 833
bogdanm 0:9b334a45a8ff 834 tmpreg = (((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmTime.Hours) << 16) | \
bogdanm 0:9b334a45a8ff 835 ((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmTime.Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 836 ((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmTime.Seconds)) | \
bogdanm 0:9b334a45a8ff 837 ((uint32_t)(sAlarm->AlarmTime.TimeFormat) << 16) | \
bogdanm 0:9b334a45a8ff 838 ((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmDateWeekDay) << 24) | \
bogdanm 0:9b334a45a8ff 839 ((uint32_t)sAlarm->AlarmDateWeekDaySel) | \
bogdanm 0:9b334a45a8ff 840 ((uint32_t)sAlarm->AlarmMask));
bogdanm 0:9b334a45a8ff 841 }
bogdanm 0:9b334a45a8ff 842 else
bogdanm 0:9b334a45a8ff 843 {
bogdanm 0:9b334a45a8ff 844 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 845 {
bogdanm 0:9b334a45a8ff 846 tmpreg = RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours);
bogdanm 0:9b334a45a8ff 847 assert_param(IS_RTC_HOUR12(tmpreg));
bogdanm 0:9b334a45a8ff 848 assert_param(IS_RTC_HOURFORMAT12(sAlarm->AlarmTime.TimeFormat));
bogdanm 0:9b334a45a8ff 849 }
bogdanm 0:9b334a45a8ff 850 else
bogdanm 0:9b334a45a8ff 851 {
bogdanm 0:9b334a45a8ff 852 sAlarm->AlarmTime.TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 853 assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours)));
bogdanm 0:9b334a45a8ff 854 }
bogdanm 0:9b334a45a8ff 855
bogdanm 0:9b334a45a8ff 856 assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes)));
bogdanm 0:9b334a45a8ff 857 assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds)));
bogdanm 0:9b334a45a8ff 858
bogdanm 0:9b334a45a8ff 859 if(sAlarm->AlarmDateWeekDaySel == RTC_ALARMDATEWEEKDAYSEL_DATE)
bogdanm 0:9b334a45a8ff 860 {
bogdanm 0:9b334a45a8ff 861 tmpreg = RTC_Bcd2ToByte(sAlarm->AlarmDateWeekDay);
bogdanm 0:9b334a45a8ff 862 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(tmpreg));
bogdanm 0:9b334a45a8ff 863 }
bogdanm 0:9b334a45a8ff 864 else
bogdanm 0:9b334a45a8ff 865 {
bogdanm 0:9b334a45a8ff 866 tmpreg = RTC_Bcd2ToByte(sAlarm->AlarmDateWeekDay);
bogdanm 0:9b334a45a8ff 867 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(tmpreg));
bogdanm 0:9b334a45a8ff 868 }
bogdanm 0:9b334a45a8ff 869
bogdanm 0:9b334a45a8ff 870 tmpreg = (((uint32_t)(sAlarm->AlarmTime.Hours) << 16) | \
bogdanm 0:9b334a45a8ff 871 ((uint32_t)(sAlarm->AlarmTime.Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 872 ((uint32_t) sAlarm->AlarmTime.Seconds) | \
bogdanm 0:9b334a45a8ff 873 ((uint32_t)(sAlarm->AlarmTime.TimeFormat) << 16) | \
bogdanm 0:9b334a45a8ff 874 ((uint32_t)(sAlarm->AlarmDateWeekDay) << 24) | \
bogdanm 0:9b334a45a8ff 875 ((uint32_t)sAlarm->AlarmDateWeekDaySel) | \
bogdanm 0:9b334a45a8ff 876 ((uint32_t)sAlarm->AlarmMask));
bogdanm 0:9b334a45a8ff 877 }
bogdanm 0:9b334a45a8ff 878
bogdanm 0:9b334a45a8ff 879 /* Configure the Alarm A or Alarm B Sub Second registers */
bogdanm 0:9b334a45a8ff 880 subsecondtmpreg = (uint32_t)((uint32_t)(sAlarm->AlarmTime.SubSeconds) | (uint32_t)(sAlarm->AlarmSubSecondMask));
bogdanm 0:9b334a45a8ff 881
bogdanm 0:9b334a45a8ff 882 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 883 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 884
bogdanm 0:9b334a45a8ff 885 /* Configure the Alarm register */
bogdanm 0:9b334a45a8ff 886 if(sAlarm->Alarm == RTC_ALARM_A)
bogdanm 0:9b334a45a8ff 887 {
bogdanm 0:9b334a45a8ff 888 /* Disable the Alarm A interrupt */
bogdanm 0:9b334a45a8ff 889 __HAL_RTC_ALARMA_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 890
bogdanm 0:9b334a45a8ff 891 /* In case of interrupt mode is used, the interrupt source must disabled */
bogdanm 0:9b334a45a8ff 892 __HAL_RTC_ALARM_DISABLE_IT(hrtc, RTC_IT_ALRA);
bogdanm 0:9b334a45a8ff 893
bogdanm 0:9b334a45a8ff 894 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 895 /* Wait till RTC ALRAWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 896 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAWF) == RESET)
bogdanm 0:9b334a45a8ff 897 {
bogdanm 0:9b334a45a8ff 898 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 899 {
bogdanm 0:9b334a45a8ff 900 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 901 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 902
bogdanm 0:9b334a45a8ff 903 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 904
bogdanm 0:9b334a45a8ff 905 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 906 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 907
bogdanm 0:9b334a45a8ff 908 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 909 }
bogdanm 0:9b334a45a8ff 910 }
bogdanm 0:9b334a45a8ff 911
bogdanm 0:9b334a45a8ff 912 hrtc->Instance->ALRMAR = (uint32_t)tmpreg;
bogdanm 0:9b334a45a8ff 913 /* Configure the Alarm A Sub Second register */
bogdanm 0:9b334a45a8ff 914 hrtc->Instance->ALRMASSR = subsecondtmpreg;
bogdanm 0:9b334a45a8ff 915 /* Configure the Alarm state: Enable Alarm */
bogdanm 0:9b334a45a8ff 916 __HAL_RTC_ALARMA_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 917 }
bogdanm 0:9b334a45a8ff 918 else
bogdanm 0:9b334a45a8ff 919 {
bogdanm 0:9b334a45a8ff 920 /* Disable the Alarm B interrupt */
bogdanm 0:9b334a45a8ff 921 __HAL_RTC_ALARMB_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 922
bogdanm 0:9b334a45a8ff 923 /* In case of interrupt mode is used, the interrupt source must disabled */
bogdanm 0:9b334a45a8ff 924 __HAL_RTC_ALARM_DISABLE_IT(hrtc, RTC_IT_ALRB);
bogdanm 0:9b334a45a8ff 925
bogdanm 0:9b334a45a8ff 926 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 927 /* Wait till RTC ALRBWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 928 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRBWF) == RESET)
bogdanm 0:9b334a45a8ff 929 {
bogdanm 0:9b334a45a8ff 930 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 931 {
bogdanm 0:9b334a45a8ff 932 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 933 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 934
bogdanm 0:9b334a45a8ff 935 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 936
bogdanm 0:9b334a45a8ff 937 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 938 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 939
bogdanm 0:9b334a45a8ff 940 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 941 }
bogdanm 0:9b334a45a8ff 942 }
bogdanm 0:9b334a45a8ff 943
bogdanm 0:9b334a45a8ff 944 hrtc->Instance->ALRMBR = (uint32_t)tmpreg;
bogdanm 0:9b334a45a8ff 945 /* Configure the Alarm B Sub Second register */
bogdanm 0:9b334a45a8ff 946 hrtc->Instance->ALRMBSSR = subsecondtmpreg;
bogdanm 0:9b334a45a8ff 947 /* Configure the Alarm state: Enable Alarm */
bogdanm 0:9b334a45a8ff 948 __HAL_RTC_ALARMB_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 949 }
bogdanm 0:9b334a45a8ff 950
bogdanm 0:9b334a45a8ff 951 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 952 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 953
bogdanm 0:9b334a45a8ff 954 /* Change RTC state */
bogdanm 0:9b334a45a8ff 955 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 956
bogdanm 0:9b334a45a8ff 957 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 958 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 959
bogdanm 0:9b334a45a8ff 960 return HAL_OK;
bogdanm 0:9b334a45a8ff 961 }
bogdanm 0:9b334a45a8ff 962
bogdanm 0:9b334a45a8ff 963 /**
bogdanm 0:9b334a45a8ff 964 * @brief Sets the specified RTC Alarm with Interrupt
bogdanm 0:9b334a45a8ff 965 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 966 * @param sAlarm: Pointer to Alarm structure
bogdanm 0:9b334a45a8ff 967 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 968 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 969 * @arg Format_BIN: Binary data format
bogdanm 0:9b334a45a8ff 970 * @arg Format_BCD: BCD data format
bogdanm 0:9b334a45a8ff 971 * @note The Alarm register can only be written when the corresponding Alarm
bogdanm 0:9b334a45a8ff 972 * is disabled (Use the HAL_RTC_DeactivateAlarm()).
bogdanm 0:9b334a45a8ff 973 * @note The HAL_RTC_SetTime() must be called before enabling the Alarm feature.
bogdanm 0:9b334a45a8ff 974 * @retval HAL status
bogdanm 0:9b334a45a8ff 975 */
bogdanm 0:9b334a45a8ff 976 HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
bogdanm 0:9b334a45a8ff 977 {
bogdanm 0:9b334a45a8ff 978 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 979 uint32_t tmpreg = 0, subsecondtmpreg = 0;
bogdanm 0:9b334a45a8ff 980
bogdanm 0:9b334a45a8ff 981 /* Check the parameters */
bogdanm 0:9b334a45a8ff 982 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 983 assert_param(IS_ALARM(sAlarm->Alarm));
bogdanm 0:9b334a45a8ff 984 assert_param(IS_ALARM_MASK(sAlarm->AlarmMask));
bogdanm 0:9b334a45a8ff 985 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_SEL(sAlarm->AlarmDateWeekDaySel));
bogdanm 0:9b334a45a8ff 986 assert_param(IS_RTC_ALARM_SUB_SECOND_VALUE(sAlarm->AlarmTime.SubSeconds));
bogdanm 0:9b334a45a8ff 987 assert_param(IS_RTC_ALARM_SUB_SECOND_MASK(sAlarm->AlarmSubSecondMask));
bogdanm 0:9b334a45a8ff 988
bogdanm 0:9b334a45a8ff 989 /* Process Locked */
bogdanm 0:9b334a45a8ff 990 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 991
bogdanm 0:9b334a45a8ff 992 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 993
bogdanm 0:9b334a45a8ff 994 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 995 {
bogdanm 0:9b334a45a8ff 996 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 997 {
bogdanm 0:9b334a45a8ff 998 assert_param(IS_RTC_HOUR12(sAlarm->AlarmTime.Hours));
bogdanm 0:9b334a45a8ff 999 assert_param(IS_RTC_HOURFORMAT12(sAlarm->AlarmTime.TimeFormat));
bogdanm 0:9b334a45a8ff 1000 }
bogdanm 0:9b334a45a8ff 1001 else
bogdanm 0:9b334a45a8ff 1002 {
bogdanm 0:9b334a45a8ff 1003 sAlarm->AlarmTime.TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 1004 assert_param(IS_RTC_HOUR24(sAlarm->AlarmTime.Hours));
bogdanm 0:9b334a45a8ff 1005 }
bogdanm 0:9b334a45a8ff 1006 assert_param(IS_RTC_MINUTES(sAlarm->AlarmTime.Minutes));
bogdanm 0:9b334a45a8ff 1007 assert_param(IS_RTC_SECONDS(sAlarm->AlarmTime.Seconds));
bogdanm 0:9b334a45a8ff 1008
bogdanm 0:9b334a45a8ff 1009 if(sAlarm->AlarmDateWeekDaySel == RTC_ALARMDATEWEEKDAYSEL_DATE)
bogdanm 0:9b334a45a8ff 1010 {
bogdanm 0:9b334a45a8ff 1011 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(sAlarm->AlarmDateWeekDay));
bogdanm 0:9b334a45a8ff 1012 }
bogdanm 0:9b334a45a8ff 1013 else
bogdanm 0:9b334a45a8ff 1014 {
bogdanm 0:9b334a45a8ff 1015 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(sAlarm->AlarmDateWeekDay));
bogdanm 0:9b334a45a8ff 1016 }
bogdanm 0:9b334a45a8ff 1017 tmpreg = (((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmTime.Hours) << 16) | \
bogdanm 0:9b334a45a8ff 1018 ((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmTime.Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 1019 ((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmTime.Seconds)) | \
bogdanm 0:9b334a45a8ff 1020 ((uint32_t)(sAlarm->AlarmTime.TimeFormat) << 16) | \
bogdanm 0:9b334a45a8ff 1021 ((uint32_t)RTC_ByteToBcd2(sAlarm->AlarmDateWeekDay) << 24) | \
bogdanm 0:9b334a45a8ff 1022 ((uint32_t)sAlarm->AlarmDateWeekDaySel) | \
bogdanm 0:9b334a45a8ff 1023 ((uint32_t)sAlarm->AlarmMask));
bogdanm 0:9b334a45a8ff 1024 }
bogdanm 0:9b334a45a8ff 1025 else
bogdanm 0:9b334a45a8ff 1026 {
bogdanm 0:9b334a45a8ff 1027 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 1028 {
bogdanm 0:9b334a45a8ff 1029 tmpreg = RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours);
bogdanm 0:9b334a45a8ff 1030 assert_param(IS_RTC_HOUR12(tmpreg));
bogdanm 0:9b334a45a8ff 1031 assert_param(IS_RTC_HOURFORMAT12(sAlarm->AlarmTime.TimeFormat));
bogdanm 0:9b334a45a8ff 1032 }
bogdanm 0:9b334a45a8ff 1033 else
bogdanm 0:9b334a45a8ff 1034 {
bogdanm 0:9b334a45a8ff 1035 sAlarm->AlarmTime.TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 1036 assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours)));
bogdanm 0:9b334a45a8ff 1037 }
bogdanm 0:9b334a45a8ff 1038
bogdanm 0:9b334a45a8ff 1039 assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes)));
bogdanm 0:9b334a45a8ff 1040 assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds)));
bogdanm 0:9b334a45a8ff 1041
bogdanm 0:9b334a45a8ff 1042 if(sAlarm->AlarmDateWeekDaySel == RTC_ALARMDATEWEEKDAYSEL_DATE)
bogdanm 0:9b334a45a8ff 1043 {
bogdanm 0:9b334a45a8ff 1044 tmpreg = RTC_Bcd2ToByte(sAlarm->AlarmDateWeekDay);
bogdanm 0:9b334a45a8ff 1045 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(tmpreg));
bogdanm 0:9b334a45a8ff 1046 }
bogdanm 0:9b334a45a8ff 1047 else
bogdanm 0:9b334a45a8ff 1048 {
bogdanm 0:9b334a45a8ff 1049 tmpreg = RTC_Bcd2ToByte(sAlarm->AlarmDateWeekDay);
bogdanm 0:9b334a45a8ff 1050 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(tmpreg));
bogdanm 0:9b334a45a8ff 1051 }
bogdanm 0:9b334a45a8ff 1052 tmpreg = (((uint32_t)(sAlarm->AlarmTime.Hours) << 16) | \
bogdanm 0:9b334a45a8ff 1053 ((uint32_t)(sAlarm->AlarmTime.Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 1054 ((uint32_t) sAlarm->AlarmTime.Seconds) | \
bogdanm 0:9b334a45a8ff 1055 ((uint32_t)(sAlarm->AlarmTime.TimeFormat) << 16) | \
bogdanm 0:9b334a45a8ff 1056 ((uint32_t)(sAlarm->AlarmDateWeekDay) << 24) | \
bogdanm 0:9b334a45a8ff 1057 ((uint32_t)sAlarm->AlarmDateWeekDaySel) | \
bogdanm 0:9b334a45a8ff 1058 ((uint32_t)sAlarm->AlarmMask));
bogdanm 0:9b334a45a8ff 1059 }
bogdanm 0:9b334a45a8ff 1060 /* Configure the Alarm A or Alarm B Sub Second registers */
bogdanm 0:9b334a45a8ff 1061 subsecondtmpreg = (uint32_t)((uint32_t)(sAlarm->AlarmTime.SubSeconds) | (uint32_t)(sAlarm->AlarmSubSecondMask));
bogdanm 0:9b334a45a8ff 1062
bogdanm 0:9b334a45a8ff 1063 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1064 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 1065
bogdanm 0:9b334a45a8ff 1066 /* Configure the Alarm register */
bogdanm 0:9b334a45a8ff 1067 if(sAlarm->Alarm == RTC_ALARM_A)
bogdanm 0:9b334a45a8ff 1068 {
bogdanm 0:9b334a45a8ff 1069 /* Disable the Alarm A interrupt */
bogdanm 0:9b334a45a8ff 1070 __HAL_RTC_ALARMA_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 1071
bogdanm 0:9b334a45a8ff 1072 /* Clear flag alarm A */
bogdanm 0:9b334a45a8ff 1073 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF);
bogdanm 0:9b334a45a8ff 1074
bogdanm 0:9b334a45a8ff 1075 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1076 /* Wait till RTC ALRAWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 1077 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAWF) == RESET)
bogdanm 0:9b334a45a8ff 1078 {
bogdanm 0:9b334a45a8ff 1079 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1080 {
bogdanm 0:9b334a45a8ff 1081 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1082 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1083
bogdanm 0:9b334a45a8ff 1084 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1085
bogdanm 0:9b334a45a8ff 1086 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1087 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 1088
bogdanm 0:9b334a45a8ff 1089 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1090 }
bogdanm 0:9b334a45a8ff 1091 }
bogdanm 0:9b334a45a8ff 1092
bogdanm 0:9b334a45a8ff 1093 hrtc->Instance->ALRMAR = (uint32_t)tmpreg;
bogdanm 0:9b334a45a8ff 1094 /* Configure the Alarm A Sub Second register */
bogdanm 0:9b334a45a8ff 1095 hrtc->Instance->ALRMASSR = subsecondtmpreg;
bogdanm 0:9b334a45a8ff 1096 /* Configure the Alarm state: Enable Alarm */
bogdanm 0:9b334a45a8ff 1097 __HAL_RTC_ALARMA_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1098 /* Configure the Alarm interrupt */
bogdanm 0:9b334a45a8ff 1099 __HAL_RTC_ALARM_ENABLE_IT(hrtc,RTC_IT_ALRA);
bogdanm 0:9b334a45a8ff 1100 }
bogdanm 0:9b334a45a8ff 1101 else
bogdanm 0:9b334a45a8ff 1102 {
bogdanm 0:9b334a45a8ff 1103 /* Disable the Alarm B interrupt */
bogdanm 0:9b334a45a8ff 1104 __HAL_RTC_ALARMB_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 1105
bogdanm 0:9b334a45a8ff 1106 /* Clear flag alarm B */
bogdanm 0:9b334a45a8ff 1107 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRBF);
bogdanm 0:9b334a45a8ff 1108
bogdanm 0:9b334a45a8ff 1109 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1110 /* Wait till RTC ALRBWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 1111 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRBWF) == RESET)
bogdanm 0:9b334a45a8ff 1112 {
bogdanm 0:9b334a45a8ff 1113 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1114 {
bogdanm 0:9b334a45a8ff 1115 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1116 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1117
bogdanm 0:9b334a45a8ff 1118 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1119
bogdanm 0:9b334a45a8ff 1120 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1121 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 1122
bogdanm 0:9b334a45a8ff 1123 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1124 }
bogdanm 0:9b334a45a8ff 1125 }
bogdanm 0:9b334a45a8ff 1126
bogdanm 0:9b334a45a8ff 1127 hrtc->Instance->ALRMBR = (uint32_t)tmpreg;
bogdanm 0:9b334a45a8ff 1128 /* Configure the Alarm B Sub Second register */
bogdanm 0:9b334a45a8ff 1129 hrtc->Instance->ALRMBSSR = subsecondtmpreg;
bogdanm 0:9b334a45a8ff 1130 /* Configure the Alarm state: Enable Alarm */
bogdanm 0:9b334a45a8ff 1131 __HAL_RTC_ALARMB_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1132 /* Configure the Alarm interrupt */
bogdanm 0:9b334a45a8ff 1133 __HAL_RTC_ALARM_ENABLE_IT(hrtc, RTC_IT_ALRB);
bogdanm 0:9b334a45a8ff 1134 }
bogdanm 0:9b334a45a8ff 1135
bogdanm 0:9b334a45a8ff 1136 /* RTC Alarm Interrupt Configuration: EXTI configuration */
bogdanm 0:9b334a45a8ff 1137 __HAL_RTC_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT);
bogdanm 0:9b334a45a8ff 1138
bogdanm 0:9b334a45a8ff 1139 EXTI->RTSR |= RTC_EXTI_LINE_ALARM_EVENT;
bogdanm 0:9b334a45a8ff 1140
bogdanm 0:9b334a45a8ff 1141 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1142 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1143
bogdanm 0:9b334a45a8ff 1144 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 1145
bogdanm 0:9b334a45a8ff 1146 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1147 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 1148
bogdanm 0:9b334a45a8ff 1149 return HAL_OK;
bogdanm 0:9b334a45a8ff 1150 }
bogdanm 0:9b334a45a8ff 1151
bogdanm 0:9b334a45a8ff 1152 /**
bogdanm 0:9b334a45a8ff 1153 * @brief Deactive the specified RTC Alarm
bogdanm 0:9b334a45a8ff 1154 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1155 * @param Alarm: Specifies the Alarm.
bogdanm 0:9b334a45a8ff 1156 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 1157 * @arg ALARM_A : AlarmA
bogdanm 0:9b334a45a8ff 1158 * @arg ALARM_B : AlarmB
bogdanm 0:9b334a45a8ff 1159 * @retval HAL status
bogdanm 0:9b334a45a8ff 1160 */
bogdanm 0:9b334a45a8ff 1161 HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm)
bogdanm 0:9b334a45a8ff 1162 {
bogdanm 0:9b334a45a8ff 1163 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 1164
bogdanm 0:9b334a45a8ff 1165 /* Check the parameters */
bogdanm 0:9b334a45a8ff 1166 assert_param(IS_ALARM(Alarm));
bogdanm 0:9b334a45a8ff 1167
bogdanm 0:9b334a45a8ff 1168 /* Process Locked */
bogdanm 0:9b334a45a8ff 1169 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 1170
bogdanm 0:9b334a45a8ff 1171 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 1172
bogdanm 0:9b334a45a8ff 1173 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1174 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 1175
bogdanm 0:9b334a45a8ff 1176 if(Alarm == RTC_ALARM_A)
bogdanm 0:9b334a45a8ff 1177 {
bogdanm 0:9b334a45a8ff 1178 /* AlarmA */
bogdanm 0:9b334a45a8ff 1179 __HAL_RTC_ALARMA_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 1180
bogdanm 0:9b334a45a8ff 1181 /* In case of interrupt mode is used, the interrupt source must disabled */
bogdanm 0:9b334a45a8ff 1182 __HAL_RTC_ALARM_DISABLE_IT(hrtc, RTC_IT_ALRA);
bogdanm 0:9b334a45a8ff 1183
bogdanm 0:9b334a45a8ff 1184 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1185
bogdanm 0:9b334a45a8ff 1186 /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 1187 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAWF) == RESET)
bogdanm 0:9b334a45a8ff 1188 {
bogdanm 0:9b334a45a8ff 1189 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1190 {
bogdanm 0:9b334a45a8ff 1191 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1192 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1193
bogdanm 0:9b334a45a8ff 1194 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1195
bogdanm 0:9b334a45a8ff 1196 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1197 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 1198
bogdanm 0:9b334a45a8ff 1199 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1200 }
bogdanm 0:9b334a45a8ff 1201 }
bogdanm 0:9b334a45a8ff 1202 }
bogdanm 0:9b334a45a8ff 1203 else
bogdanm 0:9b334a45a8ff 1204 {
bogdanm 0:9b334a45a8ff 1205 /* AlarmB */
bogdanm 0:9b334a45a8ff 1206 __HAL_RTC_ALARMB_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 1207
bogdanm 0:9b334a45a8ff 1208 /* In case of interrupt mode is used, the interrupt source must disabled */
bogdanm 0:9b334a45a8ff 1209 __HAL_RTC_ALARM_DISABLE_IT(hrtc,RTC_IT_ALRB);
bogdanm 0:9b334a45a8ff 1210
bogdanm 0:9b334a45a8ff 1211 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1212
bogdanm 0:9b334a45a8ff 1213 /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 1214 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRBWF) == RESET)
bogdanm 0:9b334a45a8ff 1215 {
bogdanm 0:9b334a45a8ff 1216 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1217 {
bogdanm 0:9b334a45a8ff 1218 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1219 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1220
bogdanm 0:9b334a45a8ff 1221 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1222
bogdanm 0:9b334a45a8ff 1223 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1224 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 1225
bogdanm 0:9b334a45a8ff 1226 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1227 }
bogdanm 0:9b334a45a8ff 1228 }
bogdanm 0:9b334a45a8ff 1229 }
bogdanm 0:9b334a45a8ff 1230 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 1231 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 1232
bogdanm 0:9b334a45a8ff 1233 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 1234
bogdanm 0:9b334a45a8ff 1235 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 1236 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 1237
bogdanm 0:9b334a45a8ff 1238 return HAL_OK;
bogdanm 0:9b334a45a8ff 1239 }
bogdanm 0:9b334a45a8ff 1240
bogdanm 0:9b334a45a8ff 1241 /**
bogdanm 0:9b334a45a8ff 1242 * @brief Gets the RTC Alarm value and masks.
bogdanm 0:9b334a45a8ff 1243 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1244 * @param sAlarm: Pointer to Date structure
bogdanm 0:9b334a45a8ff 1245 * @param Alarm: Specifies the Alarm
bogdanm 0:9b334a45a8ff 1246 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 1247 * @arg ALARM_A: AlarmA
bogdanm 0:9b334a45a8ff 1248 * @arg ALARM_B: AlarmB
bogdanm 0:9b334a45a8ff 1249 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 1250 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 1251 * @arg Format_BIN: Binary data format
bogdanm 0:9b334a45a8ff 1252 * @arg Format_BCD: BCD data format
bogdanm 0:9b334a45a8ff 1253 * @retval HAL status
bogdanm 0:9b334a45a8ff 1254 */
bogdanm 0:9b334a45a8ff 1255 HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format)
bogdanm 0:9b334a45a8ff 1256 {
bogdanm 0:9b334a45a8ff 1257 uint32_t tmpreg = 0, subsecondtmpreg = 0;
bogdanm 0:9b334a45a8ff 1258
bogdanm 0:9b334a45a8ff 1259 /* Check the parameters */
bogdanm 0:9b334a45a8ff 1260 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 1261 assert_param(IS_ALARM(Alarm));
bogdanm 0:9b334a45a8ff 1262
bogdanm 0:9b334a45a8ff 1263 if(Alarm == RTC_ALARM_A)
bogdanm 0:9b334a45a8ff 1264 {
bogdanm 0:9b334a45a8ff 1265 /* AlarmA */
bogdanm 0:9b334a45a8ff 1266 sAlarm->Alarm = RTC_ALARM_A;
bogdanm 0:9b334a45a8ff 1267
bogdanm 0:9b334a45a8ff 1268 tmpreg = (uint32_t)(hrtc->Instance->ALRMAR);
bogdanm 0:9b334a45a8ff 1269 subsecondtmpreg = (uint32_t)((hrtc->Instance->ALRMASSR ) & RTC_ALRMASSR_SS);
bogdanm 0:9b334a45a8ff 1270 }
bogdanm 0:9b334a45a8ff 1271 else
bogdanm 0:9b334a45a8ff 1272 {
bogdanm 0:9b334a45a8ff 1273 sAlarm->Alarm = RTC_ALARM_B;
bogdanm 0:9b334a45a8ff 1274
bogdanm 0:9b334a45a8ff 1275 tmpreg = (uint32_t)(hrtc->Instance->ALRMBR);
bogdanm 0:9b334a45a8ff 1276 subsecondtmpreg = (uint32_t)((hrtc->Instance->ALRMBSSR) & RTC_ALRMBSSR_SS);
bogdanm 0:9b334a45a8ff 1277 }
bogdanm 0:9b334a45a8ff 1278
bogdanm 0:9b334a45a8ff 1279 /* Fill the structure with the read parameters */
bogdanm 0:9b334a45a8ff 1280 sAlarm->AlarmTime.Hours = (uint32_t)((tmpreg & (RTC_ALRMAR_HT | RTC_ALRMAR_HU)) >> 16);
bogdanm 0:9b334a45a8ff 1281 sAlarm->AlarmTime.Minutes = (uint32_t)((tmpreg & (RTC_ALRMAR_MNT | RTC_ALRMAR_MNU)) >> 8);
bogdanm 0:9b334a45a8ff 1282 sAlarm->AlarmTime.Seconds = (uint32_t)(tmpreg & (RTC_ALRMAR_ST | RTC_ALRMAR_SU));
bogdanm 0:9b334a45a8ff 1283 sAlarm->AlarmTime.TimeFormat = (uint32_t)((tmpreg & RTC_ALRMAR_PM) >> 16);
bogdanm 0:9b334a45a8ff 1284 sAlarm->AlarmTime.SubSeconds = (uint32_t) subsecondtmpreg;
bogdanm 0:9b334a45a8ff 1285 sAlarm->AlarmDateWeekDay = (uint32_t)((tmpreg & (RTC_ALRMAR_DT | RTC_ALRMAR_DU)) >> 24);
bogdanm 0:9b334a45a8ff 1286 sAlarm->AlarmDateWeekDaySel = (uint32_t)(tmpreg & RTC_ALRMAR_WDSEL);
bogdanm 0:9b334a45a8ff 1287 sAlarm->AlarmMask = (uint32_t)(tmpreg & RTC_ALARMMASK_ALL);
bogdanm 0:9b334a45a8ff 1288
bogdanm 0:9b334a45a8ff 1289 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 1290 {
bogdanm 0:9b334a45a8ff 1291 sAlarm->AlarmTime.Hours = RTC_Bcd2ToByte(sAlarm->AlarmTime.Hours);
bogdanm 0:9b334a45a8ff 1292 sAlarm->AlarmTime.Minutes = RTC_Bcd2ToByte(sAlarm->AlarmTime.Minutes);
bogdanm 0:9b334a45a8ff 1293 sAlarm->AlarmTime.Seconds = RTC_Bcd2ToByte(sAlarm->AlarmTime.Seconds);
bogdanm 0:9b334a45a8ff 1294 sAlarm->AlarmDateWeekDay = RTC_Bcd2ToByte(sAlarm->AlarmDateWeekDay);
bogdanm 0:9b334a45a8ff 1295 }
bogdanm 0:9b334a45a8ff 1296
bogdanm 0:9b334a45a8ff 1297 return HAL_OK;
bogdanm 0:9b334a45a8ff 1298 }
bogdanm 0:9b334a45a8ff 1299
bogdanm 0:9b334a45a8ff 1300 /**
bogdanm 0:9b334a45a8ff 1301 * @brief This function handles Alarm interrupt request.
bogdanm 0:9b334a45a8ff 1302 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1303 * @retval None
bogdanm 0:9b334a45a8ff 1304 */
bogdanm 0:9b334a45a8ff 1305 void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 1306 {
bogdanm 0:9b334a45a8ff 1307 if(__HAL_RTC_ALARM_GET_IT(hrtc, RTC_IT_ALRA))
bogdanm 0:9b334a45a8ff 1308 {
bogdanm 0:9b334a45a8ff 1309 /* Get the status of the Interrupt */
bogdanm 0:9b334a45a8ff 1310 if((uint32_t)(hrtc->Instance->CR & RTC_IT_ALRA) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 1311 {
bogdanm 0:9b334a45a8ff 1312 /* AlarmA callback */
bogdanm 0:9b334a45a8ff 1313 HAL_RTC_AlarmAEventCallback(hrtc);
bogdanm 0:9b334a45a8ff 1314
bogdanm 0:9b334a45a8ff 1315 /* Clear the Alarm interrupt pending bit */
bogdanm 0:9b334a45a8ff 1316 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc,RTC_FLAG_ALRAF);
bogdanm 0:9b334a45a8ff 1317 }
bogdanm 0:9b334a45a8ff 1318 }
bogdanm 0:9b334a45a8ff 1319
bogdanm 0:9b334a45a8ff 1320 if(__HAL_RTC_ALARM_GET_IT(hrtc, RTC_IT_ALRB))
bogdanm 0:9b334a45a8ff 1321 {
bogdanm 0:9b334a45a8ff 1322 /* Get the status of the Interrupt */
bogdanm 0:9b334a45a8ff 1323 if((uint32_t)(hrtc->Instance->CR & RTC_IT_ALRB) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 1324 {
bogdanm 0:9b334a45a8ff 1325 /* AlarmB callback */
bogdanm 0:9b334a45a8ff 1326 HAL_RTCEx_AlarmBEventCallback(hrtc);
bogdanm 0:9b334a45a8ff 1327
bogdanm 0:9b334a45a8ff 1328 /* Clear the Alarm interrupt pending bit */
bogdanm 0:9b334a45a8ff 1329 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc,RTC_FLAG_ALRBF);
bogdanm 0:9b334a45a8ff 1330 }
bogdanm 0:9b334a45a8ff 1331 }
bogdanm 0:9b334a45a8ff 1332
bogdanm 0:9b334a45a8ff 1333 /* Clear the EXTI's line Flag for RTC Alarm */
bogdanm 0:9b334a45a8ff 1334 __HAL_RTC_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT);
bogdanm 0:9b334a45a8ff 1335
bogdanm 0:9b334a45a8ff 1336 /* Change RTC state */
bogdanm 0:9b334a45a8ff 1337 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 1338 }
bogdanm 0:9b334a45a8ff 1339
bogdanm 0:9b334a45a8ff 1340 /**
bogdanm 0:9b334a45a8ff 1341 * @brief Alarm A callback.
bogdanm 0:9b334a45a8ff 1342 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1343 * @retval None
bogdanm 0:9b334a45a8ff 1344 */
bogdanm 0:9b334a45a8ff 1345 __weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
bogdanm 0:9b334a45a8ff 1346 {
bogdanm 0:9b334a45a8ff 1347 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 1348 the HAL_RTC_AlarmAEventCallback could be implemented in the user file
bogdanm 0:9b334a45a8ff 1349 */
bogdanm 0:9b334a45a8ff 1350 }
bogdanm 0:9b334a45a8ff 1351
bogdanm 0:9b334a45a8ff 1352 /**
bogdanm 0:9b334a45a8ff 1353 * @brief This function handles AlarmA Polling request.
bogdanm 0:9b334a45a8ff 1354 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1355 * @param Timeout: Timeout duration
bogdanm 0:9b334a45a8ff 1356 * @retval HAL status
bogdanm 0:9b334a45a8ff 1357 */
bogdanm 0:9b334a45a8ff 1358 HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 1359 {
bogdanm 0:9b334a45a8ff 1360
bogdanm 0:9b334a45a8ff 1361 uint32_t tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1362
bogdanm 0:9b334a45a8ff 1363 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) == RESET)
bogdanm 0:9b334a45a8ff 1364 {
bogdanm 0:9b334a45a8ff 1365 if(Timeout != HAL_MAX_DELAY)
bogdanm 0:9b334a45a8ff 1366 {
bogdanm 0:9b334a45a8ff 1367 if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
bogdanm 0:9b334a45a8ff 1368 {
bogdanm 0:9b334a45a8ff 1369 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 1370 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1371 }
bogdanm 0:9b334a45a8ff 1372 }
bogdanm 0:9b334a45a8ff 1373 }
bogdanm 0:9b334a45a8ff 1374
bogdanm 0:9b334a45a8ff 1375 /* Clear the Alarm interrupt pending bit */
bogdanm 0:9b334a45a8ff 1376 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF);
bogdanm 0:9b334a45a8ff 1377
bogdanm 0:9b334a45a8ff 1378 /* Change RTC state */
bogdanm 0:9b334a45a8ff 1379 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 1380
bogdanm 0:9b334a45a8ff 1381 return HAL_OK;
bogdanm 0:9b334a45a8ff 1382 }
bogdanm 0:9b334a45a8ff 1383
bogdanm 0:9b334a45a8ff 1384 /**
bogdanm 0:9b334a45a8ff 1385 * @}
bogdanm 0:9b334a45a8ff 1386 */
bogdanm 0:9b334a45a8ff 1387
bogdanm 0:9b334a45a8ff 1388 /** @defgroup RTC_Exported_Functions_Group4 Peripheral Control functions
bogdanm 0:9b334a45a8ff 1389 * @brief Peripheral Control functions
bogdanm 0:9b334a45a8ff 1390 *
bogdanm 0:9b334a45a8ff 1391 @verbatim
bogdanm 0:9b334a45a8ff 1392 ===============================================================================
bogdanm 0:9b334a45a8ff 1393 ##### Peripheral Control functions #####
bogdanm 0:9b334a45a8ff 1394 ===============================================================================
bogdanm 0:9b334a45a8ff 1395 [..]
bogdanm 0:9b334a45a8ff 1396 This subsection provides functions allowing to
bogdanm 0:9b334a45a8ff 1397 (+) Wait for RTC Time and Date Synchronization
bogdanm 0:9b334a45a8ff 1398
bogdanm 0:9b334a45a8ff 1399 @endverbatim
bogdanm 0:9b334a45a8ff 1400 * @{
bogdanm 0:9b334a45a8ff 1401 */
bogdanm 0:9b334a45a8ff 1402
bogdanm 0:9b334a45a8ff 1403 /**
bogdanm 0:9b334a45a8ff 1404 * @brief Waits until the RTC Time and Date registers (RTC_TR and RTC_DR) are
bogdanm 0:9b334a45a8ff 1405 * synchronized with RTC APB clock.
bogdanm 0:9b334a45a8ff 1406 * @note The RTC Resynchronization mode is write protected, use the
bogdanm 0:9b334a45a8ff 1407 * __HAL_RTC_WRITEPROTECTION_DISABLE() before calling this function.
bogdanm 0:9b334a45a8ff 1408 * @note To read the calendar through the shadow registers after Calendar
bogdanm 0:9b334a45a8ff 1409 * initialization, calendar update or after wakeup from low power modes
bogdanm 0:9b334a45a8ff 1410 * the software must first clear the RSF flag.
bogdanm 0:9b334a45a8ff 1411 * The software must then wait until it is set again before reading
bogdanm 0:9b334a45a8ff 1412 * the calendar, which means that the calendar registers have been
bogdanm 0:9b334a45a8ff 1413 * correctly copied into the RTC_TR and RTC_DR shadow registers.
bogdanm 0:9b334a45a8ff 1414 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1415 * @retval HAL status
bogdanm 0:9b334a45a8ff 1416 */
bogdanm 0:9b334a45a8ff 1417 HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 1418 {
bogdanm 0:9b334a45a8ff 1419 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 1420
bogdanm 0:9b334a45a8ff 1421 /* Clear RSF flag */
bogdanm 0:9b334a45a8ff 1422 hrtc->Instance->ISR &= (uint32_t)RTC_RSF_MASK;
bogdanm 0:9b334a45a8ff 1423
bogdanm 0:9b334a45a8ff 1424 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1425
bogdanm 0:9b334a45a8ff 1426 /* Wait the registers to be synchronised */
bogdanm 0:9b334a45a8ff 1427 while((hrtc->Instance->ISR & RTC_ISR_RSF) == (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 1428 {
bogdanm 0:9b334a45a8ff 1429 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1430 {
bogdanm 0:9b334a45a8ff 1431 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1432 }
bogdanm 0:9b334a45a8ff 1433 }
bogdanm 0:9b334a45a8ff 1434
bogdanm 0:9b334a45a8ff 1435 return HAL_OK;
bogdanm 0:9b334a45a8ff 1436 }
bogdanm 0:9b334a45a8ff 1437
bogdanm 0:9b334a45a8ff 1438 /**
bogdanm 0:9b334a45a8ff 1439 * @}
bogdanm 0:9b334a45a8ff 1440 */
bogdanm 0:9b334a45a8ff 1441
bogdanm 0:9b334a45a8ff 1442 /** @defgroup RTC_Exported_Functions_Group5 Peripheral State functions
bogdanm 0:9b334a45a8ff 1443 * @brief Peripheral State functions
bogdanm 0:9b334a45a8ff 1444 *
bogdanm 0:9b334a45a8ff 1445 @verbatim
bogdanm 0:9b334a45a8ff 1446 ===============================================================================
bogdanm 0:9b334a45a8ff 1447 ##### Peripheral State functions #####
bogdanm 0:9b334a45a8ff 1448 ===============================================================================
bogdanm 0:9b334a45a8ff 1449 [..]
bogdanm 0:9b334a45a8ff 1450 This subsection provides functions allowing to
bogdanm 0:9b334a45a8ff 1451 (+) Get RTC state
bogdanm 0:9b334a45a8ff 1452
bogdanm 0:9b334a45a8ff 1453 @endverbatim
bogdanm 0:9b334a45a8ff 1454 * @{
bogdanm 0:9b334a45a8ff 1455 */
bogdanm 0:9b334a45a8ff 1456 /**
bogdanm 0:9b334a45a8ff 1457 * @brief Returns the Alarm state.
bogdanm 0:9b334a45a8ff 1458 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1459 * @retval HAL state
bogdanm 0:9b334a45a8ff 1460 */
bogdanm 0:9b334a45a8ff 1461 HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 1462 {
bogdanm 0:9b334a45a8ff 1463 return hrtc->State;
bogdanm 0:9b334a45a8ff 1464 }
bogdanm 0:9b334a45a8ff 1465
bogdanm 0:9b334a45a8ff 1466 /**
bogdanm 0:9b334a45a8ff 1467 * @}
bogdanm 0:9b334a45a8ff 1468 */
bogdanm 0:9b334a45a8ff 1469
bogdanm 0:9b334a45a8ff 1470 /**
bogdanm 0:9b334a45a8ff 1471 * @}
bogdanm 0:9b334a45a8ff 1472 */
bogdanm 0:9b334a45a8ff 1473
bogdanm 0:9b334a45a8ff 1474 /** @defgroup RTC_Private_Functions RTC Private Functions
bogdanm 0:9b334a45a8ff 1475 * @{
bogdanm 0:9b334a45a8ff 1476 */
bogdanm 0:9b334a45a8ff 1477
bogdanm 0:9b334a45a8ff 1478 /**
bogdanm 0:9b334a45a8ff 1479 * @brief Enters the RTC Initialization mode.
bogdanm 0:9b334a45a8ff 1480 * @note The RTC Initialization mode is write protected, use the
bogdanm 0:9b334a45a8ff 1481 * __HAL_RTC_WRITEPROTECTION_DISABLE() before calling this function.
bogdanm 0:9b334a45a8ff 1482 * @param hrtc: RTC handle
bogdanm 0:9b334a45a8ff 1483 * @retval An ErrorStatus enumeration value:
bogdanm 0:9b334a45a8ff 1484 * - HAL_OK : RTC is in Init mode
bogdanm 0:9b334a45a8ff 1485 * - HAL_TIMEOUT : RTC is not in Init mode and in Timeout
bogdanm 0:9b334a45a8ff 1486 */
bogdanm 0:9b334a45a8ff 1487 HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 1488 {
bogdanm 0:9b334a45a8ff 1489 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 1490
bogdanm 0:9b334a45a8ff 1491 /* Check if the Initialization mode is set */
bogdanm 0:9b334a45a8ff 1492 if((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 1493 {
bogdanm 0:9b334a45a8ff 1494 /* Set the Initialization mode */
bogdanm 0:9b334a45a8ff 1495 hrtc->Instance->ISR = (uint32_t)RTC_INIT_MASK;
bogdanm 0:9b334a45a8ff 1496
bogdanm 0:9b334a45a8ff 1497 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 1498 /* Wait till RTC is in INIT state and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 1499 while((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 1500 {
bogdanm 0:9b334a45a8ff 1501 if((HAL_GetTick()-tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 1502 {
bogdanm 0:9b334a45a8ff 1503 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 1504 }
bogdanm 0:9b334a45a8ff 1505 }
bogdanm 0:9b334a45a8ff 1506 }
bogdanm 0:9b334a45a8ff 1507
bogdanm 0:9b334a45a8ff 1508 return HAL_OK;
bogdanm 0:9b334a45a8ff 1509 }
bogdanm 0:9b334a45a8ff 1510
bogdanm 0:9b334a45a8ff 1511
bogdanm 0:9b334a45a8ff 1512 /**
bogdanm 0:9b334a45a8ff 1513 * @brief Converts a 2 digit decimal to BCD format.
bogdanm 0:9b334a45a8ff 1514 * @param Value: Byte to be converted
bogdanm 0:9b334a45a8ff 1515 * @retval Converted byte
bogdanm 0:9b334a45a8ff 1516 */
bogdanm 0:9b334a45a8ff 1517 uint8_t RTC_ByteToBcd2(uint8_t Value)
bogdanm 0:9b334a45a8ff 1518 {
bogdanm 0:9b334a45a8ff 1519 uint32_t bcdhigh = 0;
bogdanm 0:9b334a45a8ff 1520
bogdanm 0:9b334a45a8ff 1521 while(Value >= 10)
bogdanm 0:9b334a45a8ff 1522 {
bogdanm 0:9b334a45a8ff 1523 bcdhigh++;
bogdanm 0:9b334a45a8ff 1524 Value -= 10;
bogdanm 0:9b334a45a8ff 1525 }
bogdanm 0:9b334a45a8ff 1526
bogdanm 0:9b334a45a8ff 1527 return ((uint8_t)(bcdhigh << 4) | Value);
bogdanm 0:9b334a45a8ff 1528 }
bogdanm 0:9b334a45a8ff 1529
bogdanm 0:9b334a45a8ff 1530 /**
bogdanm 0:9b334a45a8ff 1531 * @brief Converts from 2 digit BCD to Binary.
bogdanm 0:9b334a45a8ff 1532 * @param Value: BCD value to be converted
bogdanm 0:9b334a45a8ff 1533 * @retval Converted word
bogdanm 0:9b334a45a8ff 1534 */
bogdanm 0:9b334a45a8ff 1535 uint8_t RTC_Bcd2ToByte(uint8_t Value)
bogdanm 0:9b334a45a8ff 1536 {
bogdanm 0:9b334a45a8ff 1537 uint32_t tmp = 0;
bogdanm 0:9b334a45a8ff 1538 tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10;
bogdanm 0:9b334a45a8ff 1539 return (tmp + (Value & (uint8_t)0x0F));
bogdanm 0:9b334a45a8ff 1540 }
bogdanm 0:9b334a45a8ff 1541
bogdanm 0:9b334a45a8ff 1542 /**
bogdanm 0:9b334a45a8ff 1543 * @}
bogdanm 0:9b334a45a8ff 1544 */
bogdanm 0:9b334a45a8ff 1545
bogdanm 0:9b334a45a8ff 1546 #endif /* HAL_RTC_MODULE_ENABLED */
bogdanm 0:9b334a45a8ff 1547
bogdanm 0:9b334a45a8ff 1548 /**
bogdanm 0:9b334a45a8ff 1549 * @}
bogdanm 0:9b334a45a8ff 1550 */
bogdanm 0:9b334a45a8ff 1551
bogdanm 0:9b334a45a8ff 1552 /**
bogdanm 0:9b334a45a8ff 1553 * @}
bogdanm 0:9b334a45a8ff 1554 */
bogdanm 0:9b334a45a8ff 1555
bogdanm 0:9b334a45a8ff 1556 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/