philippe s. / mbed-dev

Fork of mbed-dev by mbed official

Committer:
neurofun
Date:
Tue Feb 23 21:59:35 2016 +0000
Revision:
70:b3a5af880266
Parent:
0:9b334a45a8ff
Edited DAC routines to allow for the simultaneous use of three channels from two DACs as seen on the STM32F334R8 and STM32F303K8. Edited ADC routines to allow for the simultaneous use of more than one ADC.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /**
bogdanm 0:9b334a45a8ff 2 ******************************************************************************
bogdanm 0:9b334a45a8ff 3 * @file stm32l1xx_hal_rtc.c
bogdanm 0:9b334a45a8ff 4 * @author MCD Application Team
bogdanm 0:9b334a45a8ff 5 * @version V1.0.0
bogdanm 0:9b334a45a8ff 6 * @date 5-September-2014
bogdanm 0:9b334a45a8ff 7 * @brief RTC HAL module driver.
bogdanm 0:9b334a45a8ff 8 * This file provides firmware functions to manage the following
bogdanm 0:9b334a45a8ff 9 * functionalities of the Real Time Clock (RTC) peripheral:
bogdanm 0:9b334a45a8ff 10 * + Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 11 * + RTC Time and Date functions
bogdanm 0:9b334a45a8ff 12 * + RTC Alarm functions
bogdanm 0:9b334a45a8ff 13 * + Peripheral Control functions
bogdanm 0:9b334a45a8ff 14 * + Peripheral State functions
bogdanm 0:9b334a45a8ff 15 *
bogdanm 0:9b334a45a8ff 16 @verbatim
bogdanm 0:9b334a45a8ff 17 ==============================================================================
bogdanm 0:9b334a45a8ff 18 ##### Backup Domain Operating Condition #####
bogdanm 0:9b334a45a8ff 19 ==============================================================================
bogdanm 0:9b334a45a8ff 20 [..] The real-time clock (RTC) and the RTC backup registers can be powered
bogdanm 0:9b334a45a8ff 21 from the VBAT voltage when the main VDD supply is powered off.
bogdanm 0:9b334a45a8ff 22 To retain the content of the RTC backup registers and supply the RTC
bogdanm 0:9b334a45a8ff 23 when VDD is turned off, VBAT pin can be connected to an optional
bogdanm 0:9b334a45a8ff 24 standby voltage supplied by a battery or by another source.
bogdanm 0:9b334a45a8ff 25
bogdanm 0:9b334a45a8ff 26 [..] To allow the RTC operating even when the main digital supply (VDD) is turned
bogdanm 0:9b334a45a8ff 27 off, the VBAT pin powers the following blocks:
bogdanm 0:9b334a45a8ff 28 (#) The RTC
bogdanm 0:9b334a45a8ff 29 (#) The LSE oscillator
bogdanm 0:9b334a45a8ff 30 (#) PC13 to PC15 I/Os (when available)
bogdanm 0:9b334a45a8ff 31
bogdanm 0:9b334a45a8ff 32 [..] When the backup domain is supplied by VDD (analog switch connected to VDD),
bogdanm 0:9b334a45a8ff 33 the following pins are available:
bogdanm 0:9b334a45a8ff 34 (#) PC14 and PC15 can be used as either GPIO or LSE pins
bogdanm 0:9b334a45a8ff 35 (#) PC13 can be used as a GPIO or as the RTC_AF1 pin
bogdanm 0:9b334a45a8ff 36
bogdanm 0:9b334a45a8ff 37 [..] When the backup domain is supplied by VBAT (analog switch connected to VBAT
bogdanm 0:9b334a45a8ff 38 because VDD is not present), the following pins are available:
bogdanm 0:9b334a45a8ff 39 (#) PC14 and PC15 can be used as LSE pins only
bogdanm 0:9b334a45a8ff 40 (#) PC13 can be used as the RTC_AF1 pin
bogdanm 0:9b334a45a8ff 41
bogdanm 0:9b334a45a8ff 42 ##### Backup Domain Reset #####
bogdanm 0:9b334a45a8ff 43 ==================================================================
bogdanm 0:9b334a45a8ff 44 [..] The backup domain reset sets all RTC registers and the RCC_BDCR register
bogdanm 0:9b334a45a8ff 45 to their reset values.
bogdanm 0:9b334a45a8ff 46 [..] A backup domain reset is generated when one of the following events occurs:
bogdanm 0:9b334a45a8ff 47 (#) Software reset, triggered by setting the BDRST bit in the
bogdanm 0:9b334a45a8ff 48 RCC Backup domain control register (RCC_BDCR).
bogdanm 0:9b334a45a8ff 49 (#) VDD or VBAT power on, if both supplies have previously been powered off.
bogdanm 0:9b334a45a8ff 50
bogdanm 0:9b334a45a8ff 51 ##### Backup Domain Access #####
bogdanm 0:9b334a45a8ff 52 ==================================================================
bogdanm 0:9b334a45a8ff 53 [..] After reset, the backup domain (RTC registers, RTC backup data
bogdanm 0:9b334a45a8ff 54 registers and backup SRAM) is protected against possible unwanted write
bogdanm 0:9b334a45a8ff 55 accesses.
bogdanm 0:9b334a45a8ff 56 [..] To enable access to the RTC Domain and RTC registers, proceed as follows:
bogdanm 0:9b334a45a8ff 57 (+) Enable the Power Controller (PWR) APB1 interface clock using the
bogdanm 0:9b334a45a8ff 58 __PWR_CLK_ENABLE() function.
bogdanm 0:9b334a45a8ff 59 (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.
bogdanm 0:9b334a45a8ff 60 (+) Select the RTC clock source using the __HAL_RCC_RTC_CONFIG() function.
bogdanm 0:9b334a45a8ff 61 (+) Enable RTC Clock using the __HAL_RCC_RTC_ENABLE() function.
bogdanm 0:9b334a45a8ff 62
bogdanm 0:9b334a45a8ff 63
bogdanm 0:9b334a45a8ff 64 ##### How to use this driver #####
bogdanm 0:9b334a45a8ff 65 ==================================================================
bogdanm 0:9b334a45a8ff 66 [..]
bogdanm 0:9b334a45a8ff 67 (+) Enable the RTC domain access (see description in the section above).
bogdanm 0:9b334a45a8ff 68 (+) Configure the RTC Prescaler (Asynchronous and Synchronous) and RTC hour
bogdanm 0:9b334a45a8ff 69 format using the HAL_RTC_Init() function.
bogdanm 0:9b334a45a8ff 70
bogdanm 0:9b334a45a8ff 71 *** Time and Date configuration ***
bogdanm 0:9b334a45a8ff 72 ===================================
bogdanm 0:9b334a45a8ff 73 [..]
bogdanm 0:9b334a45a8ff 74 (+) To configure the RTC Calendar (Time and Date) use the HAL_RTC_SetTime()
bogdanm 0:9b334a45a8ff 75 and HAL_RTC_SetDate() functions.
bogdanm 0:9b334a45a8ff 76 (+) To read the RTC Calendar, use the HAL_RTC_GetTime() and HAL_RTC_GetDate() functions.
bogdanm 0:9b334a45a8ff 77
bogdanm 0:9b334a45a8ff 78 *** Alarm configuration ***
bogdanm 0:9b334a45a8ff 79 ===========================
bogdanm 0:9b334a45a8ff 80 [..]
bogdanm 0:9b334a45a8ff 81 (+) To configure the RTC Alarm use the HAL_RTC_SetAlarm() function.
bogdanm 0:9b334a45a8ff 82 You can also configure the RTC Alarm with interrupt mode using the HAL_RTC_SetAlarm_IT() function.
bogdanm 0:9b334a45a8ff 83 (+) To read the RTC Alarm, use the HAL_RTC_GetAlarm() function.
bogdanm 0:9b334a45a8ff 84
bogdanm 0:9b334a45a8ff 85 ##### RTC and low power modes #####
bogdanm 0:9b334a45a8ff 86 ==================================================================
bogdanm 0:9b334a45a8ff 87 [..] The MCU can be woken up from a low power mode by an RTC alternate
bogdanm 0:9b334a45a8ff 88 function.
bogdanm 0:9b334a45a8ff 89 [..] The RTC alternate functions are the RTC alarms (Alarm A and Alarm B),
bogdanm 0:9b334a45a8ff 90 RTC wakeup, RTC tamper event detection and RTC time stamp event detection.
bogdanm 0:9b334a45a8ff 91 These RTC alternate functions can wake up the system from the Stop and
bogdanm 0:9b334a45a8ff 92 Standby low power modes.
bogdanm 0:9b334a45a8ff 93 [..] The system can also wake up from low power modes without depending
bogdanm 0:9b334a45a8ff 94 on an external interrupt (Auto-wakeup mode), by using the RTC alarm
bogdanm 0:9b334a45a8ff 95 or the RTC wakeup events.
bogdanm 0:9b334a45a8ff 96 [..] The RTC provides a programmable time base for waking up from the
bogdanm 0:9b334a45a8ff 97 Stop or Standby mode at regular intervals.
bogdanm 0:9b334a45a8ff 98 Wakeup from STOP and STANDBY modes is possible only when the RTC clock source
bogdanm 0:9b334a45a8ff 99 is LSE or LSI.
bogdanm 0:9b334a45a8ff 100
bogdanm 0:9b334a45a8ff 101 @endverbatim
bogdanm 0:9b334a45a8ff 102 ******************************************************************************
bogdanm 0:9b334a45a8ff 103 * @attention
bogdanm 0:9b334a45a8ff 104 *
bogdanm 0:9b334a45a8ff 105 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
bogdanm 0:9b334a45a8ff 106 *
bogdanm 0:9b334a45a8ff 107 * Redistribution and use in source and binary forms, with or without modification,
bogdanm 0:9b334a45a8ff 108 * are permitted provided that the following conditions are met:
bogdanm 0:9b334a45a8ff 109 * 1. Redistributions of source code must retain the above copyright notice,
bogdanm 0:9b334a45a8ff 110 * this list of conditions and the following disclaimer.
bogdanm 0:9b334a45a8ff 111 * 2. Redistributions in binary form must reproduce the above copyright notice,
bogdanm 0:9b334a45a8ff 112 * this list of conditions and the following disclaimer in the documentation
bogdanm 0:9b334a45a8ff 113 * and/or other materials provided with the distribution.
bogdanm 0:9b334a45a8ff 114 * 3. Neither the name of STMicroelectronics nor the names of its contributors
bogdanm 0:9b334a45a8ff 115 * may be used to endorse or promote products derived from this software
bogdanm 0:9b334a45a8ff 116 * without specific prior written permission.
bogdanm 0:9b334a45a8ff 117 *
bogdanm 0:9b334a45a8ff 118 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
bogdanm 0:9b334a45a8ff 119 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
bogdanm 0:9b334a45a8ff 120 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
bogdanm 0:9b334a45a8ff 121 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
bogdanm 0:9b334a45a8ff 122 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
bogdanm 0:9b334a45a8ff 123 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
bogdanm 0:9b334a45a8ff 124 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
bogdanm 0:9b334a45a8ff 125 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
bogdanm 0:9b334a45a8ff 126 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
bogdanm 0:9b334a45a8ff 127 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
bogdanm 0:9b334a45a8ff 128 *
bogdanm 0:9b334a45a8ff 129 ******************************************************************************
bogdanm 0:9b334a45a8ff 130 */
bogdanm 0:9b334a45a8ff 131
bogdanm 0:9b334a45a8ff 132 /* Includes ------------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 133 #include "stm32l1xx_hal.h"
bogdanm 0:9b334a45a8ff 134
bogdanm 0:9b334a45a8ff 135 /** @addtogroup STM32L1xx_HAL_Driver
bogdanm 0:9b334a45a8ff 136 * @{
bogdanm 0:9b334a45a8ff 137 */
bogdanm 0:9b334a45a8ff 138
bogdanm 0:9b334a45a8ff 139 /** @defgroup RTC RTC
bogdanm 0:9b334a45a8ff 140 * @brief RTC HAL module driver
bogdanm 0:9b334a45a8ff 141 * @{
bogdanm 0:9b334a45a8ff 142 */
bogdanm 0:9b334a45a8ff 143
bogdanm 0:9b334a45a8ff 144 #ifdef HAL_RTC_MODULE_ENABLED
bogdanm 0:9b334a45a8ff 145
bogdanm 0:9b334a45a8ff 146 /* Private typedef -----------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 147 /* Private define ------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 148 /* Private macro -------------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 149 /* Private variables ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 150 /* Private function prototypes -----------------------------------------------*/
bogdanm 0:9b334a45a8ff 151 /* Private functions ---------------------------------------------------------*/
bogdanm 0:9b334a45a8ff 152 /** @defgroup RTC_Exported_Functions RTC Exported Functions
bogdanm 0:9b334a45a8ff 153 * @{
bogdanm 0:9b334a45a8ff 154 */
bogdanm 0:9b334a45a8ff 155
bogdanm 0:9b334a45a8ff 156 /** @defgroup RTC_Exported_Functions_Group1 Initialization and de-initialization functions
bogdanm 0:9b334a45a8ff 157 * @brief Initialization and Configuration functions
bogdanm 0:9b334a45a8ff 158 *
bogdanm 0:9b334a45a8ff 159 @verbatim
bogdanm 0:9b334a45a8ff 160 ===============================================================================
bogdanm 0:9b334a45a8ff 161 ##### Initialization and de-initialization functions #####
bogdanm 0:9b334a45a8ff 162 ===============================================================================
bogdanm 0:9b334a45a8ff 163 [..] This section provides functions allowing to initialize and configure the
bogdanm 0:9b334a45a8ff 164 RTC Prescaler (Synchronous and Asynchronous), RTC Hour format, disable
bogdanm 0:9b334a45a8ff 165 RTC registers Write protection, enter and exit the RTC initialization mode,
bogdanm 0:9b334a45a8ff 166 RTC registers synchronization check and reference clock detection enable.
bogdanm 0:9b334a45a8ff 167 (#) The RTC Prescaler is programmed to generate the RTC 1Hz time base.
bogdanm 0:9b334a45a8ff 168 It is split into 2 programmable prescalers to minimize power consumption.
bogdanm 0:9b334a45a8ff 169 (++) A 7-bit asynchronous prescaler and a 13-bit synchronous prescaler.
bogdanm 0:9b334a45a8ff 170 (++) When both prescalers are used, it is recommended to configure the
bogdanm 0:9b334a45a8ff 171 asynchronous prescaler to a high value to minimize power consumption.
bogdanm 0:9b334a45a8ff 172 (#) All RTC registers are Write protected. Writing to the RTC registers
bogdanm 0:9b334a45a8ff 173 is enabled by writing a key into the Write Protection register, RTC_WPR.
bogdanm 0:9b334a45a8ff 174 (#) To configure the RTC Calendar, user application should enter
bogdanm 0:9b334a45a8ff 175 initialization mode. In this mode, the calendar counter is stopped
bogdanm 0:9b334a45a8ff 176 and its value can be updated. When the initialization sequence is
bogdanm 0:9b334a45a8ff 177 complete, the calendar restarts counting after 4 RTCCLK cycles.
bogdanm 0:9b334a45a8ff 178 (#) To read the calendar through the shadow registers after Calendar
bogdanm 0:9b334a45a8ff 179 initialization, calendar update or after wakeup from low power modes
bogdanm 0:9b334a45a8ff 180 the software must first clear the RSF flag. The software must then
bogdanm 0:9b334a45a8ff 181 wait until it is set again before reading the calendar, which means
bogdanm 0:9b334a45a8ff 182 that the calendar registers have been correctly copied into the
bogdanm 0:9b334a45a8ff 183 RTC_TR and RTC_DR shadow registers.The HAL_RTC_WaitForSynchro() function
bogdanm 0:9b334a45a8ff 184 implements the above software sequence (RSF clear and RSF check).
bogdanm 0:9b334a45a8ff 185
bogdanm 0:9b334a45a8ff 186 @endverbatim
bogdanm 0:9b334a45a8ff 187 * @{
bogdanm 0:9b334a45a8ff 188 */
bogdanm 0:9b334a45a8ff 189
bogdanm 0:9b334a45a8ff 190 /**
bogdanm 0:9b334a45a8ff 191 * @brief Initializes the RTC peripheral
bogdanm 0:9b334a45a8ff 192 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 193 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 194 * @retval HAL status
bogdanm 0:9b334a45a8ff 195 */
bogdanm 0:9b334a45a8ff 196 HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc)
bogdanm 0:9b334a45a8ff 197 {
bogdanm 0:9b334a45a8ff 198 /* Check the RTC peripheral state */
bogdanm 0:9b334a45a8ff 199 if(hrtc == HAL_NULL)
bogdanm 0:9b334a45a8ff 200 {
bogdanm 0:9b334a45a8ff 201 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 202 }
bogdanm 0:9b334a45a8ff 203
bogdanm 0:9b334a45a8ff 204 /* Check the parameters */
bogdanm 0:9b334a45a8ff 205 assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));
bogdanm 0:9b334a45a8ff 206 assert_param(IS_RTC_HOUR_FORMAT(hrtc->Init.HourFormat));
bogdanm 0:9b334a45a8ff 207 assert_param(IS_RTC_ASYNCH_PREDIV(hrtc->Init.AsynchPrediv));
bogdanm 0:9b334a45a8ff 208 assert_param(IS_RTC_SYNCH_PREDIV(hrtc->Init.SynchPrediv));
bogdanm 0:9b334a45a8ff 209 assert_param(IS_RTC_OUTPUT(hrtc->Init.OutPut));
bogdanm 0:9b334a45a8ff 210 assert_param(IS_RTC_OUTPUT_POL(hrtc->Init.OutPutPolarity));
bogdanm 0:9b334a45a8ff 211 assert_param(IS_RTC_OUTPUT_TYPE(hrtc->Init.OutPutType));
bogdanm 0:9b334a45a8ff 212
bogdanm 0:9b334a45a8ff 213 if(hrtc->State == HAL_RTC_STATE_RESET)
bogdanm 0:9b334a45a8ff 214 {
bogdanm 0:9b334a45a8ff 215 /* Initialize RTC MSP */
bogdanm 0:9b334a45a8ff 216 HAL_RTC_MspInit(hrtc);
bogdanm 0:9b334a45a8ff 217 }
bogdanm 0:9b334a45a8ff 218
bogdanm 0:9b334a45a8ff 219 /* Set RTC state */
bogdanm 0:9b334a45a8ff 220 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 221
bogdanm 0:9b334a45a8ff 222 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 223 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 224
bogdanm 0:9b334a45a8ff 225 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 226 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 227 {
bogdanm 0:9b334a45a8ff 228 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 229 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 230
bogdanm 0:9b334a45a8ff 231 /* Set RTC state */
bogdanm 0:9b334a45a8ff 232 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 233
bogdanm 0:9b334a45a8ff 234 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 235 }
bogdanm 0:9b334a45a8ff 236 else
bogdanm 0:9b334a45a8ff 237 {
bogdanm 0:9b334a45a8ff 238 /* Clear RTC_CR FMT, OSEL and POL Bits */
bogdanm 0:9b334a45a8ff 239 hrtc->Instance->CR &= ((uint32_t)~(RTC_CR_FMT | RTC_CR_OSEL | RTC_CR_POL));
bogdanm 0:9b334a45a8ff 240 /* Set RTC_CR register */
bogdanm 0:9b334a45a8ff 241 hrtc->Instance->CR |= (uint32_t)(hrtc->Init.HourFormat | hrtc->Init.OutPut | hrtc->Init.OutPutPolarity);
bogdanm 0:9b334a45a8ff 242
bogdanm 0:9b334a45a8ff 243 /* Configure the RTC PRER */
bogdanm 0:9b334a45a8ff 244 hrtc->Instance->PRER = (uint32_t)(hrtc->Init.SynchPrediv);
bogdanm 0:9b334a45a8ff 245 hrtc->Instance->PRER |= (uint32_t)(hrtc->Init.AsynchPrediv << 16);
bogdanm 0:9b334a45a8ff 246
bogdanm 0:9b334a45a8ff 247 /* Exit Initialization mode */
bogdanm 0:9b334a45a8ff 248 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
bogdanm 0:9b334a45a8ff 249
bogdanm 0:9b334a45a8ff 250 hrtc->Instance->TAFCR &= (uint32_t)~RTC_TAFCR_ALARMOUTTYPE;
bogdanm 0:9b334a45a8ff 251 hrtc->Instance->TAFCR |= (uint32_t)(hrtc->Init.OutPutType);
bogdanm 0:9b334a45a8ff 252
bogdanm 0:9b334a45a8ff 253 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 254 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 255
bogdanm 0:9b334a45a8ff 256 /* Set RTC state */
bogdanm 0:9b334a45a8ff 257 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 258
bogdanm 0:9b334a45a8ff 259 return HAL_OK;
bogdanm 0:9b334a45a8ff 260 }
bogdanm 0:9b334a45a8ff 261 }
bogdanm 0:9b334a45a8ff 262
bogdanm 0:9b334a45a8ff 263 /**
bogdanm 0:9b334a45a8ff 264 * @brief DeInitializes the RTC peripheral
bogdanm 0:9b334a45a8ff 265 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 266 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 267 * @note This function doesn't reset the RTC Backup Data registers.
bogdanm 0:9b334a45a8ff 268 * @retval HAL status
bogdanm 0:9b334a45a8ff 269 */
bogdanm 0:9b334a45a8ff 270 __weak HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc)
bogdanm 0:9b334a45a8ff 271 {
bogdanm 0:9b334a45a8ff 272 /* Note : This function is defined into this file for library reference. */
bogdanm 0:9b334a45a8ff 273 /* Function content is located into file stm32l1xx_hal_rtc_ex.c */
bogdanm 0:9b334a45a8ff 274
bogdanm 0:9b334a45a8ff 275 /* Return function status */
bogdanm 0:9b334a45a8ff 276 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 277 }
bogdanm 0:9b334a45a8ff 278
bogdanm 0:9b334a45a8ff 279 /**
bogdanm 0:9b334a45a8ff 280 * @brief Initializes the RTC MSP.
bogdanm 0:9b334a45a8ff 281 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 282 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 283 * @retval None
bogdanm 0:9b334a45a8ff 284 */
bogdanm 0:9b334a45a8ff 285 __weak void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 286 {
bogdanm 0:9b334a45a8ff 287 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 288 the HAL_RTC_MspInit could be implemented in the user file
bogdanm 0:9b334a45a8ff 289 */
bogdanm 0:9b334a45a8ff 290 }
bogdanm 0:9b334a45a8ff 291
bogdanm 0:9b334a45a8ff 292 /**
bogdanm 0:9b334a45a8ff 293 * @brief DeInitializes the RTC MSP.
bogdanm 0:9b334a45a8ff 294 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 295 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 296 * @retval None
bogdanm 0:9b334a45a8ff 297 */
bogdanm 0:9b334a45a8ff 298 __weak void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 299 {
bogdanm 0:9b334a45a8ff 300 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 301 the HAL_RTC_MspDeInit could be implemented in the user file
bogdanm 0:9b334a45a8ff 302 */
bogdanm 0:9b334a45a8ff 303 }
bogdanm 0:9b334a45a8ff 304
bogdanm 0:9b334a45a8ff 305 /**
bogdanm 0:9b334a45a8ff 306 * @}
bogdanm 0:9b334a45a8ff 307 */
bogdanm 0:9b334a45a8ff 308
bogdanm 0:9b334a45a8ff 309 /** @defgroup RTC_Exported_Functions_Group2 RTC Time and Date functions
bogdanm 0:9b334a45a8ff 310 * @brief RTC Time and Date functions
bogdanm 0:9b334a45a8ff 311 *
bogdanm 0:9b334a45a8ff 312 @verbatim
bogdanm 0:9b334a45a8ff 313 ===============================================================================
bogdanm 0:9b334a45a8ff 314 ##### RTC Time and Date functions #####
bogdanm 0:9b334a45a8ff 315 ===============================================================================
bogdanm 0:9b334a45a8ff 316
bogdanm 0:9b334a45a8ff 317 [..] This section provides functions allowing to configure Time and Date features
bogdanm 0:9b334a45a8ff 318
bogdanm 0:9b334a45a8ff 319 @endverbatim
bogdanm 0:9b334a45a8ff 320 * @{
bogdanm 0:9b334a45a8ff 321 */
bogdanm 0:9b334a45a8ff 322
bogdanm 0:9b334a45a8ff 323 /**
bogdanm 0:9b334a45a8ff 324 * @brief Sets RTC current time.
bogdanm 0:9b334a45a8ff 325 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 326 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 327 * @param sTime: Pointer to Time structure
bogdanm 0:9b334a45a8ff 328 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 329 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 330 * @arg FORMAT_BIN: Binary data format
bogdanm 0:9b334a45a8ff 331 * @arg FORMAT_BCD: BCD data format
bogdanm 0:9b334a45a8ff 332 * @retval HAL status
bogdanm 0:9b334a45a8ff 333 */
bogdanm 0:9b334a45a8ff 334 HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
bogdanm 0:9b334a45a8ff 335 {
bogdanm 0:9b334a45a8ff 336 uint32_t tmpreg = 0;
bogdanm 0:9b334a45a8ff 337
bogdanm 0:9b334a45a8ff 338 /* Check the parameters */
bogdanm 0:9b334a45a8ff 339 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 340 assert_param(IS_RTC_DAYLIGHT_SAVING(sTime->DayLightSaving));
bogdanm 0:9b334a45a8ff 341 assert_param(IS_RTC_STORE_OPERATION(sTime->StoreOperation));
bogdanm 0:9b334a45a8ff 342
bogdanm 0:9b334a45a8ff 343 /* Process Locked */
bogdanm 0:9b334a45a8ff 344 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 345
bogdanm 0:9b334a45a8ff 346 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 347
bogdanm 0:9b334a45a8ff 348 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 349 {
bogdanm 0:9b334a45a8ff 350 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 351 {
bogdanm 0:9b334a45a8ff 352 assert_param(IS_RTC_HOUR12(sTime->Hours));
bogdanm 0:9b334a45a8ff 353 assert_param(IS_RTC_HOURFORMAT12(sTime->TimeFormat));
bogdanm 0:9b334a45a8ff 354 }
bogdanm 0:9b334a45a8ff 355 else
bogdanm 0:9b334a45a8ff 356 {
bogdanm 0:9b334a45a8ff 357 sTime->TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 358 assert_param(IS_RTC_HOUR24(sTime->Hours));
bogdanm 0:9b334a45a8ff 359 }
bogdanm 0:9b334a45a8ff 360 assert_param(IS_RTC_MINUTES(sTime->Minutes));
bogdanm 0:9b334a45a8ff 361 assert_param(IS_RTC_SECONDS(sTime->Seconds));
bogdanm 0:9b334a45a8ff 362
bogdanm 0:9b334a45a8ff 363 tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(sTime->Hours) << 16) | \
bogdanm 0:9b334a45a8ff 364 ((uint32_t)RTC_ByteToBcd2(sTime->Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 365 ((uint32_t)RTC_ByteToBcd2(sTime->Seconds)) | \
bogdanm 0:9b334a45a8ff 366 (((uint32_t)sTime->TimeFormat) << 16));
bogdanm 0:9b334a45a8ff 367 }
bogdanm 0:9b334a45a8ff 368 else
bogdanm 0:9b334a45a8ff 369 {
bogdanm 0:9b334a45a8ff 370 if((hrtc->Instance->CR & RTC_CR_FMT) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 371 {
bogdanm 0:9b334a45a8ff 372 tmpreg = RTC_Bcd2ToByte(sTime->Hours);
bogdanm 0:9b334a45a8ff 373 assert_param(IS_RTC_HOUR12(tmpreg));
bogdanm 0:9b334a45a8ff 374 assert_param(IS_RTC_HOURFORMAT12(sTime->TimeFormat));
bogdanm 0:9b334a45a8ff 375 }
bogdanm 0:9b334a45a8ff 376 else
bogdanm 0:9b334a45a8ff 377 {
bogdanm 0:9b334a45a8ff 378 sTime->TimeFormat = 0x00;
bogdanm 0:9b334a45a8ff 379 assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sTime->Hours)));
bogdanm 0:9b334a45a8ff 380 }
bogdanm 0:9b334a45a8ff 381 assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sTime->Minutes)));
bogdanm 0:9b334a45a8ff 382 assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sTime->Seconds)));
bogdanm 0:9b334a45a8ff 383 tmpreg = (((uint32_t)(sTime->Hours) << 16) | \
bogdanm 0:9b334a45a8ff 384 ((uint32_t)(sTime->Minutes) << 8) | \
bogdanm 0:9b334a45a8ff 385 ((uint32_t)sTime->Seconds) | \
bogdanm 0:9b334a45a8ff 386 ((uint32_t)(sTime->TimeFormat) << 16));
bogdanm 0:9b334a45a8ff 387 }
bogdanm 0:9b334a45a8ff 388
bogdanm 0:9b334a45a8ff 389 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 390 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 391
bogdanm 0:9b334a45a8ff 392 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 393 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 394 {
bogdanm 0:9b334a45a8ff 395 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 396 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 397
bogdanm 0:9b334a45a8ff 398 /* Set RTC state */
bogdanm 0:9b334a45a8ff 399 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 400
bogdanm 0:9b334a45a8ff 401 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 402 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 403
bogdanm 0:9b334a45a8ff 404 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 405 }
bogdanm 0:9b334a45a8ff 406 else
bogdanm 0:9b334a45a8ff 407 {
bogdanm 0:9b334a45a8ff 408 /* Set the RTC_TR register */
bogdanm 0:9b334a45a8ff 409 hrtc->Instance->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 410
bogdanm 0:9b334a45a8ff 411 /* Clear the bits to be configured */
bogdanm 0:9b334a45a8ff 412 hrtc->Instance->CR &= (uint32_t)~RTC_CR_BCK;
bogdanm 0:9b334a45a8ff 413
bogdanm 0:9b334a45a8ff 414 /* Configure the RTC_CR register */
bogdanm 0:9b334a45a8ff 415 hrtc->Instance->CR |= (uint32_t)(sTime->DayLightSaving | sTime->StoreOperation);
bogdanm 0:9b334a45a8ff 416
bogdanm 0:9b334a45a8ff 417 /* Exit Initialization mode */
bogdanm 0:9b334a45a8ff 418 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
bogdanm 0:9b334a45a8ff 419
bogdanm 0:9b334a45a8ff 420 /* Wait for synchro */
bogdanm 0:9b334a45a8ff 421 if(HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 422 {
bogdanm 0:9b334a45a8ff 423 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 424 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 425
bogdanm 0:9b334a45a8ff 426 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 427
bogdanm 0:9b334a45a8ff 428 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 429 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 430
bogdanm 0:9b334a45a8ff 431 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 432 }
bogdanm 0:9b334a45a8ff 433
bogdanm 0:9b334a45a8ff 434 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 435 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 436
bogdanm 0:9b334a45a8ff 437 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 438
bogdanm 0:9b334a45a8ff 439 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 440
bogdanm 0:9b334a45a8ff 441 return HAL_OK;
bogdanm 0:9b334a45a8ff 442 }
bogdanm 0:9b334a45a8ff 443 }
bogdanm 0:9b334a45a8ff 444
bogdanm 0:9b334a45a8ff 445
bogdanm 0:9b334a45a8ff 446 /**
bogdanm 0:9b334a45a8ff 447 * @brief Sets RTC current date.
bogdanm 0:9b334a45a8ff 448 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 449 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 450 * @param sDate: Pointer to date structure
bogdanm 0:9b334a45a8ff 451 * @param Format: specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 452 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 453 * @arg FORMAT_BIN: Binary data format
bogdanm 0:9b334a45a8ff 454 * @arg FORMAT_BCD: BCD data format
bogdanm 0:9b334a45a8ff 455 * @retval HAL status
bogdanm 0:9b334a45a8ff 456 */
bogdanm 0:9b334a45a8ff 457 HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
bogdanm 0:9b334a45a8ff 458 {
bogdanm 0:9b334a45a8ff 459 uint32_t datetmpreg = 0;
bogdanm 0:9b334a45a8ff 460
bogdanm 0:9b334a45a8ff 461 /* Check the parameters */
bogdanm 0:9b334a45a8ff 462 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 463
bogdanm 0:9b334a45a8ff 464 /* Process Locked */
bogdanm 0:9b334a45a8ff 465 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 466
bogdanm 0:9b334a45a8ff 467 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 468
bogdanm 0:9b334a45a8ff 469 if((Format == FORMAT_BIN) && ((sDate->Month & 0x10) == 0x10))
bogdanm 0:9b334a45a8ff 470 {
bogdanm 0:9b334a45a8ff 471 sDate->Month = (uint8_t)((sDate->Month & (uint8_t)~(0x10)) + (uint8_t)0x0A);
bogdanm 0:9b334a45a8ff 472 }
bogdanm 0:9b334a45a8ff 473
bogdanm 0:9b334a45a8ff 474 assert_param(IS_RTC_WEEKDAY(sDate->WeekDay));
bogdanm 0:9b334a45a8ff 475
bogdanm 0:9b334a45a8ff 476 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 477 {
bogdanm 0:9b334a45a8ff 478 assert_param(IS_RTC_YEAR(sDate->Year));
bogdanm 0:9b334a45a8ff 479 assert_param(IS_RTC_MONTH(sDate->Month));
bogdanm 0:9b334a45a8ff 480 assert_param(IS_RTC_DATE(sDate->Date));
bogdanm 0:9b334a45a8ff 481
bogdanm 0:9b334a45a8ff 482 datetmpreg = (((uint32_t)RTC_ByteToBcd2(sDate->Year) << 16) | \
bogdanm 0:9b334a45a8ff 483 ((uint32_t)RTC_ByteToBcd2(sDate->Month) << 8) | \
bogdanm 0:9b334a45a8ff 484 ((uint32_t)RTC_ByteToBcd2(sDate->Date)) | \
bogdanm 0:9b334a45a8ff 485 ((uint32_t)sDate->WeekDay << 13));
bogdanm 0:9b334a45a8ff 486 }
bogdanm 0:9b334a45a8ff 487 else
bogdanm 0:9b334a45a8ff 488 {
bogdanm 0:9b334a45a8ff 489 assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(sDate->Year)));
bogdanm 0:9b334a45a8ff 490 datetmpreg = RTC_Bcd2ToByte(sDate->Month);
bogdanm 0:9b334a45a8ff 491 assert_param(IS_RTC_MONTH(datetmpreg));
bogdanm 0:9b334a45a8ff 492 datetmpreg = RTC_Bcd2ToByte(sDate->Date);
bogdanm 0:9b334a45a8ff 493 assert_param(IS_RTC_DATE(datetmpreg));
bogdanm 0:9b334a45a8ff 494
bogdanm 0:9b334a45a8ff 495 datetmpreg = ((((uint32_t)sDate->Year) << 16) | \
bogdanm 0:9b334a45a8ff 496 (((uint32_t)sDate->Month) << 8) | \
bogdanm 0:9b334a45a8ff 497 ((uint32_t)sDate->Date) | \
bogdanm 0:9b334a45a8ff 498 (((uint32_t)sDate->WeekDay) << 13));
bogdanm 0:9b334a45a8ff 499 }
bogdanm 0:9b334a45a8ff 500
bogdanm 0:9b334a45a8ff 501 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 502 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 503
bogdanm 0:9b334a45a8ff 504 /* Set Initialization mode */
bogdanm 0:9b334a45a8ff 505 if(RTC_EnterInitMode(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 506 {
bogdanm 0:9b334a45a8ff 507 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 508 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 509
bogdanm 0:9b334a45a8ff 510 /* Set RTC state*/
bogdanm 0:9b334a45a8ff 511 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 512
bogdanm 0:9b334a45a8ff 513 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 514 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 515
bogdanm 0:9b334a45a8ff 516 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 517 }
bogdanm 0:9b334a45a8ff 518 else
bogdanm 0:9b334a45a8ff 519 {
bogdanm 0:9b334a45a8ff 520 /* Set the RTC_DR register */
bogdanm 0:9b334a45a8ff 521 hrtc->Instance->DR = (uint32_t)(datetmpreg & RTC_DR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 522
bogdanm 0:9b334a45a8ff 523 /* Exit Initialization mode */
bogdanm 0:9b334a45a8ff 524 hrtc->Instance->ISR &= (uint32_t)~RTC_ISR_INIT;
bogdanm 0:9b334a45a8ff 525
bogdanm 0:9b334a45a8ff 526 /* Wait for synchro */
bogdanm 0:9b334a45a8ff 527 if(HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
bogdanm 0:9b334a45a8ff 528 {
bogdanm 0:9b334a45a8ff 529 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 530 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 531
bogdanm 0:9b334a45a8ff 532 hrtc->State = HAL_RTC_STATE_ERROR;
bogdanm 0:9b334a45a8ff 533
bogdanm 0:9b334a45a8ff 534 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 535 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 536
bogdanm 0:9b334a45a8ff 537 return HAL_ERROR;
bogdanm 0:9b334a45a8ff 538 }
bogdanm 0:9b334a45a8ff 539
bogdanm 0:9b334a45a8ff 540 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 541 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 542
bogdanm 0:9b334a45a8ff 543 hrtc->State = HAL_RTC_STATE_READY ;
bogdanm 0:9b334a45a8ff 544
bogdanm 0:9b334a45a8ff 545 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 546 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 547
bogdanm 0:9b334a45a8ff 548 return HAL_OK;
bogdanm 0:9b334a45a8ff 549 }
bogdanm 0:9b334a45a8ff 550 }
bogdanm 0:9b334a45a8ff 551
bogdanm 0:9b334a45a8ff 552 /**
bogdanm 0:9b334a45a8ff 553 * @brief Gets RTC current date.
bogdanm 0:9b334a45a8ff 554 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 555 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 556 * @param sDate: Pointer to Date structure
bogdanm 0:9b334a45a8ff 557 * @param Format: Specifies the format of the entered parameters.
bogdanm 0:9b334a45a8ff 558 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 559 * @arg FORMAT_BIN: Binary data format
bogdanm 0:9b334a45a8ff 560 * @arg FORMAT_BCD: BCD data format
bogdanm 0:9b334a45a8ff 561 * @retval HAL status
bogdanm 0:9b334a45a8ff 562 */
bogdanm 0:9b334a45a8ff 563 HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
bogdanm 0:9b334a45a8ff 564 {
bogdanm 0:9b334a45a8ff 565 uint32_t datetmpreg = 0;
bogdanm 0:9b334a45a8ff 566
bogdanm 0:9b334a45a8ff 567 /* Check the parameters */
bogdanm 0:9b334a45a8ff 568 assert_param(IS_RTC_FORMAT(Format));
bogdanm 0:9b334a45a8ff 569
bogdanm 0:9b334a45a8ff 570 /* Get the DR register */
bogdanm 0:9b334a45a8ff 571 datetmpreg = (uint32_t)(hrtc->Instance->DR & RTC_DR_RESERVED_MASK);
bogdanm 0:9b334a45a8ff 572
bogdanm 0:9b334a45a8ff 573 /* Fill the structure fields with the read parameters */
bogdanm 0:9b334a45a8ff 574 sDate->Year = (uint8_t)((datetmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
bogdanm 0:9b334a45a8ff 575 sDate->Month = (uint8_t)((datetmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
bogdanm 0:9b334a45a8ff 576 sDate->Date = (uint8_t)(datetmpreg & (RTC_DR_DT | RTC_DR_DU));
bogdanm 0:9b334a45a8ff 577 sDate->WeekDay = (uint8_t)((datetmpreg & (RTC_DR_WDU)) >> 13);
bogdanm 0:9b334a45a8ff 578
bogdanm 0:9b334a45a8ff 579 /* Check the input parameters format */
bogdanm 0:9b334a45a8ff 580 if(Format == FORMAT_BIN)
bogdanm 0:9b334a45a8ff 581 {
bogdanm 0:9b334a45a8ff 582 /* Convert the date structure parameters to Binary format */
bogdanm 0:9b334a45a8ff 583 sDate->Year = (uint8_t)RTC_Bcd2ToByte(sDate->Year);
bogdanm 0:9b334a45a8ff 584 sDate->Month = (uint8_t)RTC_Bcd2ToByte(sDate->Month);
bogdanm 0:9b334a45a8ff 585 sDate->Date = (uint8_t)RTC_Bcd2ToByte(sDate->Date);
bogdanm 0:9b334a45a8ff 586 }
bogdanm 0:9b334a45a8ff 587 return HAL_OK;
bogdanm 0:9b334a45a8ff 588 }
bogdanm 0:9b334a45a8ff 589
bogdanm 0:9b334a45a8ff 590 /**
bogdanm 0:9b334a45a8ff 591 * @}
bogdanm 0:9b334a45a8ff 592 */
bogdanm 0:9b334a45a8ff 593
bogdanm 0:9b334a45a8ff 594 /** @defgroup RTC_Exported_Functions_Group3 RTC Alarm functions
bogdanm 0:9b334a45a8ff 595 * @brief RTC Alarm functions
bogdanm 0:9b334a45a8ff 596 *
bogdanm 0:9b334a45a8ff 597 @verbatim
bogdanm 0:9b334a45a8ff 598 ===============================================================================
bogdanm 0:9b334a45a8ff 599 ##### RTC Alarm functions #####
bogdanm 0:9b334a45a8ff 600 ===============================================================================
bogdanm 0:9b334a45a8ff 601
bogdanm 0:9b334a45a8ff 602 [..] This section provides functions allowing to configure Alarm feature
bogdanm 0:9b334a45a8ff 603
bogdanm 0:9b334a45a8ff 604 @endverbatim
bogdanm 0:9b334a45a8ff 605 * @{
bogdanm 0:9b334a45a8ff 606 */
bogdanm 0:9b334a45a8ff 607
bogdanm 0:9b334a45a8ff 608 /**
bogdanm 0:9b334a45a8ff 609 * @brief Deactive the specified RTC Alarm
bogdanm 0:9b334a45a8ff 610 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 611 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 612 * @param Alarm: Specifies the Alarm.
bogdanm 0:9b334a45a8ff 613 * This parameter can be one of the following values:
bogdanm 0:9b334a45a8ff 614 * @arg RTC_ALARM_A: AlarmA
bogdanm 0:9b334a45a8ff 615 * @arg RTC_ALARM_B: AlarmB
bogdanm 0:9b334a45a8ff 616 * @retval HAL status
bogdanm 0:9b334a45a8ff 617 */
bogdanm 0:9b334a45a8ff 618 HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm)
bogdanm 0:9b334a45a8ff 619 {
bogdanm 0:9b334a45a8ff 620 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 621
bogdanm 0:9b334a45a8ff 622 /* Check the parameters */
bogdanm 0:9b334a45a8ff 623 assert_param(IS_ALARM(Alarm));
bogdanm 0:9b334a45a8ff 624
bogdanm 0:9b334a45a8ff 625 /* Process Locked */
bogdanm 0:9b334a45a8ff 626 __HAL_LOCK(hrtc);
bogdanm 0:9b334a45a8ff 627
bogdanm 0:9b334a45a8ff 628 hrtc->State = HAL_RTC_STATE_BUSY;
bogdanm 0:9b334a45a8ff 629
bogdanm 0:9b334a45a8ff 630 /* Disable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 631 __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 632
bogdanm 0:9b334a45a8ff 633 if(Alarm == RTC_ALARM_A)
bogdanm 0:9b334a45a8ff 634 {
bogdanm 0:9b334a45a8ff 635 /* AlarmA */
bogdanm 0:9b334a45a8ff 636 __HAL_RTC_ALARMA_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 637
bogdanm 0:9b334a45a8ff 638 /* In case of interrupt mode is used, the interrupt source must disabled */
bogdanm 0:9b334a45a8ff 639 __HAL_RTC_ALARM_DISABLE_IT(hrtc, RTC_IT_ALRA);
bogdanm 0:9b334a45a8ff 640
bogdanm 0:9b334a45a8ff 641 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 642
bogdanm 0:9b334a45a8ff 643 /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 644 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAWF) == RESET)
bogdanm 0:9b334a45a8ff 645 {
bogdanm 0:9b334a45a8ff 646 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 647 {
bogdanm 0:9b334a45a8ff 648 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 649 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 650
bogdanm 0:9b334a45a8ff 651 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 652
bogdanm 0:9b334a45a8ff 653 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 654 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 655
bogdanm 0:9b334a45a8ff 656 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 657 }
bogdanm 0:9b334a45a8ff 658 }
bogdanm 0:9b334a45a8ff 659 }
bogdanm 0:9b334a45a8ff 660 else
bogdanm 0:9b334a45a8ff 661 {
bogdanm 0:9b334a45a8ff 662 /* AlarmB */
bogdanm 0:9b334a45a8ff 663 __HAL_RTC_ALARMB_DISABLE(hrtc);
bogdanm 0:9b334a45a8ff 664
bogdanm 0:9b334a45a8ff 665 /* In case of interrupt mode is used, the interrupt source must disabled */
bogdanm 0:9b334a45a8ff 666 __HAL_RTC_ALARM_DISABLE_IT(hrtc,RTC_IT_ALRB);
bogdanm 0:9b334a45a8ff 667
bogdanm 0:9b334a45a8ff 668 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 669
bogdanm 0:9b334a45a8ff 670 /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 671 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRBWF) == RESET)
bogdanm 0:9b334a45a8ff 672 {
bogdanm 0:9b334a45a8ff 673 if((HAL_GetTick() - tickstart ) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 674 {
bogdanm 0:9b334a45a8ff 675 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 676 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 677
bogdanm 0:9b334a45a8ff 678 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 679
bogdanm 0:9b334a45a8ff 680 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 681 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 682
bogdanm 0:9b334a45a8ff 683 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 684 }
bogdanm 0:9b334a45a8ff 685 }
bogdanm 0:9b334a45a8ff 686 }
bogdanm 0:9b334a45a8ff 687 /* Enable the write protection for RTC registers */
bogdanm 0:9b334a45a8ff 688 __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
bogdanm 0:9b334a45a8ff 689
bogdanm 0:9b334a45a8ff 690 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 691
bogdanm 0:9b334a45a8ff 692 /* Process Unlocked */
bogdanm 0:9b334a45a8ff 693 __HAL_UNLOCK(hrtc);
bogdanm 0:9b334a45a8ff 694
bogdanm 0:9b334a45a8ff 695 return HAL_OK;
bogdanm 0:9b334a45a8ff 696 }
bogdanm 0:9b334a45a8ff 697
bogdanm 0:9b334a45a8ff 698 /**
bogdanm 0:9b334a45a8ff 699 * @brief This function handles Alarm interrupt request.
bogdanm 0:9b334a45a8ff 700 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 701 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 702 * @retval None
bogdanm 0:9b334a45a8ff 703 */
bogdanm 0:9b334a45a8ff 704 void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 705 {
bogdanm 0:9b334a45a8ff 706 if(__HAL_RTC_ALARM_GET_IT(hrtc, RTC_IT_ALRA))
bogdanm 0:9b334a45a8ff 707 {
bogdanm 0:9b334a45a8ff 708 /* Get the status of the Interrupt */
bogdanm 0:9b334a45a8ff 709 if((uint32_t)(hrtc->Instance->CR & RTC_IT_ALRA) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 710 {
bogdanm 0:9b334a45a8ff 711 /* AlarmA callback */
bogdanm 0:9b334a45a8ff 712 HAL_RTC_AlarmAEventCallback(hrtc);
bogdanm 0:9b334a45a8ff 713
bogdanm 0:9b334a45a8ff 714 /* Clear the Alarm interrupt pending bit */
bogdanm 0:9b334a45a8ff 715 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc,RTC_FLAG_ALRAF);
bogdanm 0:9b334a45a8ff 716 }
bogdanm 0:9b334a45a8ff 717 }
bogdanm 0:9b334a45a8ff 718
bogdanm 0:9b334a45a8ff 719 if(__HAL_RTC_ALARM_GET_IT(hrtc, RTC_IT_ALRB))
bogdanm 0:9b334a45a8ff 720 {
bogdanm 0:9b334a45a8ff 721 /* Get the status of the Interrupt */
bogdanm 0:9b334a45a8ff 722 if((uint32_t)(hrtc->Instance->CR & RTC_IT_ALRB) != (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 723 {
bogdanm 0:9b334a45a8ff 724 /* AlarmB callback */
bogdanm 0:9b334a45a8ff 725 HAL_RTCEx_AlarmBEventCallback(hrtc);
bogdanm 0:9b334a45a8ff 726
bogdanm 0:9b334a45a8ff 727 /* Clear the Alarm interrupt pending bit */
bogdanm 0:9b334a45a8ff 728 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc,RTC_FLAG_ALRBF);
bogdanm 0:9b334a45a8ff 729 }
bogdanm 0:9b334a45a8ff 730 }
bogdanm 0:9b334a45a8ff 731
bogdanm 0:9b334a45a8ff 732 /* Clear the EXTI's line Flag for RTC Alarm */
bogdanm 0:9b334a45a8ff 733 __HAL_RTC_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT);
bogdanm 0:9b334a45a8ff 734
bogdanm 0:9b334a45a8ff 735 /* Change RTC state */
bogdanm 0:9b334a45a8ff 736 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 737 }
bogdanm 0:9b334a45a8ff 738
bogdanm 0:9b334a45a8ff 739 /**
bogdanm 0:9b334a45a8ff 740 * @brief Alarm A callback.
bogdanm 0:9b334a45a8ff 741 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 742 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 743 * @retval None
bogdanm 0:9b334a45a8ff 744 */
bogdanm 0:9b334a45a8ff 745 __weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
bogdanm 0:9b334a45a8ff 746 {
bogdanm 0:9b334a45a8ff 747 /* NOTE : This function Should not be modified, when the callback is needed,
bogdanm 0:9b334a45a8ff 748 the HAL_RTC_AlarmAEventCallback could be implemented in the user file
bogdanm 0:9b334a45a8ff 749 */
bogdanm 0:9b334a45a8ff 750 }
bogdanm 0:9b334a45a8ff 751
bogdanm 0:9b334a45a8ff 752 /**
bogdanm 0:9b334a45a8ff 753 * @brief This function handles AlarmA Polling request.
bogdanm 0:9b334a45a8ff 754 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 755 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 756 * @param Timeout: Timeout duration
bogdanm 0:9b334a45a8ff 757 * @retval HAL status
bogdanm 0:9b334a45a8ff 758 */
bogdanm 0:9b334a45a8ff 759 HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout)
bogdanm 0:9b334a45a8ff 760 {
bogdanm 0:9b334a45a8ff 761
bogdanm 0:9b334a45a8ff 762 uint32_t tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 763
bogdanm 0:9b334a45a8ff 764 while(__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) == RESET)
bogdanm 0:9b334a45a8ff 765 {
bogdanm 0:9b334a45a8ff 766 if(Timeout != HAL_MAX_DELAY)
bogdanm 0:9b334a45a8ff 767 {
bogdanm 0:9b334a45a8ff 768 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
bogdanm 0:9b334a45a8ff 769 {
bogdanm 0:9b334a45a8ff 770 hrtc->State = HAL_RTC_STATE_TIMEOUT;
bogdanm 0:9b334a45a8ff 771 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 772 }
bogdanm 0:9b334a45a8ff 773 }
bogdanm 0:9b334a45a8ff 774 }
bogdanm 0:9b334a45a8ff 775
bogdanm 0:9b334a45a8ff 776 /* Clear the Alarm interrupt pending bit */
bogdanm 0:9b334a45a8ff 777 __HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF);
bogdanm 0:9b334a45a8ff 778
bogdanm 0:9b334a45a8ff 779 /* Change RTC state */
bogdanm 0:9b334a45a8ff 780 hrtc->State = HAL_RTC_STATE_READY;
bogdanm 0:9b334a45a8ff 781
bogdanm 0:9b334a45a8ff 782 return HAL_OK;
bogdanm 0:9b334a45a8ff 783 }
bogdanm 0:9b334a45a8ff 784
bogdanm 0:9b334a45a8ff 785 /**
bogdanm 0:9b334a45a8ff 786 * @}
bogdanm 0:9b334a45a8ff 787 */
bogdanm 0:9b334a45a8ff 788
bogdanm 0:9b334a45a8ff 789 /** @defgroup RTC_Exported_Functions_Group5 Peripheral State functions
bogdanm 0:9b334a45a8ff 790 * @brief Peripheral State functions
bogdanm 0:9b334a45a8ff 791 *
bogdanm 0:9b334a45a8ff 792 @verbatim
bogdanm 0:9b334a45a8ff 793 ===============================================================================
bogdanm 0:9b334a45a8ff 794 ##### Peripheral State functions #####
bogdanm 0:9b334a45a8ff 795 ===============================================================================
bogdanm 0:9b334a45a8ff 796 [..]
bogdanm 0:9b334a45a8ff 797 This subsection provides functions allowing to
bogdanm 0:9b334a45a8ff 798 (+) Get RTC state
bogdanm 0:9b334a45a8ff 799
bogdanm 0:9b334a45a8ff 800 @endverbatim
bogdanm 0:9b334a45a8ff 801 * @{
bogdanm 0:9b334a45a8ff 802 */
bogdanm 0:9b334a45a8ff 803 /**
bogdanm 0:9b334a45a8ff 804 * @brief Returns the RTC state.
bogdanm 0:9b334a45a8ff 805 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 806 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 807 * @retval HAL state
bogdanm 0:9b334a45a8ff 808 */
bogdanm 0:9b334a45a8ff 809 HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 810 {
bogdanm 0:9b334a45a8ff 811 return hrtc->State;
bogdanm 0:9b334a45a8ff 812 }
bogdanm 0:9b334a45a8ff 813
bogdanm 0:9b334a45a8ff 814 /**
bogdanm 0:9b334a45a8ff 815 * @}
bogdanm 0:9b334a45a8ff 816 */
bogdanm 0:9b334a45a8ff 817
bogdanm 0:9b334a45a8ff 818 /**
bogdanm 0:9b334a45a8ff 819 * @}
bogdanm 0:9b334a45a8ff 820 */
bogdanm 0:9b334a45a8ff 821
bogdanm 0:9b334a45a8ff 822 /** @defgroup RTC_Internal_Functions RTC Internal function
bogdanm 0:9b334a45a8ff 823 * @{
bogdanm 0:9b334a45a8ff 824 */
bogdanm 0:9b334a45a8ff 825
bogdanm 0:9b334a45a8ff 826 /**
bogdanm 0:9b334a45a8ff 827 * @brief Enters the RTC Initialization mode.
bogdanm 0:9b334a45a8ff 828 * @note The RTC Initialization mode is write protected, use the
bogdanm 0:9b334a45a8ff 829 * __HAL_RTC_WRITEPROTECTION_DISABLE() before calling this function.
bogdanm 0:9b334a45a8ff 830 * @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
bogdanm 0:9b334a45a8ff 831 * the configuration information for RTC.
bogdanm 0:9b334a45a8ff 832 * @retval HAL status
bogdanm 0:9b334a45a8ff 833 */
bogdanm 0:9b334a45a8ff 834 HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef* hrtc)
bogdanm 0:9b334a45a8ff 835 {
bogdanm 0:9b334a45a8ff 836 uint32_t tickstart = 0;
bogdanm 0:9b334a45a8ff 837
bogdanm 0:9b334a45a8ff 838 /* Check if the Initialization mode is set */
bogdanm 0:9b334a45a8ff 839 if((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 840 {
bogdanm 0:9b334a45a8ff 841 /* Set the Initialization mode */
bogdanm 0:9b334a45a8ff 842 hrtc->Instance->ISR = (uint32_t)RTC_INIT_MASK;
bogdanm 0:9b334a45a8ff 843
bogdanm 0:9b334a45a8ff 844 tickstart = HAL_GetTick();
bogdanm 0:9b334a45a8ff 845 /* Wait till RTC is in INIT state and if Time out is reached exit */
bogdanm 0:9b334a45a8ff 846 while((hrtc->Instance->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
bogdanm 0:9b334a45a8ff 847 {
bogdanm 0:9b334a45a8ff 848 if((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
bogdanm 0:9b334a45a8ff 849 {
bogdanm 0:9b334a45a8ff 850 return HAL_TIMEOUT;
bogdanm 0:9b334a45a8ff 851 }
bogdanm 0:9b334a45a8ff 852 }
bogdanm 0:9b334a45a8ff 853 }
bogdanm 0:9b334a45a8ff 854
bogdanm 0:9b334a45a8ff 855 return HAL_OK;
bogdanm 0:9b334a45a8ff 856 }
bogdanm 0:9b334a45a8ff 857
bogdanm 0:9b334a45a8ff 858 /**
bogdanm 0:9b334a45a8ff 859 * @brief Converts a 2 digit decimal to BCD format.
bogdanm 0:9b334a45a8ff 860 * @param Value: Byte to be converted
bogdanm 0:9b334a45a8ff 861 * @retval Converted byte
bogdanm 0:9b334a45a8ff 862 */
bogdanm 0:9b334a45a8ff 863 uint8_t RTC_ByteToBcd2(uint8_t Value)
bogdanm 0:9b334a45a8ff 864 {
bogdanm 0:9b334a45a8ff 865 uint32_t bcdhigh = 0;
bogdanm 0:9b334a45a8ff 866
bogdanm 0:9b334a45a8ff 867 while(Value >= 10)
bogdanm 0:9b334a45a8ff 868 {
bogdanm 0:9b334a45a8ff 869 bcdhigh++;
bogdanm 0:9b334a45a8ff 870 Value -= 10;
bogdanm 0:9b334a45a8ff 871 }
bogdanm 0:9b334a45a8ff 872
bogdanm 0:9b334a45a8ff 873 return ((uint8_t)(bcdhigh << 4) | Value);
bogdanm 0:9b334a45a8ff 874 }
bogdanm 0:9b334a45a8ff 875
bogdanm 0:9b334a45a8ff 876 /**
bogdanm 0:9b334a45a8ff 877 * @brief Converts from 2 digit BCD to Binary.
bogdanm 0:9b334a45a8ff 878 * @param Value: BCD value to be converted
bogdanm 0:9b334a45a8ff 879 * @retval Converted word
bogdanm 0:9b334a45a8ff 880 */
bogdanm 0:9b334a45a8ff 881 uint8_t RTC_Bcd2ToByte(uint8_t Value)
bogdanm 0:9b334a45a8ff 882 {
bogdanm 0:9b334a45a8ff 883 uint32_t tmp = 0;
bogdanm 0:9b334a45a8ff 884 tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10;
bogdanm 0:9b334a45a8ff 885 return (tmp + (Value & (uint8_t)0x0F));
bogdanm 0:9b334a45a8ff 886 }
bogdanm 0:9b334a45a8ff 887
bogdanm 0:9b334a45a8ff 888
bogdanm 0:9b334a45a8ff 889 /**
bogdanm 0:9b334a45a8ff 890 * @}
bogdanm 0:9b334a45a8ff 891 */
bogdanm 0:9b334a45a8ff 892
bogdanm 0:9b334a45a8ff 893 #endif /* HAL_RTC_MODULE_ENABLED */
bogdanm 0:9b334a45a8ff 894 /**
bogdanm 0:9b334a45a8ff 895 * @}
bogdanm 0:9b334a45a8ff 896 */
bogdanm 0:9b334a45a8ff 897
bogdanm 0:9b334a45a8ff 898 /**
bogdanm 0:9b334a45a8ff 899 * @}
bogdanm 0:9b334a45a8ff 900 */
bogdanm 0:9b334a45a8ff 901
bogdanm 0:9b334a45a8ff 902 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/