mbed library sources

Dependents:   bare

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Mon Jan 27 14:30:07 2014 +0000
Revision:
76:aeb1df146756
Child:
106:ced8cbb51063
Synchronized with git revision a31ec9c5f7bcb5c8a1b2eced103f6a1dfa921abd

Full URL: https://github.com/mbedmicro/mbed/commit/a31ec9c5f7bcb5c8a1b2eced103f6a1dfa921abd/

Add NUCLEO_L152RE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 76:aeb1df146756 1 /**
mbed_official 76:aeb1df146756 2 ******************************************************************************
mbed_official 76:aeb1df146756 3 * @file stm32f0xx_rtc.c
mbed_official 76:aeb1df146756 4 * @author MCD Application Team
mbed_official 76:aeb1df146756 5 * @version V1.3.0
mbed_official 76:aeb1df146756 6 * @date 16-January-2014
mbed_official 76:aeb1df146756 7 * @brief This file provides firmware functions to manage the following
mbed_official 76:aeb1df146756 8 * functionalities of the Real-Time Clock (RTC) peripheral:
mbed_official 76:aeb1df146756 9 * + Initialization
mbed_official 76:aeb1df146756 10 * + Calendar (Time and Date) configuration
mbed_official 76:aeb1df146756 11 * + Alarms (Alarm A) configuration
mbed_official 76:aeb1df146756 12 * + Daylight Saving configuration
mbed_official 76:aeb1df146756 13 * + Output pin Configuration
mbed_official 76:aeb1df146756 14 * + Digital Calibration configuration
mbed_official 76:aeb1df146756 15 * + TimeStamp configuration
mbed_official 76:aeb1df146756 16 * + Tampers configuration
mbed_official 76:aeb1df146756 17 * + Backup Data Registers configuration
mbed_official 76:aeb1df146756 18 * + Output Type Config configuration
mbed_official 76:aeb1df146756 19 * + Shift control synchronisation
mbed_official 76:aeb1df146756 20 * + Interrupts and flags management
mbed_official 76:aeb1df146756 21 *
mbed_official 76:aeb1df146756 22 @verbatim
mbed_official 76:aeb1df146756 23 ===============================================================================
mbed_official 76:aeb1df146756 24 ##### Backup Domain Operating Condition #####
mbed_official 76:aeb1df146756 25 ===============================================================================
mbed_official 76:aeb1df146756 26 [..] The real-time clock (RTC) and the RTC backup registers can be powered
mbed_official 76:aeb1df146756 27 from the VBAT voltage when the main VDD supply is powered off.
mbed_official 76:aeb1df146756 28 To retain the content of the RTC backup registers and supply the RTC
mbed_official 76:aeb1df146756 29 when VDD is turned off, VBAT pin can be connected to an optional
mbed_official 76:aeb1df146756 30 standby voltage supplied by a battery or by another source.
mbed_official 76:aeb1df146756 31
mbed_official 76:aeb1df146756 32 [..] To allow the RTC to operate even when the main digital supply (VDD)
mbed_official 76:aeb1df146756 33 is turned off, the VBAT pin powers the following blocks:
mbed_official 76:aeb1df146756 34 (#) The RTC
mbed_official 76:aeb1df146756 35 (#) The LSE oscillator
mbed_official 76:aeb1df146756 36 (#) PC13 to PC15 I/Os I/Os (when available)
mbed_official 76:aeb1df146756 37
mbed_official 76:aeb1df146756 38 [..] When the backup domain is supplied by VDD (analog switch connected
mbed_official 76:aeb1df146756 39 to VDD), the following functions are available:
mbed_official 76:aeb1df146756 40 (#) PC14 and PC15 can be used as either GPIO or LSE pins
mbed_official 76:aeb1df146756 41 (#) PC13 can be used as a GPIO or as the RTC_AF1 pin
mbed_official 76:aeb1df146756 42
mbed_official 76:aeb1df146756 43 [..] When the backup domain is supplied by VBAT (analog switch connected
mbed_official 76:aeb1df146756 44 to VBAT because VDD is not present), the following functions are available:
mbed_official 76:aeb1df146756 45 (#) PC14 and PC15 can be used as LSE pins only
mbed_official 76:aeb1df146756 46 (#) PC13 can be used as the RTC_AF1 pin
mbed_official 76:aeb1df146756 47
mbed_official 76:aeb1df146756 48 ##### Backup Domain Reset #####
mbed_official 76:aeb1df146756 49 ===============================================================================
mbed_official 76:aeb1df146756 50 [..] The backup domain reset sets all RTC registers and the RCC_BDCR
mbed_official 76:aeb1df146756 51 register to their reset values.
mbed_official 76:aeb1df146756 52 A backup domain reset is generated when one of the following events
mbed_official 76:aeb1df146756 53 occurs:
mbed_official 76:aeb1df146756 54 (#) Software reset, triggered by setting the BDRST bit in the
mbed_official 76:aeb1df146756 55 RCC Backup domain control register (RCC_BDCR). You can use the
mbed_official 76:aeb1df146756 56 RCC_BackupResetCmd().
mbed_official 76:aeb1df146756 57 (#) VDD or VBAT power on, if both supplies have previously been
mbed_official 76:aeb1df146756 58 powered off.
mbed_official 76:aeb1df146756 59
mbed_official 76:aeb1df146756 60 ##### Backup Domain Access #####
mbed_official 76:aeb1df146756 61 ===============================================================================
mbed_official 76:aeb1df146756 62 [..] After reset, the backup domain (RTC registers and RTC backup data
mbed_official 76:aeb1df146756 63 registers) is protected against possible unwanted write accesses.
mbed_official 76:aeb1df146756 64 [..] To enable access to the Backup Domain and RTC registers, proceed as follows:
mbed_official 76:aeb1df146756 65 (#) Enable the Power Controller (PWR) APB1 interface clock using the
mbed_official 76:aeb1df146756 66 RCC_APB1PeriphClockCmd() function.
mbed_official 76:aeb1df146756 67 (#) Enable access to Backup domain using the PWR_BackupAccessCmd() function.
mbed_official 76:aeb1df146756 68 (#) Select the RTC clock source using the RCC_RTCCLKConfig() function.
mbed_official 76:aeb1df146756 69 (#) Enable RTC Clock using the RCC_RTCCLKCmd() function.
mbed_official 76:aeb1df146756 70
mbed_official 76:aeb1df146756 71
mbed_official 76:aeb1df146756 72 ##### How to use this driver #####
mbed_official 76:aeb1df146756 73 ===============================================================================
mbed_official 76:aeb1df146756 74 [..]
mbed_official 76:aeb1df146756 75 (+) Enable the backup domain access (see description in the section above)
mbed_official 76:aeb1df146756 76 (+) Configure the RTC Prescaler (Asynchronous and Synchronous) and
mbed_official 76:aeb1df146756 77 RTC hour format using the RTC_Init() function.
mbed_official 76:aeb1df146756 78
mbed_official 76:aeb1df146756 79 ***Time and Date configuration ***
mbed_official 76:aeb1df146756 80 ==================================
mbed_official 76:aeb1df146756 81 [..]
mbed_official 76:aeb1df146756 82 (+) To configure the RTC Calendar (Time and Date) use the RTC_SetTime()
mbed_official 76:aeb1df146756 83 and RTC_SetDate() functions.
mbed_official 76:aeb1df146756 84 (+) To read the RTC Calendar, use the RTC_GetTime() and RTC_GetDate()
mbed_official 76:aeb1df146756 85 functions.
mbed_official 76:aeb1df146756 86 (+) To read the RTC subsecond, use the RTC_GetSubSecond() function.
mbed_official 76:aeb1df146756 87 (+) Use the RTC_DayLightSavingConfig() function to add or sub one
mbed_official 76:aeb1df146756 88 hour to the RTC Calendar.
mbed_official 76:aeb1df146756 89
mbed_official 76:aeb1df146756 90 ***Alarm configuration ***
mbed_official 76:aeb1df146756 91 ==========================
mbed_official 76:aeb1df146756 92 [..]
mbed_official 76:aeb1df146756 93 (+) To configure the RTC Alarm use the RTC_SetAlarm() function.
mbed_official 76:aeb1df146756 94 (+) Enable the selected RTC Alarm using the RTC_AlarmCmd() function
mbed_official 76:aeb1df146756 95 (+) To read the RTC Alarm, use the RTC_GetAlarm() function.
mbed_official 76:aeb1df146756 96 (+) To read the RTC alarm SubSecond, use the RTC_GetAlarmSubSecond() function.
mbed_official 76:aeb1df146756 97
mbed_official 76:aeb1df146756 98 ***RTC Wakeup configuration***
mbed_official 76:aeb1df146756 99 ==========================
mbed_official 76:aeb1df146756 100 [..]
mbed_official 76:aeb1df146756 101 (+) Configure the RTC Wakeup Clock source use the RTC_WakeUpClockConfig()
mbed_official 76:aeb1df146756 102 function.
mbed_official 76:aeb1df146756 103 (+) Configure the RTC WakeUp Counter using the RTC_SetWakeUpCounter()
mbed_official 76:aeb1df146756 104 function
mbed_official 76:aeb1df146756 105 (+) Enable the RTC WakeUp using the RTC_WakeUpCmd() function
mbed_official 76:aeb1df146756 106 (+) To read the RTC WakeUp Counter register, use the RTC_GetWakeUpCounter()
mbed_official 76:aeb1df146756 107 function.
mbed_official 76:aeb1df146756 108
mbed_official 76:aeb1df146756 109 ***Outputs configuration ***
mbed_official 76:aeb1df146756 110 ============================
mbed_official 76:aeb1df146756 111 [..] The RTC has 2 different outputs:
mbed_official 76:aeb1df146756 112 (+) AFO_ALARM: this output is used to manage the RTC Alarm A.
mbed_official 76:aeb1df146756 113 To output the selected RTC signal on RTC_AF1 pin, use the
mbed_official 76:aeb1df146756 114 RTC_OutputConfig() function.
mbed_official 76:aeb1df146756 115 (+) AFO_CALIB: this output is 512Hz signal or 1Hz .
mbed_official 76:aeb1df146756 116 To output the RTC Clock on RTC_AF1 pin, use the RTC_CalibOutputCmd()
mbed_official 76:aeb1df146756 117 function.
mbed_official 76:aeb1df146756 118
mbed_official 76:aeb1df146756 119 ***Original Digital Calibration configuration ***
mbed_official 76:aeb1df146756 120 =================================
mbed_official 76:aeb1df146756 121 [..] Configure the RTC Original Digital Calibration Value and the corresponding
mbed_official 76:aeb1df146756 122 calibration cycle period (32s,16s and 8s) using the RTC_SmoothCalibConfig()
mbed_official 76:aeb1df146756 123 function.
mbed_official 76:aeb1df146756 124
mbed_official 76:aeb1df146756 125 ***TimeStamp configuration ***
mbed_official 76:aeb1df146756 126 ==============================
mbed_official 76:aeb1df146756 127 [..]
mbed_official 76:aeb1df146756 128 (+) Configure the RTC_AF1 trigger and enables the RTC TimeStamp
mbed_official 76:aeb1df146756 129 using the RTC_TimeStampCmd() function.
mbed_official 76:aeb1df146756 130 (+) To read the RTC TimeStamp Time and Date register, use the
mbed_official 76:aeb1df146756 131 RTC_GetTimeStamp() function.
mbed_official 76:aeb1df146756 132 (+) To read the RTC TimeStamp SubSecond register, use the
mbed_official 76:aeb1df146756 133 RTC_GetTimeStampSubSecond() function.
mbed_official 76:aeb1df146756 134
mbed_official 76:aeb1df146756 135 ***Tamper configuration ***
mbed_official 76:aeb1df146756 136 ===========================
mbed_official 76:aeb1df146756 137 [..]
mbed_official 76:aeb1df146756 138 (+) Configure the Tamper filter count using RTC_TamperFilterConfig()
mbed_official 76:aeb1df146756 139 function.
mbed_official 76:aeb1df146756 140 (+) Configure the RTC Tamper trigger Edge or Level according to the Tamper
mbed_official 76:aeb1df146756 141 filter (if equal to 0 Edge else Level) value using the RTC_TamperConfig() function
mbed_official 76:aeb1df146756 142 (+) Configure the Tamper sampling frequency using RTC_TamperSamplingFreqConfig()
mbed_official 76:aeb1df146756 143 function.
mbed_official 76:aeb1df146756 144 (+) Configure the Tamper precharge or discharge duration using
mbed_official 76:aeb1df146756 145 RTC_TamperPinsPrechargeDuration() function.
mbed_official 76:aeb1df146756 146 (+) Enable the Tamper Pull-UP using RTC_TamperPullUpDisableCmd() function.
mbed_official 76:aeb1df146756 147 (+) Enable the RTC Tamper using the RTC_TamperCmd() function.
mbed_official 76:aeb1df146756 148 (+) Enable the Time stamp on Tamper detection event using
mbed_official 76:aeb1df146756 149 RTC_TSOnTamperDetecCmd() function.
mbed_official 76:aeb1df146756 150
mbed_official 76:aeb1df146756 151 ***Backup Data Registers configuration ***
mbed_official 76:aeb1df146756 152 ==========================================
mbed_official 76:aeb1df146756 153 [..]
mbed_official 76:aeb1df146756 154 (+) To write to the RTC Backup Data registers, use the RTC_WriteBackupRegister()
mbed_official 76:aeb1df146756 155 function.
mbed_official 76:aeb1df146756 156 (+) To read the RTC Backup Data registers, use the RTC_ReadBackupRegister()
mbed_official 76:aeb1df146756 157 function.
mbed_official 76:aeb1df146756 158
mbed_official 76:aeb1df146756 159 ##### RTC and low power modes #####
mbed_official 76:aeb1df146756 160 ===============================================================================
mbed_official 76:aeb1df146756 161 [..] The MCU can be woken up from a low power mode by an RTC alternate
mbed_official 76:aeb1df146756 162 function.
mbed_official 76:aeb1df146756 163 [..] The RTC alternate functions are the RTC alarm (Alarm A), RTC tamper
mbed_official 76:aeb1df146756 164 event detection and RTC time stamp event detection.
mbed_official 76:aeb1df146756 165 These RTC alternate functions can wake up the system from the Stop
mbed_official 76:aeb1df146756 166 and Standby lowpower modes.
mbed_official 76:aeb1df146756 167 The system can also wake up from low power modes without depending
mbed_official 76:aeb1df146756 168 on an external interrupt (Auto-wakeup mode), by using the RTC alarm events.
mbed_official 76:aeb1df146756 169 [..] The RTC provides a programmable time base for waking up from the
mbed_official 76:aeb1df146756 170 Stop or Standby mode at regular intervals.
mbed_official 76:aeb1df146756 171 Wakeup from STOP and Standby modes is possible only when the RTC
mbed_official 76:aeb1df146756 172 clock source is LSE or LSI.
mbed_official 76:aeb1df146756 173
mbed_official 76:aeb1df146756 174 ##### Selection of RTC_AF1 alternate functions #####
mbed_official 76:aeb1df146756 175 ===============================================================================
mbed_official 76:aeb1df146756 176 [..] The RTC_AF1 pin (PC13) can be used for the following purposes:
mbed_official 76:aeb1df146756 177 (+) AFO_ALARM output
mbed_official 76:aeb1df146756 178 (+) AFO_CALIB output
mbed_official 76:aeb1df146756 179 (+) AFI_TAMPER
mbed_official 76:aeb1df146756 180 (+) AFI_TIMESTAMP
mbed_official 76:aeb1df146756 181
mbed_official 76:aeb1df146756 182 +------------------------------------------------------------------------------------------+
mbed_official 76:aeb1df146756 183 | Pin |AFO_ALARM |AFO_CALIB |AFI_TAMPER |AFI_TIMESTAMP | WKUP2 |ALARMOUTTYPE |
mbed_official 76:aeb1df146756 184 | configuration | ENABLED | ENABLED | ENABLED | ENABLED |ENABLED | AFO_ALARM |
mbed_official 76:aeb1df146756 185 | and function | | | | | |Configuration |
mbed_official 76:aeb1df146756 186 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 187 | Alarm out | | | | | Don't | |
mbed_official 76:aeb1df146756 188 | output OD | 1 | 0 |Don't care | Don't care | care | 0 |
mbed_official 76:aeb1df146756 189 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 190 | Alarm out | | | | | Don't | |
mbed_official 76:aeb1df146756 191 | output PP | 1 | 0 |Don't care | Don't care | care | 1 |
mbed_official 76:aeb1df146756 192 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 193 | Calibration out | | | | | Don't | |
mbed_official 76:aeb1df146756 194 | output PP | 0 | 1 |Don't care | Don't care | care | Don't care |
mbed_official 76:aeb1df146756 195 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 196 | TAMPER input | | | | | Don't | |
mbed_official 76:aeb1df146756 197 | floating | 0 | 0 | 1 | 0 | care | Don't care |
mbed_official 76:aeb1df146756 198 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 199 | TIMESTAMP and | | | | | Don't | |
mbed_official 76:aeb1df146756 200 | TAMPER input | 0 | 0 | 1 | 1 | care | Don't care |
mbed_official 76:aeb1df146756 201 | floating | | | | | | |
mbed_official 76:aeb1df146756 202 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 203 | TIMESTAMP input | | | | | Don't | |
mbed_official 76:aeb1df146756 204 | floating | 0 | 0 | 0 | 1 | care | Don't care |
mbed_official 76:aeb1df146756 205 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 206 | Wakeup Pin 2 | 0 | 0 | 0 | 0 | 1 | Don't care |
mbed_official 76:aeb1df146756 207 |-----------------|----------|----------|-----------|--------------|--------|--------------|
mbed_official 76:aeb1df146756 208 | Standard GPIO | 0 | 0 | 0 | 0 | 0 | Don't care |
mbed_official 76:aeb1df146756 209 +------------------------------------------------------------------------------------------+
mbed_official 76:aeb1df146756 210
mbed_official 76:aeb1df146756 211 @endverbatim
mbed_official 76:aeb1df146756 212
mbed_official 76:aeb1df146756 213 ******************************************************************************
mbed_official 76:aeb1df146756 214 * @attention
mbed_official 76:aeb1df146756 215 *
mbed_official 76:aeb1df146756 216 * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
mbed_official 76:aeb1df146756 217 *
mbed_official 76:aeb1df146756 218 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
mbed_official 76:aeb1df146756 219 * You may not use this file except in compliance with the License.
mbed_official 76:aeb1df146756 220 * You may obtain a copy of the License at:
mbed_official 76:aeb1df146756 221 *
mbed_official 76:aeb1df146756 222 * http://www.st.com/software_license_agreement_liberty_v2
mbed_official 76:aeb1df146756 223 *
mbed_official 76:aeb1df146756 224 * Unless required by applicable law or agreed to in writing, software
mbed_official 76:aeb1df146756 225 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 76:aeb1df146756 226 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 76:aeb1df146756 227 * See the License for the specific language governing permissions and
mbed_official 76:aeb1df146756 228 * limitations under the License.
mbed_official 76:aeb1df146756 229 *
mbed_official 76:aeb1df146756 230 ******************************************************************************
mbed_official 76:aeb1df146756 231 */
mbed_official 76:aeb1df146756 232
mbed_official 76:aeb1df146756 233 /* Includes ------------------------------------------------------------------*/
mbed_official 76:aeb1df146756 234 #include "stm32f0xx_rtc.h"
mbed_official 76:aeb1df146756 235
mbed_official 76:aeb1df146756 236 /** @addtogroup STM32F0xx_StdPeriph_Driver
mbed_official 76:aeb1df146756 237 * @{
mbed_official 76:aeb1df146756 238 */
mbed_official 76:aeb1df146756 239
mbed_official 76:aeb1df146756 240 /** @defgroup RTC
mbed_official 76:aeb1df146756 241 * @brief RTC driver modules
mbed_official 76:aeb1df146756 242 * @{
mbed_official 76:aeb1df146756 243 */
mbed_official 76:aeb1df146756 244
mbed_official 76:aeb1df146756 245 /* Private typedef -----------------------------------------------------------*/
mbed_official 76:aeb1df146756 246 /* Private define ------------------------------------------------------------*/
mbed_official 76:aeb1df146756 247
mbed_official 76:aeb1df146756 248 /* Masks Definition */
mbed_official 76:aeb1df146756 249 #define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7F)
mbed_official 76:aeb1df146756 250 #define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3F)
mbed_official 76:aeb1df146756 251 #define RTC_INIT_MASK ((uint32_t)0xFFFFFFFF)
mbed_official 76:aeb1df146756 252 #define RTC_RSF_MASK ((uint32_t)0xFFFFFF5F)
mbed_official 76:aeb1df146756 253 #define RTC_FLAGS_MASK ((uint32_t)(RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_ALRAF | \
mbed_official 76:aeb1df146756 254 RTC_FLAG_RSF | RTC_FLAG_INITS |RTC_FLAG_INITF | \
mbed_official 76:aeb1df146756 255 RTC_FLAG_TAMP1F | RTC_FLAG_TAMP2F | RTC_FLAG_RECALPF | \
mbed_official 76:aeb1df146756 256 RTC_FLAG_SHPF))
mbed_official 76:aeb1df146756 257
mbed_official 76:aeb1df146756 258 #define INITMODE_TIMEOUT ((uint32_t) 0x00004000)
mbed_official 76:aeb1df146756 259 #define SYNCHRO_TIMEOUT ((uint32_t) 0x00008000)
mbed_official 76:aeb1df146756 260 #define RECALPF_TIMEOUT ((uint32_t) 0x00001000)
mbed_official 76:aeb1df146756 261 #define SHPF_TIMEOUT ((uint32_t) 0x00001000)
mbed_official 76:aeb1df146756 262
mbed_official 76:aeb1df146756 263 /* Private macro -------------------------------------------------------------*/
mbed_official 76:aeb1df146756 264 /* Private variables ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 265 /* Private function prototypes -----------------------------------------------*/
mbed_official 76:aeb1df146756 266 static uint8_t RTC_ByteToBcd2(uint8_t Value);
mbed_official 76:aeb1df146756 267 static uint8_t RTC_Bcd2ToByte(uint8_t Value);
mbed_official 76:aeb1df146756 268
mbed_official 76:aeb1df146756 269 /* Private functions ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 270
mbed_official 76:aeb1df146756 271 /** @defgroup RTC_Private_Functions
mbed_official 76:aeb1df146756 272 * @{
mbed_official 76:aeb1df146756 273 */
mbed_official 76:aeb1df146756 274
mbed_official 76:aeb1df146756 275 /** @defgroup RTC_Group1 Initialization and Configuration functions
mbed_official 76:aeb1df146756 276 * @brief Initialization and Configuration functions
mbed_official 76:aeb1df146756 277 *
mbed_official 76:aeb1df146756 278 @verbatim
mbed_official 76:aeb1df146756 279 ===============================================================================
mbed_official 76:aeb1df146756 280 ##### Initialization and Configuration functions #####
mbed_official 76:aeb1df146756 281 ===============================================================================
mbed_official 76:aeb1df146756 282
mbed_official 76:aeb1df146756 283 [..] This section provide functions allowing to initialize and configure the RTC
mbed_official 76:aeb1df146756 284 Prescaler (Synchronous and Asynchronous), RTC Hour format, disable RTC registers
mbed_official 76:aeb1df146756 285 Write protection, enter and exit the RTC initialization mode, RTC registers
mbed_official 76:aeb1df146756 286 synchronization check and reference clock detection enable.
mbed_official 76:aeb1df146756 287
mbed_official 76:aeb1df146756 288 (#) The RTC Prescaler is programmed to generate the RTC 1Hz time base.
mbed_official 76:aeb1df146756 289 It is split into 2 programmable prescalers to minimize power consumption.
mbed_official 76:aeb1df146756 290 (++) A 7-bit asynchronous prescaler and A 13-bit synchronous prescaler.
mbed_official 76:aeb1df146756 291 (++) When both prescalers are used, it is recommended to configure the
mbed_official 76:aeb1df146756 292 asynchronous prescaler to a high value to minimize consumption.
mbed_official 76:aeb1df146756 293 (#) All RTC registers are Write protected. Writing to the RTC registers
mbed_official 76:aeb1df146756 294 is enabled by writing a key into the Write Protection register, RTC_WPR.
mbed_official 76:aeb1df146756 295 (#) To Configure the RTC Calendar, user application should enter
mbed_official 76:aeb1df146756 296 initialization mode. In this mode, the calendar counter is stopped
mbed_official 76:aeb1df146756 297 and its value can be updated. When the initialization sequence is
mbed_official 76:aeb1df146756 298 complete, the calendar restarts counting after 4 RTCCLK cycles.
mbed_official 76:aeb1df146756 299 (#) To read the calendar through the shadow registers after Calendar
mbed_official 76:aeb1df146756 300 initialization, calendar update or after wakeup from low power modes
mbed_official 76:aeb1df146756 301 the software must first clear the RSF flag. The software must then
mbed_official 76:aeb1df146756 302 wait until it is set again before reading the calendar, which means
mbed_official 76:aeb1df146756 303 that the calendar registers have been correctly copied into the
mbed_official 76:aeb1df146756 304 RTC_TR and RTC_DR shadow registers.The RTC_WaitForSynchro() function
mbed_official 76:aeb1df146756 305 implements the above software sequence (RSF clear and RSF check).
mbed_official 76:aeb1df146756 306
mbed_official 76:aeb1df146756 307 @endverbatim
mbed_official 76:aeb1df146756 308 * @{
mbed_official 76:aeb1df146756 309 */
mbed_official 76:aeb1df146756 310
mbed_official 76:aeb1df146756 311 /**
mbed_official 76:aeb1df146756 312 * @brief Deinitializes the RTC registers to their default reset values.
mbed_official 76:aeb1df146756 313 * @note This function doesn't reset the RTC Clock source and RTC Backup Data
mbed_official 76:aeb1df146756 314 * registers.
mbed_official 76:aeb1df146756 315 * @param None
mbed_official 76:aeb1df146756 316 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 317 * - SUCCESS: RTC registers are deinitialized
mbed_official 76:aeb1df146756 318 * - ERROR: RTC registers are not deinitialized
mbed_official 76:aeb1df146756 319 */
mbed_official 76:aeb1df146756 320 ErrorStatus RTC_DeInit(void)
mbed_official 76:aeb1df146756 321 {
mbed_official 76:aeb1df146756 322 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 323
mbed_official 76:aeb1df146756 324 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 325 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 326 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 327
mbed_official 76:aeb1df146756 328 /* Set Initialization mode */
mbed_official 76:aeb1df146756 329 if (RTC_EnterInitMode() == ERROR)
mbed_official 76:aeb1df146756 330 {
mbed_official 76:aeb1df146756 331 status = ERROR;
mbed_official 76:aeb1df146756 332 }
mbed_official 76:aeb1df146756 333 else
mbed_official 76:aeb1df146756 334 {
mbed_official 76:aeb1df146756 335 /* Reset TR, DR and CR registers */
mbed_official 76:aeb1df146756 336 RTC->TR = (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 337 RTC->WUTR = (uint32_t)0x0000FFFF;
mbed_official 76:aeb1df146756 338 RTC->DR = (uint32_t)0x00002101;
mbed_official 76:aeb1df146756 339 RTC->CR &= (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 340 RTC->PRER = (uint32_t)0x007F00FF;
mbed_official 76:aeb1df146756 341 RTC->ALRMAR = (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 342 RTC->SHIFTR = (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 343 RTC->CALR = (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 344 RTC->ALRMASSR = (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 345
mbed_official 76:aeb1df146756 346 /* Reset ISR register and exit initialization mode */
mbed_official 76:aeb1df146756 347 RTC->ISR = (uint32_t)0x00000000;
mbed_official 76:aeb1df146756 348
mbed_official 76:aeb1df146756 349 /* Reset Tamper and alternate functions configuration register */
mbed_official 76:aeb1df146756 350 RTC->TAFCR = 0x00000000;
mbed_official 76:aeb1df146756 351
mbed_official 76:aeb1df146756 352 /* Wait till the RTC RSF flag is set */
mbed_official 76:aeb1df146756 353 if (RTC_WaitForSynchro() == ERROR)
mbed_official 76:aeb1df146756 354 {
mbed_official 76:aeb1df146756 355 status = ERROR;
mbed_official 76:aeb1df146756 356 }
mbed_official 76:aeb1df146756 357 else
mbed_official 76:aeb1df146756 358 {
mbed_official 76:aeb1df146756 359 status = SUCCESS;
mbed_official 76:aeb1df146756 360 }
mbed_official 76:aeb1df146756 361
mbed_official 76:aeb1df146756 362 }
mbed_official 76:aeb1df146756 363
mbed_official 76:aeb1df146756 364 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 365 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 366
mbed_official 76:aeb1df146756 367 return status;
mbed_official 76:aeb1df146756 368 }
mbed_official 76:aeb1df146756 369
mbed_official 76:aeb1df146756 370 /**
mbed_official 76:aeb1df146756 371 * @brief Initializes the RTC registers according to the specified parameters
mbed_official 76:aeb1df146756 372 * in RTC_InitStruct.
mbed_official 76:aeb1df146756 373 * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure that contains
mbed_official 76:aeb1df146756 374 * the configuration information for the RTC peripheral.
mbed_official 76:aeb1df146756 375 * @note The RTC Prescaler register is write protected and can be written in
mbed_official 76:aeb1df146756 376 * initialization mode only.
mbed_official 76:aeb1df146756 377 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 378 * - SUCCESS: RTC registers are initialized
mbed_official 76:aeb1df146756 379 * - ERROR: RTC registers are not initialized
mbed_official 76:aeb1df146756 380 */
mbed_official 76:aeb1df146756 381 ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)
mbed_official 76:aeb1df146756 382 {
mbed_official 76:aeb1df146756 383 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 384
mbed_official 76:aeb1df146756 385 /* Check the parameters */
mbed_official 76:aeb1df146756 386 assert_param(IS_RTC_HOUR_FORMAT(RTC_InitStruct->RTC_HourFormat));
mbed_official 76:aeb1df146756 387 assert_param(IS_RTC_ASYNCH_PREDIV(RTC_InitStruct->RTC_AsynchPrediv));
mbed_official 76:aeb1df146756 388 assert_param(IS_RTC_SYNCH_PREDIV(RTC_InitStruct->RTC_SynchPrediv));
mbed_official 76:aeb1df146756 389
mbed_official 76:aeb1df146756 390 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 391 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 392 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 393
mbed_official 76:aeb1df146756 394 /* Set Initialization mode */
mbed_official 76:aeb1df146756 395 if (RTC_EnterInitMode() == ERROR)
mbed_official 76:aeb1df146756 396 {
mbed_official 76:aeb1df146756 397 status = ERROR;
mbed_official 76:aeb1df146756 398 }
mbed_official 76:aeb1df146756 399 else
mbed_official 76:aeb1df146756 400 {
mbed_official 76:aeb1df146756 401 /* Clear RTC CR FMT Bit */
mbed_official 76:aeb1df146756 402 RTC->CR &= ((uint32_t)~(RTC_CR_FMT));
mbed_official 76:aeb1df146756 403 /* Set RTC_CR register */
mbed_official 76:aeb1df146756 404 RTC->CR |= ((uint32_t)(RTC_InitStruct->RTC_HourFormat));
mbed_official 76:aeb1df146756 405
mbed_official 76:aeb1df146756 406 /* Configure the RTC PRER */
mbed_official 76:aeb1df146756 407 RTC->PRER = (uint32_t)(RTC_InitStruct->RTC_SynchPrediv);
mbed_official 76:aeb1df146756 408 RTC->PRER |= (uint32_t)(RTC_InitStruct->RTC_AsynchPrediv << 16);
mbed_official 76:aeb1df146756 409
mbed_official 76:aeb1df146756 410 /* Exit Initialization mode */
mbed_official 76:aeb1df146756 411 RTC_ExitInitMode();
mbed_official 76:aeb1df146756 412
mbed_official 76:aeb1df146756 413 status = SUCCESS;
mbed_official 76:aeb1df146756 414 }
mbed_official 76:aeb1df146756 415 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 416 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 417
mbed_official 76:aeb1df146756 418 return status;
mbed_official 76:aeb1df146756 419 }
mbed_official 76:aeb1df146756 420
mbed_official 76:aeb1df146756 421 /**
mbed_official 76:aeb1df146756 422 * @brief Fills each RTC_InitStruct member with its default value.
mbed_official 76:aeb1df146756 423 * @param RTC_InitStruct: pointer to a RTC_InitTypeDef structure which will be
mbed_official 76:aeb1df146756 424 * initialized.
mbed_official 76:aeb1df146756 425 * @retval None
mbed_official 76:aeb1df146756 426 */
mbed_official 76:aeb1df146756 427 void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct)
mbed_official 76:aeb1df146756 428 {
mbed_official 76:aeb1df146756 429 /* Initialize the RTC_HourFormat member */
mbed_official 76:aeb1df146756 430 RTC_InitStruct->RTC_HourFormat = RTC_HourFormat_24;
mbed_official 76:aeb1df146756 431
mbed_official 76:aeb1df146756 432 /* Initialize the RTC_AsynchPrediv member */
mbed_official 76:aeb1df146756 433 RTC_InitStruct->RTC_AsynchPrediv = (uint32_t)0x7F;
mbed_official 76:aeb1df146756 434
mbed_official 76:aeb1df146756 435 /* Initialize the RTC_SynchPrediv member */
mbed_official 76:aeb1df146756 436 RTC_InitStruct->RTC_SynchPrediv = (uint32_t)0xFF;
mbed_official 76:aeb1df146756 437 }
mbed_official 76:aeb1df146756 438
mbed_official 76:aeb1df146756 439 /**
mbed_official 76:aeb1df146756 440 * @brief Enables or disables the RTC registers write protection.
mbed_official 76:aeb1df146756 441 * @note All the RTC registers are write protected except for RTC_ISR[13:8],
mbed_official 76:aeb1df146756 442 * RTC_TAFCR and RTC_BKPxR.
mbed_official 76:aeb1df146756 443 * @note Writing a wrong key reactivates the write protection.
mbed_official 76:aeb1df146756 444 * @note The protection mechanism is not affected by system reset.
mbed_official 76:aeb1df146756 445 * @param NewState: new state of the write protection.
mbed_official 76:aeb1df146756 446 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 447 * @retval None
mbed_official 76:aeb1df146756 448 */
mbed_official 76:aeb1df146756 449 void RTC_WriteProtectionCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 450 {
mbed_official 76:aeb1df146756 451 /* Check the parameters */
mbed_official 76:aeb1df146756 452 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 453
mbed_official 76:aeb1df146756 454 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 455 {
mbed_official 76:aeb1df146756 456 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 457 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 458 }
mbed_official 76:aeb1df146756 459 else
mbed_official 76:aeb1df146756 460 {
mbed_official 76:aeb1df146756 461 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 462 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 463 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 464 }
mbed_official 76:aeb1df146756 465 }
mbed_official 76:aeb1df146756 466
mbed_official 76:aeb1df146756 467 /**
mbed_official 76:aeb1df146756 468 * @brief Enters the RTC Initialization mode.
mbed_official 76:aeb1df146756 469 * @note The RTC Initialization mode is write protected, use the
mbed_official 76:aeb1df146756 470 * RTC_WriteProtectionCmd(DISABLE) before calling this function.
mbed_official 76:aeb1df146756 471 * @param None
mbed_official 76:aeb1df146756 472 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 473 * - SUCCESS: RTC is in Init mode
mbed_official 76:aeb1df146756 474 * - ERROR: RTC is not in Init mode
mbed_official 76:aeb1df146756 475 */
mbed_official 76:aeb1df146756 476 ErrorStatus RTC_EnterInitMode(void)
mbed_official 76:aeb1df146756 477 {
mbed_official 76:aeb1df146756 478 __IO uint32_t initcounter = 0x00;
mbed_official 76:aeb1df146756 479 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 480 uint32_t initstatus = 0x00;
mbed_official 76:aeb1df146756 481
mbed_official 76:aeb1df146756 482 /* Check if the Initialization mode is set */
mbed_official 76:aeb1df146756 483 if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
mbed_official 76:aeb1df146756 484 {
mbed_official 76:aeb1df146756 485 /* Set the Initialization mode */
mbed_official 76:aeb1df146756 486 RTC->ISR = (uint32_t)RTC_INIT_MASK;
mbed_official 76:aeb1df146756 487
mbed_official 76:aeb1df146756 488 /* Wait till RTC is in INIT state and if Time out is reached exit */
mbed_official 76:aeb1df146756 489 do
mbed_official 76:aeb1df146756 490 {
mbed_official 76:aeb1df146756 491 initstatus = RTC->ISR & RTC_ISR_INITF;
mbed_official 76:aeb1df146756 492 initcounter++;
mbed_official 76:aeb1df146756 493 } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00));
mbed_official 76:aeb1df146756 494
mbed_official 76:aeb1df146756 495 if ((RTC->ISR & RTC_ISR_INITF) != RESET)
mbed_official 76:aeb1df146756 496 {
mbed_official 76:aeb1df146756 497 status = SUCCESS;
mbed_official 76:aeb1df146756 498 }
mbed_official 76:aeb1df146756 499 else
mbed_official 76:aeb1df146756 500 {
mbed_official 76:aeb1df146756 501 status = ERROR;
mbed_official 76:aeb1df146756 502 }
mbed_official 76:aeb1df146756 503 }
mbed_official 76:aeb1df146756 504 else
mbed_official 76:aeb1df146756 505 {
mbed_official 76:aeb1df146756 506 status = SUCCESS;
mbed_official 76:aeb1df146756 507 }
mbed_official 76:aeb1df146756 508
mbed_official 76:aeb1df146756 509 return (status);
mbed_official 76:aeb1df146756 510 }
mbed_official 76:aeb1df146756 511
mbed_official 76:aeb1df146756 512 /**
mbed_official 76:aeb1df146756 513 * @brief Exits the RTC Initialization mode.
mbed_official 76:aeb1df146756 514 * @note When the initialization sequence is complete, the calendar restarts
mbed_official 76:aeb1df146756 515 * counting after 4 RTCCLK cycles.
mbed_official 76:aeb1df146756 516 * @note The RTC Initialization mode is write protected, use the
mbed_official 76:aeb1df146756 517 * RTC_WriteProtectionCmd(DISABLE) before calling this function.
mbed_official 76:aeb1df146756 518 * @param None
mbed_official 76:aeb1df146756 519 * @retval None
mbed_official 76:aeb1df146756 520 */
mbed_official 76:aeb1df146756 521 void RTC_ExitInitMode(void)
mbed_official 76:aeb1df146756 522 {
mbed_official 76:aeb1df146756 523 /* Exit Initialization mode */
mbed_official 76:aeb1df146756 524 RTC->ISR &= (uint32_t)~RTC_ISR_INIT;
mbed_official 76:aeb1df146756 525 }
mbed_official 76:aeb1df146756 526
mbed_official 76:aeb1df146756 527 /**
mbed_official 76:aeb1df146756 528 * @brief Waits until the RTC Time and Date registers (RTC_TR and RTC_DR) are
mbed_official 76:aeb1df146756 529 * synchronized with RTC APB clock.
mbed_official 76:aeb1df146756 530 * @note The RTC Resynchronization mode is write protected, use the
mbed_official 76:aeb1df146756 531 * RTC_WriteProtectionCmd(DISABLE) before calling this function.
mbed_official 76:aeb1df146756 532 * @note To read the calendar through the shadow registers after Calendar
mbed_official 76:aeb1df146756 533 * initialization, calendar update or after wakeup from low power modes
mbed_official 76:aeb1df146756 534 * the software must first clear the RSF flag.
mbed_official 76:aeb1df146756 535 * The software must then wait until it is set again before reading
mbed_official 76:aeb1df146756 536 * the calendar, which means that the calendar registers have been
mbed_official 76:aeb1df146756 537 * correctly copied into the RTC_TR and RTC_DR shadow registers.
mbed_official 76:aeb1df146756 538 * @param None
mbed_official 76:aeb1df146756 539 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 540 * - SUCCESS: RTC registers are synchronised
mbed_official 76:aeb1df146756 541 * - ERROR: RTC registers are not synchronised
mbed_official 76:aeb1df146756 542 */
mbed_official 76:aeb1df146756 543 ErrorStatus RTC_WaitForSynchro(void)
mbed_official 76:aeb1df146756 544 {
mbed_official 76:aeb1df146756 545 __IO uint32_t synchrocounter = 0;
mbed_official 76:aeb1df146756 546 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 547 uint32_t synchrostatus = 0x00;
mbed_official 76:aeb1df146756 548
mbed_official 76:aeb1df146756 549 if ((RTC->CR & RTC_CR_BYPSHAD) != RESET)
mbed_official 76:aeb1df146756 550 {
mbed_official 76:aeb1df146756 551 /* Bypass shadow mode */
mbed_official 76:aeb1df146756 552 status = SUCCESS;
mbed_official 76:aeb1df146756 553 }
mbed_official 76:aeb1df146756 554 else
mbed_official 76:aeb1df146756 555 {
mbed_official 76:aeb1df146756 556 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 557 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 558 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 559
mbed_official 76:aeb1df146756 560 /* Clear RSF flag */
mbed_official 76:aeb1df146756 561 RTC->ISR &= (uint32_t)RTC_RSF_MASK;
mbed_official 76:aeb1df146756 562
mbed_official 76:aeb1df146756 563 /* Wait the registers to be synchronised */
mbed_official 76:aeb1df146756 564 do
mbed_official 76:aeb1df146756 565 {
mbed_official 76:aeb1df146756 566 synchrostatus = RTC->ISR & RTC_ISR_RSF;
mbed_official 76:aeb1df146756 567 synchrocounter++;
mbed_official 76:aeb1df146756 568 } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00));
mbed_official 76:aeb1df146756 569
mbed_official 76:aeb1df146756 570 if ((RTC->ISR & RTC_ISR_RSF) != RESET)
mbed_official 76:aeb1df146756 571 {
mbed_official 76:aeb1df146756 572 status = SUCCESS;
mbed_official 76:aeb1df146756 573 }
mbed_official 76:aeb1df146756 574 else
mbed_official 76:aeb1df146756 575 {
mbed_official 76:aeb1df146756 576 status = ERROR;
mbed_official 76:aeb1df146756 577 }
mbed_official 76:aeb1df146756 578
mbed_official 76:aeb1df146756 579 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 580 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 581 }
mbed_official 76:aeb1df146756 582
mbed_official 76:aeb1df146756 583 return (status);
mbed_official 76:aeb1df146756 584 }
mbed_official 76:aeb1df146756 585
mbed_official 76:aeb1df146756 586 /**
mbed_official 76:aeb1df146756 587 * @brief Enables or disables the RTC reference clock detection.
mbed_official 76:aeb1df146756 588 * @param NewState: new state of the RTC reference clock.
mbed_official 76:aeb1df146756 589 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 590 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 591 * - SUCCESS: RTC reference clock detection is enabled
mbed_official 76:aeb1df146756 592 * - ERROR: RTC reference clock detection is disabled
mbed_official 76:aeb1df146756 593 */
mbed_official 76:aeb1df146756 594 ErrorStatus RTC_RefClockCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 595 {
mbed_official 76:aeb1df146756 596 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 597
mbed_official 76:aeb1df146756 598 /* Check the parameters */
mbed_official 76:aeb1df146756 599 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 600
mbed_official 76:aeb1df146756 601 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 602 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 603 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 604
mbed_official 76:aeb1df146756 605 /* Set Initialization mode */
mbed_official 76:aeb1df146756 606 if (RTC_EnterInitMode() == ERROR)
mbed_official 76:aeb1df146756 607 {
mbed_official 76:aeb1df146756 608 status = ERROR;
mbed_official 76:aeb1df146756 609 }
mbed_official 76:aeb1df146756 610 else
mbed_official 76:aeb1df146756 611 {
mbed_official 76:aeb1df146756 612 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 613 {
mbed_official 76:aeb1df146756 614 /* Enable the RTC reference clock detection */
mbed_official 76:aeb1df146756 615 RTC->CR |= RTC_CR_REFCKON;
mbed_official 76:aeb1df146756 616 }
mbed_official 76:aeb1df146756 617 else
mbed_official 76:aeb1df146756 618 {
mbed_official 76:aeb1df146756 619 /* Disable the RTC reference clock detection */
mbed_official 76:aeb1df146756 620 RTC->CR &= ~RTC_CR_REFCKON;
mbed_official 76:aeb1df146756 621 }
mbed_official 76:aeb1df146756 622 /* Exit Initialization mode */
mbed_official 76:aeb1df146756 623 RTC_ExitInitMode();
mbed_official 76:aeb1df146756 624
mbed_official 76:aeb1df146756 625 status = SUCCESS;
mbed_official 76:aeb1df146756 626 }
mbed_official 76:aeb1df146756 627
mbed_official 76:aeb1df146756 628 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 629 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 630
mbed_official 76:aeb1df146756 631 return status;
mbed_official 76:aeb1df146756 632 }
mbed_official 76:aeb1df146756 633
mbed_official 76:aeb1df146756 634 /**
mbed_official 76:aeb1df146756 635 * @brief Enables or Disables the Bypass Shadow feature.
mbed_official 76:aeb1df146756 636 * @note When the Bypass Shadow is enabled the calendar value are taken
mbed_official 76:aeb1df146756 637 * directly from the Calendar counter.
mbed_official 76:aeb1df146756 638 * @param NewState: new state of the Bypass Shadow feature.
mbed_official 76:aeb1df146756 639 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 640 * @retval None
mbed_official 76:aeb1df146756 641 */
mbed_official 76:aeb1df146756 642 void RTC_BypassShadowCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 643 {
mbed_official 76:aeb1df146756 644 /* Check the parameters */
mbed_official 76:aeb1df146756 645 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 646
mbed_official 76:aeb1df146756 647 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 648 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 649 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 650
mbed_official 76:aeb1df146756 651 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 652 {
mbed_official 76:aeb1df146756 653 /* Set the BYPSHAD bit */
mbed_official 76:aeb1df146756 654 RTC->CR |= (uint8_t)RTC_CR_BYPSHAD;
mbed_official 76:aeb1df146756 655 }
mbed_official 76:aeb1df146756 656 else
mbed_official 76:aeb1df146756 657 {
mbed_official 76:aeb1df146756 658 /* Reset the BYPSHAD bit */
mbed_official 76:aeb1df146756 659 RTC->CR &= (uint8_t)~RTC_CR_BYPSHAD;
mbed_official 76:aeb1df146756 660 }
mbed_official 76:aeb1df146756 661
mbed_official 76:aeb1df146756 662 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 663 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 664 }
mbed_official 76:aeb1df146756 665
mbed_official 76:aeb1df146756 666 /**
mbed_official 76:aeb1df146756 667 * @}
mbed_official 76:aeb1df146756 668 */
mbed_official 76:aeb1df146756 669
mbed_official 76:aeb1df146756 670 /** @defgroup RTC_Group2 Time and Date configuration functions
mbed_official 76:aeb1df146756 671 * @brief Time and Date configuration functions
mbed_official 76:aeb1df146756 672 *
mbed_official 76:aeb1df146756 673 @verbatim
mbed_official 76:aeb1df146756 674 ===============================================================================
mbed_official 76:aeb1df146756 675 ##### Time and Date configuration functions #####
mbed_official 76:aeb1df146756 676 ===============================================================================
mbed_official 76:aeb1df146756 677 [..] This section provide functions allowing to program and read the RTC
mbed_official 76:aeb1df146756 678 Calendar (Time and Date).
mbed_official 76:aeb1df146756 679
mbed_official 76:aeb1df146756 680 @endverbatim
mbed_official 76:aeb1df146756 681 * @{
mbed_official 76:aeb1df146756 682 */
mbed_official 76:aeb1df146756 683
mbed_official 76:aeb1df146756 684 /**
mbed_official 76:aeb1df146756 685 * @brief Set the RTC current time.
mbed_official 76:aeb1df146756 686 * @param RTC_Format: specifies the format of the entered parameters.
mbed_official 76:aeb1df146756 687 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 688 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 689 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 690 * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that contains
mbed_official 76:aeb1df146756 691 * the time configuration information for the RTC.
mbed_official 76:aeb1df146756 692 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 693 * - SUCCESS: RTC Time register is configured
mbed_official 76:aeb1df146756 694 * - ERROR: RTC Time register is not configured
mbed_official 76:aeb1df146756 695 */
mbed_official 76:aeb1df146756 696 ErrorStatus RTC_SetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct)
mbed_official 76:aeb1df146756 697 {
mbed_official 76:aeb1df146756 698 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 699 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 700
mbed_official 76:aeb1df146756 701 /* Check the parameters */
mbed_official 76:aeb1df146756 702 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 703
mbed_official 76:aeb1df146756 704 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 705 {
mbed_official 76:aeb1df146756 706 if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
mbed_official 76:aeb1df146756 707 {
mbed_official 76:aeb1df146756 708 assert_param(IS_RTC_HOUR12(RTC_TimeStruct->RTC_Hours));
mbed_official 76:aeb1df146756 709 assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12));
mbed_official 76:aeb1df146756 710 }
mbed_official 76:aeb1df146756 711 else
mbed_official 76:aeb1df146756 712 {
mbed_official 76:aeb1df146756 713 RTC_TimeStruct->RTC_H12 = 0x00;
mbed_official 76:aeb1df146756 714 assert_param(IS_RTC_HOUR24(RTC_TimeStruct->RTC_Hours));
mbed_official 76:aeb1df146756 715 }
mbed_official 76:aeb1df146756 716 assert_param(IS_RTC_MINUTES(RTC_TimeStruct->RTC_Minutes));
mbed_official 76:aeb1df146756 717 assert_param(IS_RTC_SECONDS(RTC_TimeStruct->RTC_Seconds));
mbed_official 76:aeb1df146756 718 }
mbed_official 76:aeb1df146756 719 else
mbed_official 76:aeb1df146756 720 {
mbed_official 76:aeb1df146756 721 if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
mbed_official 76:aeb1df146756 722 {
mbed_official 76:aeb1df146756 723 tmpreg = RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours);
mbed_official 76:aeb1df146756 724 assert_param(IS_RTC_HOUR12(tmpreg));
mbed_official 76:aeb1df146756 725 assert_param(IS_RTC_H12(RTC_TimeStruct->RTC_H12));
mbed_official 76:aeb1df146756 726 }
mbed_official 76:aeb1df146756 727 else
mbed_official 76:aeb1df146756 728 {
mbed_official 76:aeb1df146756 729 RTC_TimeStruct->RTC_H12 = 0x00;
mbed_official 76:aeb1df146756 730 assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours)));
mbed_official 76:aeb1df146756 731 }
mbed_official 76:aeb1df146756 732 assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes)));
mbed_official 76:aeb1df146756 733 assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds)));
mbed_official 76:aeb1df146756 734 }
mbed_official 76:aeb1df146756 735
mbed_official 76:aeb1df146756 736 /* Check the input parameters format */
mbed_official 76:aeb1df146756 737 if (RTC_Format != RTC_Format_BIN)
mbed_official 76:aeb1df146756 738 {
mbed_official 76:aeb1df146756 739 tmpreg = (((uint32_t)(RTC_TimeStruct->RTC_Hours) << 16) | \
mbed_official 76:aeb1df146756 740 ((uint32_t)(RTC_TimeStruct->RTC_Minutes) << 8) | \
mbed_official 76:aeb1df146756 741 ((uint32_t)RTC_TimeStruct->RTC_Seconds) | \
mbed_official 76:aeb1df146756 742 ((uint32_t)(RTC_TimeStruct->RTC_H12) << 16));
mbed_official 76:aeb1df146756 743 }
mbed_official 76:aeb1df146756 744 else
mbed_official 76:aeb1df146756 745 {
mbed_official 76:aeb1df146756 746 tmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Hours) << 16) | \
mbed_official 76:aeb1df146756 747 ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Minutes) << 8) | \
mbed_official 76:aeb1df146756 748 ((uint32_t)RTC_ByteToBcd2(RTC_TimeStruct->RTC_Seconds)) | \
mbed_official 76:aeb1df146756 749 (((uint32_t)RTC_TimeStruct->RTC_H12) << 16));
mbed_official 76:aeb1df146756 750 }
mbed_official 76:aeb1df146756 751
mbed_official 76:aeb1df146756 752 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 753 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 754 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 755
mbed_official 76:aeb1df146756 756 /* Set Initialization mode */
mbed_official 76:aeb1df146756 757 if (RTC_EnterInitMode() == ERROR)
mbed_official 76:aeb1df146756 758 {
mbed_official 76:aeb1df146756 759 status = ERROR;
mbed_official 76:aeb1df146756 760 }
mbed_official 76:aeb1df146756 761 else
mbed_official 76:aeb1df146756 762 {
mbed_official 76:aeb1df146756 763 /* Set the RTC_TR register */
mbed_official 76:aeb1df146756 764 RTC->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
mbed_official 76:aeb1df146756 765
mbed_official 76:aeb1df146756 766 /* Exit Initialization mode */
mbed_official 76:aeb1df146756 767 RTC_ExitInitMode();
mbed_official 76:aeb1df146756 768
mbed_official 76:aeb1df146756 769 /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
mbed_official 76:aeb1df146756 770 if ((RTC->CR & RTC_CR_BYPSHAD) == RESET)
mbed_official 76:aeb1df146756 771 {
mbed_official 76:aeb1df146756 772 if (RTC_WaitForSynchro() == ERROR)
mbed_official 76:aeb1df146756 773 {
mbed_official 76:aeb1df146756 774 status = ERROR;
mbed_official 76:aeb1df146756 775 }
mbed_official 76:aeb1df146756 776 else
mbed_official 76:aeb1df146756 777 {
mbed_official 76:aeb1df146756 778 status = SUCCESS;
mbed_official 76:aeb1df146756 779 }
mbed_official 76:aeb1df146756 780 }
mbed_official 76:aeb1df146756 781 else
mbed_official 76:aeb1df146756 782 {
mbed_official 76:aeb1df146756 783 status = SUCCESS;
mbed_official 76:aeb1df146756 784 }
mbed_official 76:aeb1df146756 785
mbed_official 76:aeb1df146756 786 }
mbed_official 76:aeb1df146756 787 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 788 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 789
mbed_official 76:aeb1df146756 790 return status;
mbed_official 76:aeb1df146756 791 }
mbed_official 76:aeb1df146756 792
mbed_official 76:aeb1df146756 793 /**
mbed_official 76:aeb1df146756 794 * @brief Fills each RTC_TimeStruct member with its default value
mbed_official 76:aeb1df146756 795 * (Time = 00h:00min:00sec).
mbed_official 76:aeb1df146756 796 * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure which will be
mbed_official 76:aeb1df146756 797 * initialized.
mbed_official 76:aeb1df146756 798 * @retval None
mbed_official 76:aeb1df146756 799 */
mbed_official 76:aeb1df146756 800 void RTC_TimeStructInit(RTC_TimeTypeDef* RTC_TimeStruct)
mbed_official 76:aeb1df146756 801 {
mbed_official 76:aeb1df146756 802 /* Time = 00h:00min:00sec */
mbed_official 76:aeb1df146756 803 RTC_TimeStruct->RTC_H12 = RTC_H12_AM;
mbed_official 76:aeb1df146756 804 RTC_TimeStruct->RTC_Hours = 0;
mbed_official 76:aeb1df146756 805 RTC_TimeStruct->RTC_Minutes = 0;
mbed_official 76:aeb1df146756 806 RTC_TimeStruct->RTC_Seconds = 0;
mbed_official 76:aeb1df146756 807 }
mbed_official 76:aeb1df146756 808
mbed_official 76:aeb1df146756 809 /**
mbed_official 76:aeb1df146756 810 * @brief Get the RTC current Time.
mbed_official 76:aeb1df146756 811 * @param RTC_Format: specifies the format of the returned parameters.
mbed_official 76:aeb1df146756 812 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 813 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 814 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 815 * @param RTC_TimeStruct: pointer to a RTC_TimeTypeDef structure that will
mbed_official 76:aeb1df146756 816 * contain the returned current time configuration.
mbed_official 76:aeb1df146756 817 * @retval None
mbed_official 76:aeb1df146756 818 */
mbed_official 76:aeb1df146756 819 void RTC_GetTime(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_TimeStruct)
mbed_official 76:aeb1df146756 820 {
mbed_official 76:aeb1df146756 821 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 822
mbed_official 76:aeb1df146756 823 /* Check the parameters */
mbed_official 76:aeb1df146756 824 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 825
mbed_official 76:aeb1df146756 826 /* Get the RTC_TR register */
mbed_official 76:aeb1df146756 827 tmpreg = (uint32_t)(RTC->TR & RTC_TR_RESERVED_MASK);
mbed_official 76:aeb1df146756 828
mbed_official 76:aeb1df146756 829 /* Fill the structure fields with the read parameters */
mbed_official 76:aeb1df146756 830 RTC_TimeStruct->RTC_Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
mbed_official 76:aeb1df146756 831 RTC_TimeStruct->RTC_Minutes = (uint8_t)((tmpreg & (RTC_TR_MNT | RTC_TR_MNU)) >>8);
mbed_official 76:aeb1df146756 832 RTC_TimeStruct->RTC_Seconds = (uint8_t)(tmpreg & (RTC_TR_ST | RTC_TR_SU));
mbed_official 76:aeb1df146756 833 RTC_TimeStruct->RTC_H12 = (uint8_t)((tmpreg & (RTC_TR_PM)) >> 16);
mbed_official 76:aeb1df146756 834
mbed_official 76:aeb1df146756 835 /* Check the input parameters format */
mbed_official 76:aeb1df146756 836 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 837 {
mbed_official 76:aeb1df146756 838 /* Convert the structure parameters to Binary format */
mbed_official 76:aeb1df146756 839 RTC_TimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Hours);
mbed_official 76:aeb1df146756 840 RTC_TimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Minutes);
mbed_official 76:aeb1df146756 841 RTC_TimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_TimeStruct->RTC_Seconds);
mbed_official 76:aeb1df146756 842 }
mbed_official 76:aeb1df146756 843 }
mbed_official 76:aeb1df146756 844
mbed_official 76:aeb1df146756 845 /**
mbed_official 76:aeb1df146756 846 * @brief Gets the RTC current Calendar Subseconds value.
mbed_official 76:aeb1df146756 847 * @note This function freeze the Time and Date registers after reading the
mbed_official 76:aeb1df146756 848 * SSR register.
mbed_official 76:aeb1df146756 849 * @param None
mbed_official 76:aeb1df146756 850 * @retval RTC current Calendar Subseconds value.
mbed_official 76:aeb1df146756 851 */
mbed_official 76:aeb1df146756 852 uint32_t RTC_GetSubSecond(void)
mbed_official 76:aeb1df146756 853 {
mbed_official 76:aeb1df146756 854 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 855
mbed_official 76:aeb1df146756 856 /* Get subseconds values from the correspondent registers*/
mbed_official 76:aeb1df146756 857 tmpreg = (uint32_t)(RTC->SSR);
mbed_official 76:aeb1df146756 858
mbed_official 76:aeb1df146756 859 /* Read DR register to unfroze calendar registers */
mbed_official 76:aeb1df146756 860 (void) (RTC->DR);
mbed_official 76:aeb1df146756 861
mbed_official 76:aeb1df146756 862 return (tmpreg);
mbed_official 76:aeb1df146756 863 }
mbed_official 76:aeb1df146756 864
mbed_official 76:aeb1df146756 865 /**
mbed_official 76:aeb1df146756 866 * @brief Set the RTC current date.
mbed_official 76:aeb1df146756 867 * @param RTC_Format: specifies the format of the entered parameters.
mbed_official 76:aeb1df146756 868 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 869 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 870 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 871 * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that contains
mbed_official 76:aeb1df146756 872 * the date configuration information for the RTC.
mbed_official 76:aeb1df146756 873 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 874 * - SUCCESS: RTC Date register is configured
mbed_official 76:aeb1df146756 875 * - ERROR: RTC Date register is not configured
mbed_official 76:aeb1df146756 876 */
mbed_official 76:aeb1df146756 877 ErrorStatus RTC_SetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct)
mbed_official 76:aeb1df146756 878 {
mbed_official 76:aeb1df146756 879 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 880 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 881
mbed_official 76:aeb1df146756 882 /* Check the parameters */
mbed_official 76:aeb1df146756 883 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 884
mbed_official 76:aeb1df146756 885 if ((RTC_Format == RTC_Format_BIN) && ((RTC_DateStruct->RTC_Month & 0x10) == 0x10))
mbed_official 76:aeb1df146756 886 {
mbed_official 76:aeb1df146756 887 RTC_DateStruct->RTC_Month = (RTC_DateStruct->RTC_Month & (uint32_t)~(0x10)) + 0x0A;
mbed_official 76:aeb1df146756 888 }
mbed_official 76:aeb1df146756 889 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 890 {
mbed_official 76:aeb1df146756 891 assert_param(IS_RTC_YEAR(RTC_DateStruct->RTC_Year));
mbed_official 76:aeb1df146756 892 assert_param(IS_RTC_MONTH(RTC_DateStruct->RTC_Month));
mbed_official 76:aeb1df146756 893 assert_param(IS_RTC_DATE(RTC_DateStruct->RTC_Date));
mbed_official 76:aeb1df146756 894 }
mbed_official 76:aeb1df146756 895 else
mbed_official 76:aeb1df146756 896 {
mbed_official 76:aeb1df146756 897 assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year)));
mbed_official 76:aeb1df146756 898 tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month);
mbed_official 76:aeb1df146756 899 assert_param(IS_RTC_MONTH(tmpreg));
mbed_official 76:aeb1df146756 900 tmpreg = RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date);
mbed_official 76:aeb1df146756 901 assert_param(IS_RTC_DATE(tmpreg));
mbed_official 76:aeb1df146756 902 }
mbed_official 76:aeb1df146756 903 assert_param(IS_RTC_WEEKDAY(RTC_DateStruct->RTC_WeekDay));
mbed_official 76:aeb1df146756 904
mbed_official 76:aeb1df146756 905 /* Check the input parameters format */
mbed_official 76:aeb1df146756 906 if (RTC_Format != RTC_Format_BIN)
mbed_official 76:aeb1df146756 907 {
mbed_official 76:aeb1df146756 908 tmpreg = ((((uint32_t)RTC_DateStruct->RTC_Year) << 16) | \
mbed_official 76:aeb1df146756 909 (((uint32_t)RTC_DateStruct->RTC_Month) << 8) | \
mbed_official 76:aeb1df146756 910 ((uint32_t)RTC_DateStruct->RTC_Date) | \
mbed_official 76:aeb1df146756 911 (((uint32_t)RTC_DateStruct->RTC_WeekDay) << 13));
mbed_official 76:aeb1df146756 912 }
mbed_official 76:aeb1df146756 913 else
mbed_official 76:aeb1df146756 914 {
mbed_official 76:aeb1df146756 915 tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Year) << 16) | \
mbed_official 76:aeb1df146756 916 ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Month) << 8) | \
mbed_official 76:aeb1df146756 917 ((uint32_t)RTC_ByteToBcd2(RTC_DateStruct->RTC_Date)) | \
mbed_official 76:aeb1df146756 918 ((uint32_t)RTC_DateStruct->RTC_WeekDay << 13));
mbed_official 76:aeb1df146756 919 }
mbed_official 76:aeb1df146756 920
mbed_official 76:aeb1df146756 921 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 922 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 923 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 924
mbed_official 76:aeb1df146756 925 /* Set Initialization mode */
mbed_official 76:aeb1df146756 926 if (RTC_EnterInitMode() == ERROR)
mbed_official 76:aeb1df146756 927 {
mbed_official 76:aeb1df146756 928 status = ERROR;
mbed_official 76:aeb1df146756 929 }
mbed_official 76:aeb1df146756 930 else
mbed_official 76:aeb1df146756 931 {
mbed_official 76:aeb1df146756 932 /* Set the RTC_DR register */
mbed_official 76:aeb1df146756 933 RTC->DR = (uint32_t)(tmpreg & RTC_DR_RESERVED_MASK);
mbed_official 76:aeb1df146756 934
mbed_official 76:aeb1df146756 935 /* Exit Initialization mode */
mbed_official 76:aeb1df146756 936 RTC_ExitInitMode();
mbed_official 76:aeb1df146756 937
mbed_official 76:aeb1df146756 938 /* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
mbed_official 76:aeb1df146756 939 if ((RTC->CR & RTC_CR_BYPSHAD) == RESET)
mbed_official 76:aeb1df146756 940 {
mbed_official 76:aeb1df146756 941 if (RTC_WaitForSynchro() == ERROR)
mbed_official 76:aeb1df146756 942 {
mbed_official 76:aeb1df146756 943 status = ERROR;
mbed_official 76:aeb1df146756 944 }
mbed_official 76:aeb1df146756 945 else
mbed_official 76:aeb1df146756 946 {
mbed_official 76:aeb1df146756 947 status = SUCCESS;
mbed_official 76:aeb1df146756 948 }
mbed_official 76:aeb1df146756 949 }
mbed_official 76:aeb1df146756 950 else
mbed_official 76:aeb1df146756 951 {
mbed_official 76:aeb1df146756 952 status = SUCCESS;
mbed_official 76:aeb1df146756 953 }
mbed_official 76:aeb1df146756 954 }
mbed_official 76:aeb1df146756 955 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 956 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 957
mbed_official 76:aeb1df146756 958 return status;
mbed_official 76:aeb1df146756 959 }
mbed_official 76:aeb1df146756 960
mbed_official 76:aeb1df146756 961 /**
mbed_official 76:aeb1df146756 962 * @brief Fills each RTC_DateStruct member with its default value
mbed_official 76:aeb1df146756 963 * (Monday, January 01 xx00).
mbed_official 76:aeb1df146756 964 * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure which will be
mbed_official 76:aeb1df146756 965 * initialized.
mbed_official 76:aeb1df146756 966 * @retval None
mbed_official 76:aeb1df146756 967 */
mbed_official 76:aeb1df146756 968 void RTC_DateStructInit(RTC_DateTypeDef* RTC_DateStruct)
mbed_official 76:aeb1df146756 969 {
mbed_official 76:aeb1df146756 970 /* Monday, January 01 xx00 */
mbed_official 76:aeb1df146756 971 RTC_DateStruct->RTC_WeekDay = RTC_Weekday_Monday;
mbed_official 76:aeb1df146756 972 RTC_DateStruct->RTC_Date = 1;
mbed_official 76:aeb1df146756 973 RTC_DateStruct->RTC_Month = RTC_Month_January;
mbed_official 76:aeb1df146756 974 RTC_DateStruct->RTC_Year = 0;
mbed_official 76:aeb1df146756 975 }
mbed_official 76:aeb1df146756 976
mbed_official 76:aeb1df146756 977 /**
mbed_official 76:aeb1df146756 978 * @brief Get the RTC current date.
mbed_official 76:aeb1df146756 979 * @param RTC_Format: specifies the format of the returned parameters.
mbed_official 76:aeb1df146756 980 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 981 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 982 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 983 * @param RTC_DateStruct: pointer to a RTC_DateTypeDef structure that will
mbed_official 76:aeb1df146756 984 * contain the returned current date configuration.
mbed_official 76:aeb1df146756 985 * @retval None
mbed_official 76:aeb1df146756 986 */
mbed_official 76:aeb1df146756 987 void RTC_GetDate(uint32_t RTC_Format, RTC_DateTypeDef* RTC_DateStruct)
mbed_official 76:aeb1df146756 988 {
mbed_official 76:aeb1df146756 989 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 990
mbed_official 76:aeb1df146756 991 /* Check the parameters */
mbed_official 76:aeb1df146756 992 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 993
mbed_official 76:aeb1df146756 994 /* Get the RTC_TR register */
mbed_official 76:aeb1df146756 995 tmpreg = (uint32_t)(RTC->DR & RTC_DR_RESERVED_MASK);
mbed_official 76:aeb1df146756 996
mbed_official 76:aeb1df146756 997 /* Fill the structure fields with the read parameters */
mbed_official 76:aeb1df146756 998 RTC_DateStruct->RTC_Year = (uint8_t)((tmpreg & (RTC_DR_YT | RTC_DR_YU)) >> 16);
mbed_official 76:aeb1df146756 999 RTC_DateStruct->RTC_Month = (uint8_t)((tmpreg & (RTC_DR_MT | RTC_DR_MU)) >> 8);
mbed_official 76:aeb1df146756 1000 RTC_DateStruct->RTC_Date = (uint8_t)(tmpreg & (RTC_DR_DT | RTC_DR_DU));
mbed_official 76:aeb1df146756 1001 RTC_DateStruct->RTC_WeekDay = (uint8_t)((tmpreg & (RTC_DR_WDU)) >> 13);
mbed_official 76:aeb1df146756 1002
mbed_official 76:aeb1df146756 1003 /* Check the input parameters format */
mbed_official 76:aeb1df146756 1004 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 1005 {
mbed_official 76:aeb1df146756 1006 /* Convert the structure parameters to Binary format */
mbed_official 76:aeb1df146756 1007 RTC_DateStruct->RTC_Year = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Year);
mbed_official 76:aeb1df146756 1008 RTC_DateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Month);
mbed_official 76:aeb1df146756 1009 RTC_DateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_DateStruct->RTC_Date);
mbed_official 76:aeb1df146756 1010 RTC_DateStruct->RTC_WeekDay = (uint8_t)(RTC_DateStruct->RTC_WeekDay);
mbed_official 76:aeb1df146756 1011 }
mbed_official 76:aeb1df146756 1012 }
mbed_official 76:aeb1df146756 1013
mbed_official 76:aeb1df146756 1014 /**
mbed_official 76:aeb1df146756 1015 * @}
mbed_official 76:aeb1df146756 1016 */
mbed_official 76:aeb1df146756 1017
mbed_official 76:aeb1df146756 1018 /** @defgroup RTC_Group3 Alarms configuration functions
mbed_official 76:aeb1df146756 1019 * @brief Alarms (Alarm A) configuration functions
mbed_official 76:aeb1df146756 1020 *
mbed_official 76:aeb1df146756 1021 @verbatim
mbed_official 76:aeb1df146756 1022 ===============================================================================
mbed_official 76:aeb1df146756 1023 ##### Alarms (Alarm A and Alarm B) configuration functions #####
mbed_official 76:aeb1df146756 1024 ===============================================================================
mbed_official 76:aeb1df146756 1025 [..] This section provide functions allowing to program and read the RTC
mbed_official 76:aeb1df146756 1026 Alarms.
mbed_official 76:aeb1df146756 1027
mbed_official 76:aeb1df146756 1028 @endverbatim
mbed_official 76:aeb1df146756 1029 * @{
mbed_official 76:aeb1df146756 1030 */
mbed_official 76:aeb1df146756 1031
mbed_official 76:aeb1df146756 1032 /**
mbed_official 76:aeb1df146756 1033 * @brief Set the specified RTC Alarm.
mbed_official 76:aeb1df146756 1034 * @note The Alarm register can only be written when the corresponding Alarm
mbed_official 76:aeb1df146756 1035 * is disabled (Use the RTC_AlarmCmd(DISABLE)).
mbed_official 76:aeb1df146756 1036 * @param RTC_Format: specifies the format of the returned parameters.
mbed_official 76:aeb1df146756 1037 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1038 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 1039 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 1040 * @param RTC_Alarm: specifies the alarm to be configured.
mbed_official 76:aeb1df146756 1041 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1042 * @arg RTC_Alarm_A: to select Alarm A
mbed_official 76:aeb1df146756 1043 * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that
mbed_official 76:aeb1df146756 1044 * contains the alarm configuration parameters.
mbed_official 76:aeb1df146756 1045 * @retval None
mbed_official 76:aeb1df146756 1046 */
mbed_official 76:aeb1df146756 1047 void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct)
mbed_official 76:aeb1df146756 1048 {
mbed_official 76:aeb1df146756 1049 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 1050
mbed_official 76:aeb1df146756 1051 /* Check the parameters */
mbed_official 76:aeb1df146756 1052 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 1053 assert_param(IS_RTC_ALARM(RTC_Alarm));
mbed_official 76:aeb1df146756 1054 assert_param(IS_RTC_ALARM_MASK(RTC_AlarmStruct->RTC_AlarmMask));
mbed_official 76:aeb1df146756 1055 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_SEL(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel));
mbed_official 76:aeb1df146756 1056
mbed_official 76:aeb1df146756 1057 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 1058 {
mbed_official 76:aeb1df146756 1059 if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
mbed_official 76:aeb1df146756 1060 {
mbed_official 76:aeb1df146756 1061 assert_param(IS_RTC_HOUR12(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours));
mbed_official 76:aeb1df146756 1062 assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12));
mbed_official 76:aeb1df146756 1063 }
mbed_official 76:aeb1df146756 1064 else
mbed_official 76:aeb1df146756 1065 {
mbed_official 76:aeb1df146756 1066 RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00;
mbed_official 76:aeb1df146756 1067 assert_param(IS_RTC_HOUR24(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours));
mbed_official 76:aeb1df146756 1068 }
mbed_official 76:aeb1df146756 1069 assert_param(IS_RTC_MINUTES(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes));
mbed_official 76:aeb1df146756 1070 assert_param(IS_RTC_SECONDS(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds));
mbed_official 76:aeb1df146756 1071
mbed_official 76:aeb1df146756 1072 if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date)
mbed_official 76:aeb1df146756 1073 {
mbed_official 76:aeb1df146756 1074 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(RTC_AlarmStruct->RTC_AlarmDateWeekDay));
mbed_official 76:aeb1df146756 1075 }
mbed_official 76:aeb1df146756 1076 else
mbed_official 76:aeb1df146756 1077 {
mbed_official 76:aeb1df146756 1078 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(RTC_AlarmStruct->RTC_AlarmDateWeekDay));
mbed_official 76:aeb1df146756 1079 }
mbed_official 76:aeb1df146756 1080 }
mbed_official 76:aeb1df146756 1081 else
mbed_official 76:aeb1df146756 1082 {
mbed_official 76:aeb1df146756 1083 if ((RTC->CR & RTC_CR_FMT) != (uint32_t)RESET)
mbed_official 76:aeb1df146756 1084 {
mbed_official 76:aeb1df146756 1085 tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours);
mbed_official 76:aeb1df146756 1086 assert_param(IS_RTC_HOUR12(tmpreg));
mbed_official 76:aeb1df146756 1087 assert_param(IS_RTC_H12(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12));
mbed_official 76:aeb1df146756 1088 }
mbed_official 76:aeb1df146756 1089 else
mbed_official 76:aeb1df146756 1090 {
mbed_official 76:aeb1df146756 1091 RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = 0x00;
mbed_official 76:aeb1df146756 1092 assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours)));
mbed_official 76:aeb1df146756 1093 }
mbed_official 76:aeb1df146756 1094
mbed_official 76:aeb1df146756 1095 assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes)));
mbed_official 76:aeb1df146756 1096 assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)));
mbed_official 76:aeb1df146756 1097
mbed_official 76:aeb1df146756 1098 if(RTC_AlarmStruct->RTC_AlarmDateWeekDaySel == RTC_AlarmDateWeekDaySel_Date)
mbed_official 76:aeb1df146756 1099 {
mbed_official 76:aeb1df146756 1100 tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay);
mbed_official 76:aeb1df146756 1101 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_DATE(tmpreg));
mbed_official 76:aeb1df146756 1102 }
mbed_official 76:aeb1df146756 1103 else
mbed_official 76:aeb1df146756 1104 {
mbed_official 76:aeb1df146756 1105 tmpreg = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay);
mbed_official 76:aeb1df146756 1106 assert_param(IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(tmpreg));
mbed_official 76:aeb1df146756 1107 }
mbed_official 76:aeb1df146756 1108 }
mbed_official 76:aeb1df146756 1109
mbed_official 76:aeb1df146756 1110 /* Check the input parameters format */
mbed_official 76:aeb1df146756 1111 if (RTC_Format != RTC_Format_BIN)
mbed_official 76:aeb1df146756 1112 {
mbed_official 76:aeb1df146756 1113 tmpreg = (((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \
mbed_official 76:aeb1df146756 1114 ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \
mbed_official 76:aeb1df146756 1115 ((uint32_t)RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds) | \
mbed_official 76:aeb1df146756 1116 ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \
mbed_official 76:aeb1df146756 1117 ((uint32_t)(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \
mbed_official 76:aeb1df146756 1118 ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \
mbed_official 76:aeb1df146756 1119 ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask));
mbed_official 76:aeb1df146756 1120 }
mbed_official 76:aeb1df146756 1121 else
mbed_official 76:aeb1df146756 1122 {
mbed_official 76:aeb1df146756 1123 tmpreg = (((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours) << 16) | \
mbed_official 76:aeb1df146756 1124 ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes) << 8) | \
mbed_official 76:aeb1df146756 1125 ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds)) | \
mbed_official 76:aeb1df146756 1126 ((uint32_t)(RTC_AlarmStruct->RTC_AlarmTime.RTC_H12) << 16) | \
mbed_official 76:aeb1df146756 1127 ((uint32_t)RTC_ByteToBcd2(RTC_AlarmStruct->RTC_AlarmDateWeekDay) << 24) | \
mbed_official 76:aeb1df146756 1128 ((uint32_t)RTC_AlarmStruct->RTC_AlarmDateWeekDaySel) | \
mbed_official 76:aeb1df146756 1129 ((uint32_t)RTC_AlarmStruct->RTC_AlarmMask));
mbed_official 76:aeb1df146756 1130 }
mbed_official 76:aeb1df146756 1131
mbed_official 76:aeb1df146756 1132 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1133 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1134 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1135
mbed_official 76:aeb1df146756 1136 /* Configure the Alarm register */
mbed_official 76:aeb1df146756 1137 RTC->ALRMAR = (uint32_t)tmpreg;
mbed_official 76:aeb1df146756 1138
mbed_official 76:aeb1df146756 1139 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1140 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1141 }
mbed_official 76:aeb1df146756 1142
mbed_official 76:aeb1df146756 1143 /**
mbed_official 76:aeb1df146756 1144 * @brief Fills each RTC_AlarmStruct member with its default value
mbed_official 76:aeb1df146756 1145 * (Time = 00h:00mn:00sec / Date = 1st day of the month/Mask =
mbed_official 76:aeb1df146756 1146 * all fields are masked).
mbed_official 76:aeb1df146756 1147 * @param RTC_AlarmStruct: pointer to a @ref RTC_AlarmTypeDef structure which
mbed_official 76:aeb1df146756 1148 * will be initialized.
mbed_official 76:aeb1df146756 1149 * @retval None
mbed_official 76:aeb1df146756 1150 */
mbed_official 76:aeb1df146756 1151 void RTC_AlarmStructInit(RTC_AlarmTypeDef* RTC_AlarmStruct)
mbed_official 76:aeb1df146756 1152 {
mbed_official 76:aeb1df146756 1153 /* Alarm Time Settings : Time = 00h:00mn:00sec */
mbed_official 76:aeb1df146756 1154 RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
mbed_official 76:aeb1df146756 1155 RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = 0;
mbed_official 76:aeb1df146756 1156 RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = 0;
mbed_official 76:aeb1df146756 1157 RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = 0;
mbed_official 76:aeb1df146756 1158
mbed_official 76:aeb1df146756 1159 /* Alarm Date Settings : Date = 1st day of the month */
mbed_official 76:aeb1df146756 1160 RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
mbed_official 76:aeb1df146756 1161 RTC_AlarmStruct->RTC_AlarmDateWeekDay = 1;
mbed_official 76:aeb1df146756 1162
mbed_official 76:aeb1df146756 1163 /* Alarm Masks Settings : Mask = all fields are not masked */
mbed_official 76:aeb1df146756 1164 RTC_AlarmStruct->RTC_AlarmMask = RTC_AlarmMask_None;
mbed_official 76:aeb1df146756 1165 }
mbed_official 76:aeb1df146756 1166
mbed_official 76:aeb1df146756 1167 /**
mbed_official 76:aeb1df146756 1168 * @brief Get the RTC Alarm value and masks.
mbed_official 76:aeb1df146756 1169 * @param RTC_Format: specifies the format of the output parameters.
mbed_official 76:aeb1df146756 1170 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1171 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 1172 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 1173 * @param RTC_Alarm: specifies the alarm to be read.
mbed_official 76:aeb1df146756 1174 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1175 * @arg RTC_Alarm_A: to select Alarm A
mbed_official 76:aeb1df146756 1176 * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that will
mbed_official 76:aeb1df146756 1177 * contains the output alarm configuration values.
mbed_official 76:aeb1df146756 1178 * @retval None
mbed_official 76:aeb1df146756 1179 */
mbed_official 76:aeb1df146756 1180 void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef* RTC_AlarmStruct)
mbed_official 76:aeb1df146756 1181 {
mbed_official 76:aeb1df146756 1182 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 1183
mbed_official 76:aeb1df146756 1184 /* Check the parameters */
mbed_official 76:aeb1df146756 1185 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 1186 assert_param(IS_RTC_ALARM(RTC_Alarm));
mbed_official 76:aeb1df146756 1187
mbed_official 76:aeb1df146756 1188 /* Get the RTC_ALRMAR register */
mbed_official 76:aeb1df146756 1189 tmpreg = (uint32_t)(RTC->ALRMAR);
mbed_official 76:aeb1df146756 1190
mbed_official 76:aeb1df146756 1191 /* Fill the structure with the read parameters */
mbed_official 76:aeb1df146756 1192 RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = (uint32_t)((tmpreg & (RTC_ALRMAR_HT | \
mbed_official 76:aeb1df146756 1193 RTC_ALRMAR_HU)) >> 16);
mbed_official 76:aeb1df146756 1194 RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = (uint32_t)((tmpreg & (RTC_ALRMAR_MNT | \
mbed_official 76:aeb1df146756 1195 RTC_ALRMAR_MNU)) >> 8);
mbed_official 76:aeb1df146756 1196 RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = (uint32_t)(tmpreg & (RTC_ALRMAR_ST | \
mbed_official 76:aeb1df146756 1197 RTC_ALRMAR_SU));
mbed_official 76:aeb1df146756 1198 RTC_AlarmStruct->RTC_AlarmTime.RTC_H12 = (uint32_t)((tmpreg & RTC_ALRMAR_PM) >> 16);
mbed_official 76:aeb1df146756 1199 RTC_AlarmStruct->RTC_AlarmDateWeekDay = (uint32_t)((tmpreg & (RTC_ALRMAR_DT | RTC_ALRMAR_DU)) >> 24);
mbed_official 76:aeb1df146756 1200 RTC_AlarmStruct->RTC_AlarmDateWeekDaySel = (uint32_t)(tmpreg & RTC_ALRMAR_WDSEL);
mbed_official 76:aeb1df146756 1201 RTC_AlarmStruct->RTC_AlarmMask = (uint32_t)(tmpreg & RTC_AlarmMask_All);
mbed_official 76:aeb1df146756 1202
mbed_official 76:aeb1df146756 1203 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 1204 {
mbed_official 76:aeb1df146756 1205 RTC_AlarmStruct->RTC_AlarmTime.RTC_Hours = RTC_Bcd2ToByte(RTC_AlarmStruct-> \
mbed_official 76:aeb1df146756 1206 RTC_AlarmTime.RTC_Hours);
mbed_official 76:aeb1df146756 1207 RTC_AlarmStruct->RTC_AlarmTime.RTC_Minutes = RTC_Bcd2ToByte(RTC_AlarmStruct-> \
mbed_official 76:aeb1df146756 1208 RTC_AlarmTime.RTC_Minutes);
mbed_official 76:aeb1df146756 1209 RTC_AlarmStruct->RTC_AlarmTime.RTC_Seconds = RTC_Bcd2ToByte(RTC_AlarmStruct-> \
mbed_official 76:aeb1df146756 1210 RTC_AlarmTime.RTC_Seconds);
mbed_official 76:aeb1df146756 1211 RTC_AlarmStruct->RTC_AlarmDateWeekDay = RTC_Bcd2ToByte(RTC_AlarmStruct->RTC_AlarmDateWeekDay);
mbed_official 76:aeb1df146756 1212 }
mbed_official 76:aeb1df146756 1213 }
mbed_official 76:aeb1df146756 1214
mbed_official 76:aeb1df146756 1215 /**
mbed_official 76:aeb1df146756 1216 * @brief Enables or disables the specified RTC Alarm.
mbed_official 76:aeb1df146756 1217 * @param RTC_Alarm: specifies the alarm to be configured.
mbed_official 76:aeb1df146756 1218 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 1219 * @arg RTC_Alarm_A: to select Alarm A
mbed_official 76:aeb1df146756 1220 * @param NewState: new state of the specified alarm.
mbed_official 76:aeb1df146756 1221 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1222 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 1223 * - SUCCESS: RTC Alarm is enabled/disabled
mbed_official 76:aeb1df146756 1224 * - ERROR: RTC Alarm is not enabled/disabled
mbed_official 76:aeb1df146756 1225 */
mbed_official 76:aeb1df146756 1226 ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm, FunctionalState NewState)
mbed_official 76:aeb1df146756 1227 {
mbed_official 76:aeb1df146756 1228 __IO uint32_t alarmcounter = 0x00;
mbed_official 76:aeb1df146756 1229 uint32_t alarmstatus = 0x00;
mbed_official 76:aeb1df146756 1230 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 1231
mbed_official 76:aeb1df146756 1232 /* Check the parameters */
mbed_official 76:aeb1df146756 1233 assert_param(IS_RTC_CMD_ALARM(RTC_Alarm));
mbed_official 76:aeb1df146756 1234 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1235
mbed_official 76:aeb1df146756 1236 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1237 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1238 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1239
mbed_official 76:aeb1df146756 1240 /* Configure the Alarm state */
mbed_official 76:aeb1df146756 1241 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1242 {
mbed_official 76:aeb1df146756 1243 RTC->CR |= (uint32_t)RTC_Alarm;
mbed_official 76:aeb1df146756 1244
mbed_official 76:aeb1df146756 1245 status = SUCCESS;
mbed_official 76:aeb1df146756 1246 }
mbed_official 76:aeb1df146756 1247 else
mbed_official 76:aeb1df146756 1248 {
mbed_official 76:aeb1df146756 1249 /* Disable the Alarm in RTC_CR register */
mbed_official 76:aeb1df146756 1250 RTC->CR &= (uint32_t)~RTC_Alarm;
mbed_official 76:aeb1df146756 1251
mbed_official 76:aeb1df146756 1252 /* Wait till RTC ALRxWF flag is set and if Time out is reached exit */
mbed_official 76:aeb1df146756 1253 do
mbed_official 76:aeb1df146756 1254 {
mbed_official 76:aeb1df146756 1255 alarmstatus = RTC->ISR & (RTC_Alarm >> 8);
mbed_official 76:aeb1df146756 1256 alarmcounter++;
mbed_official 76:aeb1df146756 1257 } while((alarmcounter != INITMODE_TIMEOUT) && (alarmstatus == 0x00));
mbed_official 76:aeb1df146756 1258
mbed_official 76:aeb1df146756 1259 if ((RTC->ISR & (RTC_Alarm >> 8)) == RESET)
mbed_official 76:aeb1df146756 1260 {
mbed_official 76:aeb1df146756 1261 status = ERROR;
mbed_official 76:aeb1df146756 1262 }
mbed_official 76:aeb1df146756 1263 else
mbed_official 76:aeb1df146756 1264 {
mbed_official 76:aeb1df146756 1265 status = SUCCESS;
mbed_official 76:aeb1df146756 1266 }
mbed_official 76:aeb1df146756 1267 }
mbed_official 76:aeb1df146756 1268
mbed_official 76:aeb1df146756 1269 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1270 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1271
mbed_official 76:aeb1df146756 1272 return status;
mbed_official 76:aeb1df146756 1273 }
mbed_official 76:aeb1df146756 1274
mbed_official 76:aeb1df146756 1275 /**
mbed_official 76:aeb1df146756 1276 * @brief Configure the RTC AlarmA/B Subseconds value and mask.
mbed_official 76:aeb1df146756 1277 * @note This function is performed only when the Alarm is disabled.
mbed_official 76:aeb1df146756 1278 * @param RTC_Alarm: specifies the alarm to be configured.
mbed_official 76:aeb1df146756 1279 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1280 * @arg RTC_Alarm_A: to select Alarm A
mbed_official 76:aeb1df146756 1281 * @param RTC_AlarmSubSecondValue: specifies the Subseconds value.
mbed_official 76:aeb1df146756 1282 * This parameter can be a value from 0 to 0x00007FFF.
mbed_official 76:aeb1df146756 1283 * @param RTC_AlarmSubSecondMask: specifies the Subseconds Mask.
mbed_official 76:aeb1df146756 1284 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 1285 * @arg RTC_AlarmSubSecondMask_All: All Alarm SS fields are masked.
mbed_official 76:aeb1df146756 1286 * There is no comparison on sub seconds for Alarm.
mbed_official 76:aeb1df146756 1287 * @arg RTC_AlarmSubSecondMask_SS14_1: SS[14:1] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1288 * Only SS[0] is compared
mbed_official 76:aeb1df146756 1289 * @arg RTC_AlarmSubSecondMask_SS14_2: SS[14:2] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1290 * Only SS[1:0] are compared
mbed_official 76:aeb1df146756 1291 * @arg RTC_AlarmSubSecondMask_SS14_3: SS[14:3] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1292 * Only SS[2:0] are compared
mbed_official 76:aeb1df146756 1293 * @arg RTC_AlarmSubSecondMask_SS14_4: SS[14:4] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1294 * Only SS[3:0] are compared
mbed_official 76:aeb1df146756 1295 * @arg RTC_AlarmSubSecondMask_SS14_5: SS[14:5] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1296 * Only SS[4:0] are compared
mbed_official 76:aeb1df146756 1297 * @arg RTC_AlarmSubSecondMask_SS14_6: SS[14:6] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1298 * Only SS[5:0] are compared
mbed_official 76:aeb1df146756 1299 * @arg RTC_AlarmSubSecondMask_SS14_7: SS[14:7] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1300 * Only SS[6:0] are compared
mbed_official 76:aeb1df146756 1301 * @arg RTC_AlarmSubSecondMask_SS14_8: SS[14:8] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1302 * Only SS[7:0] are compared
mbed_official 76:aeb1df146756 1303 * @arg RTC_AlarmSubSecondMask_SS14_9: SS[14:9] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1304 * Only SS[8:0] are compared
mbed_official 76:aeb1df146756 1305 * @arg RTC_AlarmSubSecondMask_SS14_10: SS[14:10] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1306 * Only SS[9:0] are compared
mbed_official 76:aeb1df146756 1307 * @arg RTC_AlarmSubSecondMask_SS14_11: SS[14:11] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1308 * Only SS[10:0] are compared
mbed_official 76:aeb1df146756 1309 * @arg RTC_AlarmSubSecondMask_SS14_12: SS[14:12] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1310 * Only SS[11:0] are compared
mbed_official 76:aeb1df146756 1311 * @arg RTC_AlarmSubSecondMask_SS14_13: SS[14:13] are don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1312 * Only SS[12:0] are compared
mbed_official 76:aeb1df146756 1313 * @arg RTC_AlarmSubSecondMask_SS14: SS[14] is don't care in Alarm comparison.
mbed_official 76:aeb1df146756 1314 * Only SS[13:0] are compared
mbed_official 76:aeb1df146756 1315 * @arg RTC_AlarmSubSecondMask_None: SS[14:0] are compared and must match to activate alarm
mbed_official 76:aeb1df146756 1316 * @retval None
mbed_official 76:aeb1df146756 1317 */
mbed_official 76:aeb1df146756 1318 void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm, uint32_t RTC_AlarmSubSecondValue, uint8_t RTC_AlarmSubSecondMask)
mbed_official 76:aeb1df146756 1319 {
mbed_official 76:aeb1df146756 1320 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 1321
mbed_official 76:aeb1df146756 1322 /* Check the parameters */
mbed_official 76:aeb1df146756 1323 assert_param(IS_RTC_ALARM(RTC_Alarm));
mbed_official 76:aeb1df146756 1324 assert_param(IS_RTC_ALARM_SUB_SECOND_VALUE(RTC_AlarmSubSecondValue));
mbed_official 76:aeb1df146756 1325 assert_param(IS_RTC_ALARM_SUB_SECOND_MASK(RTC_AlarmSubSecondMask));
mbed_official 76:aeb1df146756 1326
mbed_official 76:aeb1df146756 1327 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1328 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1329 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1330
mbed_official 76:aeb1df146756 1331 /* Configure the Alarm A or Alarm B SubSecond registers */
mbed_official 76:aeb1df146756 1332 tmpreg = (uint32_t) (((uint32_t)(RTC_AlarmSubSecondValue)) | ((uint32_t)(RTC_AlarmSubSecondMask) << 24));
mbed_official 76:aeb1df146756 1333
mbed_official 76:aeb1df146756 1334 /* Configure the AlarmA SubSecond register */
mbed_official 76:aeb1df146756 1335 RTC->ALRMASSR = tmpreg;
mbed_official 76:aeb1df146756 1336
mbed_official 76:aeb1df146756 1337 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1338 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1339
mbed_official 76:aeb1df146756 1340 }
mbed_official 76:aeb1df146756 1341
mbed_official 76:aeb1df146756 1342 /**
mbed_official 76:aeb1df146756 1343 * @brief Gets the RTC Alarm Subseconds value.
mbed_official 76:aeb1df146756 1344 * @param RTC_Alarm: specifies the alarm to be read.
mbed_official 76:aeb1df146756 1345 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1346 * @arg RTC_Alarm_A: to select Alarm A
mbed_official 76:aeb1df146756 1347 * @param None
mbed_official 76:aeb1df146756 1348 * @retval RTC Alarm Subseconds value.
mbed_official 76:aeb1df146756 1349 */
mbed_official 76:aeb1df146756 1350 uint32_t RTC_GetAlarmSubSecond(uint32_t RTC_Alarm)
mbed_official 76:aeb1df146756 1351 {
mbed_official 76:aeb1df146756 1352 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 1353
mbed_official 76:aeb1df146756 1354 /* Get the RTC_ALRMAR register */
mbed_official 76:aeb1df146756 1355 tmpreg = (uint32_t)((RTC->ALRMASSR) & RTC_ALRMASSR_SS);
mbed_official 76:aeb1df146756 1356
mbed_official 76:aeb1df146756 1357 return (tmpreg);
mbed_official 76:aeb1df146756 1358 }
mbed_official 76:aeb1df146756 1359
mbed_official 76:aeb1df146756 1360 /**
mbed_official 76:aeb1df146756 1361 * @}
mbed_official 76:aeb1df146756 1362 */
mbed_official 76:aeb1df146756 1363
mbed_official 76:aeb1df146756 1364 /** @defgroup RTC_Group4 WakeUp Timer configuration functions
mbed_official 76:aeb1df146756 1365 * @brief WakeUp Timer configuration functions
mbed_official 76:aeb1df146756 1366 *
mbed_official 76:aeb1df146756 1367 @verbatim
mbed_official 76:aeb1df146756 1368 ===============================================================================
mbed_official 76:aeb1df146756 1369 ##### WakeUp Timer configuration functions #####
mbed_official 76:aeb1df146756 1370 ===============================================================================
mbed_official 76:aeb1df146756 1371
mbed_official 76:aeb1df146756 1372 [..] This section provide functions allowing to program and read the RTC WakeUp.
mbed_official 76:aeb1df146756 1373
mbed_official 76:aeb1df146756 1374 @endverbatim
mbed_official 76:aeb1df146756 1375 * @{
mbed_official 76:aeb1df146756 1376 */
mbed_official 76:aeb1df146756 1377
mbed_official 76:aeb1df146756 1378 /**
mbed_official 76:aeb1df146756 1379 * @brief Configures the RTC Wakeup clock source.
mbed_official 76:aeb1df146756 1380 * This function is available for STM32F072 devices.
mbed_official 76:aeb1df146756 1381 * @note The WakeUp Clock source can only be changed when the RTC WakeUp
mbed_official 76:aeb1df146756 1382 * is disabled (Use the RTC_WakeUpCmd(DISABLE)).
mbed_official 76:aeb1df146756 1383 * @param RTC_WakeUpClock: Wakeup Clock source.
mbed_official 76:aeb1df146756 1384 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1385 * @arg RTC_WakeUpClock_RTCCLK_Div16
mbed_official 76:aeb1df146756 1386 * @arg RTC_WakeUpClock_RTCCLK_Div8
mbed_official 76:aeb1df146756 1387 * @arg RTC_WakeUpClock_RTCCLK_Div4
mbed_official 76:aeb1df146756 1388 * @arg RTC_WakeUpClock_RTCCLK_Div2
mbed_official 76:aeb1df146756 1389 * @arg RTC_WakeUpClock_CK_SPRE_16bits
mbed_official 76:aeb1df146756 1390 * @arg RTC_WakeUpClock_CK_SPRE_17bits
mbed_official 76:aeb1df146756 1391 * @retval None
mbed_official 76:aeb1df146756 1392 */
mbed_official 76:aeb1df146756 1393 void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock)
mbed_official 76:aeb1df146756 1394 {
mbed_official 76:aeb1df146756 1395 /* Check the parameters */
mbed_official 76:aeb1df146756 1396 assert_param(IS_RTC_WAKEUP_CLOCK(RTC_WakeUpClock));
mbed_official 76:aeb1df146756 1397
mbed_official 76:aeb1df146756 1398 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1399 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1400 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1401
mbed_official 76:aeb1df146756 1402 /* Clear the Wakeup Timer clock source bits in CR register */
mbed_official 76:aeb1df146756 1403 RTC->CR &= (uint32_t)~RTC_CR_WUCKSEL;
mbed_official 76:aeb1df146756 1404
mbed_official 76:aeb1df146756 1405 /* Configure the clock source */
mbed_official 76:aeb1df146756 1406 RTC->CR |= (uint32_t)RTC_WakeUpClock;
mbed_official 76:aeb1df146756 1407
mbed_official 76:aeb1df146756 1408 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1409 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1410 }
mbed_official 76:aeb1df146756 1411
mbed_official 76:aeb1df146756 1412 /**
mbed_official 76:aeb1df146756 1413 * @brief Configures the RTC Wakeup counter.
mbed_official 76:aeb1df146756 1414 * This function is available for STM32F072 devices.
mbed_official 76:aeb1df146756 1415 * @note The RTC WakeUp counter can only be written when the RTC WakeUp
mbed_official 76:aeb1df146756 1416 * is disabled (Use the RTC_WakeUpCmd(DISABLE)).
mbed_official 76:aeb1df146756 1417 * @param RTC_WakeUpCounter: specifies the WakeUp counter.
mbed_official 76:aeb1df146756 1418 * This parameter can be a value from 0x0000 to 0xFFFF.
mbed_official 76:aeb1df146756 1419 * @retval None
mbed_official 76:aeb1df146756 1420 */
mbed_official 76:aeb1df146756 1421 void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter)
mbed_official 76:aeb1df146756 1422 {
mbed_official 76:aeb1df146756 1423 /* Check the parameters */
mbed_official 76:aeb1df146756 1424 assert_param(IS_RTC_WAKEUP_COUNTER(RTC_WakeUpCounter));
mbed_official 76:aeb1df146756 1425
mbed_official 76:aeb1df146756 1426 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1427 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1428 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1429
mbed_official 76:aeb1df146756 1430 /* Configure the Wakeup Timer counter */
mbed_official 76:aeb1df146756 1431 RTC->WUTR = (uint32_t)RTC_WakeUpCounter;
mbed_official 76:aeb1df146756 1432
mbed_official 76:aeb1df146756 1433 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1434 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1435 }
mbed_official 76:aeb1df146756 1436
mbed_official 76:aeb1df146756 1437 /**
mbed_official 76:aeb1df146756 1438 * @brief Returns the RTC WakeUp timer counter value.
mbed_official 76:aeb1df146756 1439 * This function is available for STM32F072 devices.
mbed_official 76:aeb1df146756 1440 * @param None
mbed_official 76:aeb1df146756 1441 * @retval The RTC WakeUp Counter value.
mbed_official 76:aeb1df146756 1442 */
mbed_official 76:aeb1df146756 1443 uint32_t RTC_GetWakeUpCounter(void)
mbed_official 76:aeb1df146756 1444 {
mbed_official 76:aeb1df146756 1445 /* Get the counter value */
mbed_official 76:aeb1df146756 1446 return ((uint32_t)(RTC->WUTR & RTC_WUTR_WUT));
mbed_official 76:aeb1df146756 1447 }
mbed_official 76:aeb1df146756 1448
mbed_official 76:aeb1df146756 1449 /**
mbed_official 76:aeb1df146756 1450 * @brief Enables or Disables the RTC WakeUp timer.
mbed_official 76:aeb1df146756 1451 * This function is available for STM32F072 devices.
mbed_official 76:aeb1df146756 1452 * @param NewState: new state of the WakeUp timer.
mbed_official 76:aeb1df146756 1453 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1454 * @retval None
mbed_official 76:aeb1df146756 1455 */
mbed_official 76:aeb1df146756 1456 ErrorStatus RTC_WakeUpCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 1457 {
mbed_official 76:aeb1df146756 1458 __IO uint32_t wutcounter = 0x00;
mbed_official 76:aeb1df146756 1459 uint32_t wutwfstatus = 0x00;
mbed_official 76:aeb1df146756 1460 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 1461
mbed_official 76:aeb1df146756 1462 /* Check the parameters */
mbed_official 76:aeb1df146756 1463 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1464
mbed_official 76:aeb1df146756 1465 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1466 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1467 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1468
mbed_official 76:aeb1df146756 1469 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1470 {
mbed_official 76:aeb1df146756 1471 /* Enable the Wakeup Timer */
mbed_official 76:aeb1df146756 1472 RTC->CR |= (uint32_t)RTC_CR_WUTE;
mbed_official 76:aeb1df146756 1473 status = SUCCESS;
mbed_official 76:aeb1df146756 1474 }
mbed_official 76:aeb1df146756 1475 else
mbed_official 76:aeb1df146756 1476 {
mbed_official 76:aeb1df146756 1477 /* Disable the Wakeup Timer */
mbed_official 76:aeb1df146756 1478 RTC->CR &= (uint32_t)~RTC_CR_WUTE;
mbed_official 76:aeb1df146756 1479 /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
mbed_official 76:aeb1df146756 1480 do
mbed_official 76:aeb1df146756 1481 {
mbed_official 76:aeb1df146756 1482 wutwfstatus = RTC->ISR & RTC_ISR_WUTWF;
mbed_official 76:aeb1df146756 1483 wutcounter++;
mbed_official 76:aeb1df146756 1484 } while((wutcounter != INITMODE_TIMEOUT) && (wutwfstatus == 0x00));
mbed_official 76:aeb1df146756 1485
mbed_official 76:aeb1df146756 1486 if ((RTC->ISR & RTC_ISR_WUTWF) == RESET)
mbed_official 76:aeb1df146756 1487 {
mbed_official 76:aeb1df146756 1488 status = ERROR;
mbed_official 76:aeb1df146756 1489 }
mbed_official 76:aeb1df146756 1490 else
mbed_official 76:aeb1df146756 1491 {
mbed_official 76:aeb1df146756 1492 status = SUCCESS;
mbed_official 76:aeb1df146756 1493 }
mbed_official 76:aeb1df146756 1494 }
mbed_official 76:aeb1df146756 1495
mbed_official 76:aeb1df146756 1496 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1497 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1498
mbed_official 76:aeb1df146756 1499 return status;
mbed_official 76:aeb1df146756 1500 }
mbed_official 76:aeb1df146756 1501
mbed_official 76:aeb1df146756 1502 /**
mbed_official 76:aeb1df146756 1503 * @}
mbed_official 76:aeb1df146756 1504 */
mbed_official 76:aeb1df146756 1505
mbed_official 76:aeb1df146756 1506 /** @defgroup RTC_Group5 Daylight Saving configuration functions
mbed_official 76:aeb1df146756 1507 * @brief Daylight Saving configuration functions
mbed_official 76:aeb1df146756 1508 *
mbed_official 76:aeb1df146756 1509 @verbatim
mbed_official 76:aeb1df146756 1510 ===============================================================================
mbed_official 76:aeb1df146756 1511 ##### WakeUp Timer configuration functions #####
mbed_official 76:aeb1df146756 1512 ===============================================================================
mbed_official 76:aeb1df146756 1513 [..] This section provide functions allowing to program and read the RTC WakeUp.
mbed_official 76:aeb1df146756 1514
mbed_official 76:aeb1df146756 1515 This section provide functions allowing to configure the RTC DayLight Saving.
mbed_official 76:aeb1df146756 1516
mbed_official 76:aeb1df146756 1517 @endverbatim
mbed_official 76:aeb1df146756 1518 * @{
mbed_official 76:aeb1df146756 1519 */
mbed_official 76:aeb1df146756 1520
mbed_official 76:aeb1df146756 1521 /**
mbed_official 76:aeb1df146756 1522 * @brief Adds or substract one hour from the current time.
mbed_official 76:aeb1df146756 1523 * @param RTC_DayLightSaveOperation: the value of hour adjustment.
mbed_official 76:aeb1df146756 1524 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1525 * @arg RTC_DayLightSaving_SUB1H: Substract one hour (winter time)
mbed_official 76:aeb1df146756 1526 * @arg RTC_DayLightSaving_ADD1H: Add one hour (summer time)
mbed_official 76:aeb1df146756 1527 * @param RTC_StoreOperation: Specifies the value to be written in the BCK bit
mbed_official 76:aeb1df146756 1528 * in CR register to store the operation.
mbed_official 76:aeb1df146756 1529 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1530 * @arg RTC_StoreOperation_Reset: BCK Bit Reset
mbed_official 76:aeb1df146756 1531 * @arg RTC_StoreOperation_Set: BCK Bit Set
mbed_official 76:aeb1df146756 1532 * @retval None
mbed_official 76:aeb1df146756 1533 */
mbed_official 76:aeb1df146756 1534 void RTC_DayLightSavingConfig(uint32_t RTC_DayLightSaving, uint32_t RTC_StoreOperation)
mbed_official 76:aeb1df146756 1535 {
mbed_official 76:aeb1df146756 1536 /* Check the parameters */
mbed_official 76:aeb1df146756 1537 assert_param(IS_RTC_DAYLIGHT_SAVING(RTC_DayLightSaving));
mbed_official 76:aeb1df146756 1538 assert_param(IS_RTC_STORE_OPERATION(RTC_StoreOperation));
mbed_official 76:aeb1df146756 1539
mbed_official 76:aeb1df146756 1540 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1541 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1542 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1543
mbed_official 76:aeb1df146756 1544 /* Clear the bits to be configured */
mbed_official 76:aeb1df146756 1545 RTC->CR &= (uint32_t)~(RTC_CR_BCK);
mbed_official 76:aeb1df146756 1546
mbed_official 76:aeb1df146756 1547 /* Configure the RTC_CR register */
mbed_official 76:aeb1df146756 1548 RTC->CR |= (uint32_t)(RTC_DayLightSaving | RTC_StoreOperation);
mbed_official 76:aeb1df146756 1549
mbed_official 76:aeb1df146756 1550 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1551 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1552 }
mbed_official 76:aeb1df146756 1553
mbed_official 76:aeb1df146756 1554 /**
mbed_official 76:aeb1df146756 1555 * @brief Returns the RTC Day Light Saving stored operation.
mbed_official 76:aeb1df146756 1556 * @param None
mbed_official 76:aeb1df146756 1557 * @retval RTC Day Light Saving stored operation.
mbed_official 76:aeb1df146756 1558 * - RTC_StoreOperation_Reset
mbed_official 76:aeb1df146756 1559 * - RTC_StoreOperation_Set
mbed_official 76:aeb1df146756 1560 */
mbed_official 76:aeb1df146756 1561 uint32_t RTC_GetStoreOperation(void)
mbed_official 76:aeb1df146756 1562 {
mbed_official 76:aeb1df146756 1563 return (RTC->CR & RTC_CR_BCK);
mbed_official 76:aeb1df146756 1564 }
mbed_official 76:aeb1df146756 1565
mbed_official 76:aeb1df146756 1566 /**
mbed_official 76:aeb1df146756 1567 * @}
mbed_official 76:aeb1df146756 1568 */
mbed_official 76:aeb1df146756 1569
mbed_official 76:aeb1df146756 1570 /** @defgroup RTC_Group6 Output pin Configuration function
mbed_official 76:aeb1df146756 1571 * @brief Output pin Configuration function
mbed_official 76:aeb1df146756 1572 *
mbed_official 76:aeb1df146756 1573 @verbatim
mbed_official 76:aeb1df146756 1574 ===============================================================================
mbed_official 76:aeb1df146756 1575 ##### Output pin Configuration function #####
mbed_official 76:aeb1df146756 1576 ===============================================================================
mbed_official 76:aeb1df146756 1577 [..] This section provide functions allowing to configure the RTC Output source.
mbed_official 76:aeb1df146756 1578
mbed_official 76:aeb1df146756 1579 @endverbatim
mbed_official 76:aeb1df146756 1580 * @{
mbed_official 76:aeb1df146756 1581 */
mbed_official 76:aeb1df146756 1582
mbed_official 76:aeb1df146756 1583 /**
mbed_official 76:aeb1df146756 1584 * @brief Configures the RTC output source (AFO_ALARM).
mbed_official 76:aeb1df146756 1585 * @param RTC_Output: Specifies which signal will be routed to the RTC output.
mbed_official 76:aeb1df146756 1586 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1587 * @arg RTC_Output_Disable: No output selected
mbed_official 76:aeb1df146756 1588 * @arg RTC_Output_AlarmA: signal of AlarmA mapped to output
mbed_official 76:aeb1df146756 1589 * @arg RTC_Output_WakeUp: signal of WakeUp mapped to output, available only for STM32F072 devices
mbed_official 76:aeb1df146756 1590 * @param RTC_OutputPolarity: Specifies the polarity of the output signal.
mbed_official 76:aeb1df146756 1591 * This parameter can be one of the following:
mbed_official 76:aeb1df146756 1592 * @arg RTC_OutputPolarity_High: The output pin is high when the
mbed_official 76:aeb1df146756 1593 * ALRAF is high (depending on OSEL)
mbed_official 76:aeb1df146756 1594 * @arg RTC_OutputPolarity_Low: The output pin is low when the
mbed_official 76:aeb1df146756 1595 * ALRAF is high (depending on OSEL)
mbed_official 76:aeb1df146756 1596 * @retval None
mbed_official 76:aeb1df146756 1597 */
mbed_official 76:aeb1df146756 1598 void RTC_OutputConfig(uint32_t RTC_Output, uint32_t RTC_OutputPolarity)
mbed_official 76:aeb1df146756 1599 {
mbed_official 76:aeb1df146756 1600 /* Check the parameters */
mbed_official 76:aeb1df146756 1601 assert_param(IS_RTC_OUTPUT(RTC_Output));
mbed_official 76:aeb1df146756 1602 assert_param(IS_RTC_OUTPUT_POL(RTC_OutputPolarity));
mbed_official 76:aeb1df146756 1603
mbed_official 76:aeb1df146756 1604 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1605 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1606 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1607
mbed_official 76:aeb1df146756 1608 /* Clear the bits to be configured */
mbed_official 76:aeb1df146756 1609 RTC->CR &= (uint32_t)~(RTC_CR_OSEL | RTC_CR_POL);
mbed_official 76:aeb1df146756 1610
mbed_official 76:aeb1df146756 1611 /* Configure the output selection and polarity */
mbed_official 76:aeb1df146756 1612 RTC->CR |= (uint32_t)(RTC_Output | RTC_OutputPolarity);
mbed_official 76:aeb1df146756 1613
mbed_official 76:aeb1df146756 1614 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1615 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1616 }
mbed_official 76:aeb1df146756 1617
mbed_official 76:aeb1df146756 1618 /**
mbed_official 76:aeb1df146756 1619 * @}
mbed_official 76:aeb1df146756 1620 */
mbed_official 76:aeb1df146756 1621
mbed_official 76:aeb1df146756 1622 /** @defgroup RTC_Group7 Digital Calibration configuration functions
mbed_official 76:aeb1df146756 1623 * @brief Digital Calibration configuration functions
mbed_official 76:aeb1df146756 1624 *
mbed_official 76:aeb1df146756 1625 @verbatim
mbed_official 76:aeb1df146756 1626 ===============================================================================
mbed_official 76:aeb1df146756 1627 ##### Digital Calibration configuration functions #####
mbed_official 76:aeb1df146756 1628 ===============================================================================
mbed_official 76:aeb1df146756 1629
mbed_official 76:aeb1df146756 1630 @endverbatim
mbed_official 76:aeb1df146756 1631 * @{
mbed_official 76:aeb1df146756 1632 */
mbed_official 76:aeb1df146756 1633
mbed_official 76:aeb1df146756 1634 /**
mbed_official 76:aeb1df146756 1635 * @brief Enables or disables the RTC clock to be output through the relative pin.
mbed_official 76:aeb1df146756 1636 * @param NewState: new state of the digital calibration Output.
mbed_official 76:aeb1df146756 1637 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1638 * @retval None
mbed_official 76:aeb1df146756 1639 */
mbed_official 76:aeb1df146756 1640 void RTC_CalibOutputCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 1641 {
mbed_official 76:aeb1df146756 1642 /* Check the parameters */
mbed_official 76:aeb1df146756 1643 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1644
mbed_official 76:aeb1df146756 1645 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1646 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1647 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1648
mbed_official 76:aeb1df146756 1649 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1650 {
mbed_official 76:aeb1df146756 1651 /* Enable the RTC clock output */
mbed_official 76:aeb1df146756 1652 RTC->CR |= (uint32_t)RTC_CR_COE;
mbed_official 76:aeb1df146756 1653 }
mbed_official 76:aeb1df146756 1654 else
mbed_official 76:aeb1df146756 1655 {
mbed_official 76:aeb1df146756 1656 /* Disable the RTC clock output */
mbed_official 76:aeb1df146756 1657 RTC->CR &= (uint32_t)~RTC_CR_COE;
mbed_official 76:aeb1df146756 1658 }
mbed_official 76:aeb1df146756 1659
mbed_official 76:aeb1df146756 1660 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1661 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1662 }
mbed_official 76:aeb1df146756 1663
mbed_official 76:aeb1df146756 1664 /**
mbed_official 76:aeb1df146756 1665 * @brief Configure the Calibration Pinout (RTC_CALIB) Selection (1Hz or 512Hz).
mbed_official 76:aeb1df146756 1666 * @param RTC_CalibOutput: Select the Calibration output Selection .
mbed_official 76:aeb1df146756 1667 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1668 * @arg RTC_CalibOutput_512Hz: A signal has a regular waveform at 512Hz.
mbed_official 76:aeb1df146756 1669 * @arg RTC_CalibOutput_1Hz: A signal has a regular waveform at 1Hz.
mbed_official 76:aeb1df146756 1670 * @retval None
mbed_official 76:aeb1df146756 1671 */
mbed_official 76:aeb1df146756 1672 void RTC_CalibOutputConfig(uint32_t RTC_CalibOutput)
mbed_official 76:aeb1df146756 1673 {
mbed_official 76:aeb1df146756 1674 /* Check the parameters */
mbed_official 76:aeb1df146756 1675 assert_param(IS_RTC_CALIB_OUTPUT(RTC_CalibOutput));
mbed_official 76:aeb1df146756 1676
mbed_official 76:aeb1df146756 1677 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1678 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1679 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1680
mbed_official 76:aeb1df146756 1681 /*clear flags before config*/
mbed_official 76:aeb1df146756 1682 RTC->CR &= (uint32_t)~(RTC_CR_CALSEL);
mbed_official 76:aeb1df146756 1683
mbed_official 76:aeb1df146756 1684 /* Configure the RTC_CR register */
mbed_official 76:aeb1df146756 1685 RTC->CR |= (uint32_t)RTC_CalibOutput;
mbed_official 76:aeb1df146756 1686
mbed_official 76:aeb1df146756 1687 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1688 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1689 }
mbed_official 76:aeb1df146756 1690
mbed_official 76:aeb1df146756 1691 /**
mbed_official 76:aeb1df146756 1692 * @brief Configures the Smooth Calibration Settings.
mbed_official 76:aeb1df146756 1693 * @param RTC_SmoothCalibPeriod: Select the Smooth Calibration Period.
mbed_official 76:aeb1df146756 1694 * This parameter can be can be one of the following values:
mbed_official 76:aeb1df146756 1695 * @arg RTC_SmoothCalibPeriod_32sec: The smooth calibration periode is 32s.
mbed_official 76:aeb1df146756 1696 * @arg RTC_SmoothCalibPeriod_16sec: The smooth calibration periode is 16s.
mbed_official 76:aeb1df146756 1697 * @arg RTC_SmoothCalibPeriod_8sec: The smooth calibartion periode is 8s.
mbed_official 76:aeb1df146756 1698 * @param RTC_SmoothCalibPlusPulses: Select to Set or reset the CALP bit.
mbed_official 76:aeb1df146756 1699 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1700 * @arg RTC_SmoothCalibPlusPulses_Set: Add one RTCCLK puls every 2**11 pulses.
mbed_official 76:aeb1df146756 1701 * @arg RTC_SmoothCalibPlusPulses_Reset: No RTCCLK pulses are added.
mbed_official 76:aeb1df146756 1702 * @param RTC_SmouthCalibMinusPulsesValue: Select the value of CALM[8:0] bits.
mbed_official 76:aeb1df146756 1703 * This parameter can be one any value from 0 to 0x000001FF.
mbed_official 76:aeb1df146756 1704 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 1705 * - SUCCESS: RTC Calib registers are configured
mbed_official 76:aeb1df146756 1706 * - ERROR: RTC Calib registers are not configured
mbed_official 76:aeb1df146756 1707 */
mbed_official 76:aeb1df146756 1708 ErrorStatus RTC_SmoothCalibConfig(uint32_t RTC_SmoothCalibPeriod,
mbed_official 76:aeb1df146756 1709 uint32_t RTC_SmoothCalibPlusPulses,
mbed_official 76:aeb1df146756 1710 uint32_t RTC_SmouthCalibMinusPulsesValue)
mbed_official 76:aeb1df146756 1711 {
mbed_official 76:aeb1df146756 1712 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 1713 uint32_t recalpfcount = 0;
mbed_official 76:aeb1df146756 1714
mbed_official 76:aeb1df146756 1715 /* Check the parameters */
mbed_official 76:aeb1df146756 1716 assert_param(IS_RTC_SMOOTH_CALIB_PERIOD(RTC_SmoothCalibPeriod));
mbed_official 76:aeb1df146756 1717 assert_param(IS_RTC_SMOOTH_CALIB_PLUS(RTC_SmoothCalibPlusPulses));
mbed_official 76:aeb1df146756 1718 assert_param(IS_RTC_SMOOTH_CALIB_MINUS(RTC_SmouthCalibMinusPulsesValue));
mbed_official 76:aeb1df146756 1719
mbed_official 76:aeb1df146756 1720 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1721 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1722 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1723
mbed_official 76:aeb1df146756 1724 /* check if a calibration is pending*/
mbed_official 76:aeb1df146756 1725 if ((RTC->ISR & RTC_ISR_RECALPF) != RESET)
mbed_official 76:aeb1df146756 1726 {
mbed_official 76:aeb1df146756 1727 /* wait until the Calibration is completed*/
mbed_official 76:aeb1df146756 1728 while (((RTC->ISR & RTC_ISR_RECALPF) != RESET) && (recalpfcount != RECALPF_TIMEOUT))
mbed_official 76:aeb1df146756 1729 {
mbed_official 76:aeb1df146756 1730 recalpfcount++;
mbed_official 76:aeb1df146756 1731 }
mbed_official 76:aeb1df146756 1732 }
mbed_official 76:aeb1df146756 1733
mbed_official 76:aeb1df146756 1734 /* check if the calibration pending is completed or if there is no calibration operation at all*/
mbed_official 76:aeb1df146756 1735 if ((RTC->ISR & RTC_ISR_RECALPF) == RESET)
mbed_official 76:aeb1df146756 1736 {
mbed_official 76:aeb1df146756 1737 /* Configure the Smooth calibration settings */
mbed_official 76:aeb1df146756 1738 RTC->CALR = (uint32_t)((uint32_t)RTC_SmoothCalibPeriod | (uint32_t)RTC_SmoothCalibPlusPulses | (uint32_t)RTC_SmouthCalibMinusPulsesValue);
mbed_official 76:aeb1df146756 1739
mbed_official 76:aeb1df146756 1740 status = SUCCESS;
mbed_official 76:aeb1df146756 1741 }
mbed_official 76:aeb1df146756 1742 else
mbed_official 76:aeb1df146756 1743 {
mbed_official 76:aeb1df146756 1744 status = ERROR;
mbed_official 76:aeb1df146756 1745 }
mbed_official 76:aeb1df146756 1746
mbed_official 76:aeb1df146756 1747 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1748 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1749
mbed_official 76:aeb1df146756 1750 return (ErrorStatus)(status);
mbed_official 76:aeb1df146756 1751 }
mbed_official 76:aeb1df146756 1752
mbed_official 76:aeb1df146756 1753 /**
mbed_official 76:aeb1df146756 1754 * @}
mbed_official 76:aeb1df146756 1755 */
mbed_official 76:aeb1df146756 1756
mbed_official 76:aeb1df146756 1757
mbed_official 76:aeb1df146756 1758 /** @defgroup RTC_Group8 TimeStamp configuration functions
mbed_official 76:aeb1df146756 1759 * @brief TimeStamp configuration functions
mbed_official 76:aeb1df146756 1760 *
mbed_official 76:aeb1df146756 1761 @verbatim
mbed_official 76:aeb1df146756 1762 ===============================================================================
mbed_official 76:aeb1df146756 1763 ##### TimeStamp configuration functions #####
mbed_official 76:aeb1df146756 1764 ===============================================================================
mbed_official 76:aeb1df146756 1765
mbed_official 76:aeb1df146756 1766 @endverbatim
mbed_official 76:aeb1df146756 1767 * @{
mbed_official 76:aeb1df146756 1768 */
mbed_official 76:aeb1df146756 1769
mbed_official 76:aeb1df146756 1770 /**
mbed_official 76:aeb1df146756 1771 * @brief Enables or Disables the RTC TimeStamp functionality with the
mbed_official 76:aeb1df146756 1772 * specified time stamp pin stimulating edge.
mbed_official 76:aeb1df146756 1773 * @param RTC_TimeStampEdge: Specifies the pin edge on which the TimeStamp is
mbed_official 76:aeb1df146756 1774 * activated.
mbed_official 76:aeb1df146756 1775 * This parameter can be one of the following:
mbed_official 76:aeb1df146756 1776 * @arg RTC_TimeStampEdge_Rising: the Time stamp event occurs on the rising
mbed_official 76:aeb1df146756 1777 * edge of the related pin.
mbed_official 76:aeb1df146756 1778 * @arg RTC_TimeStampEdge_Falling: the Time stamp event occurs on the
mbed_official 76:aeb1df146756 1779 * falling edge of the related pin.
mbed_official 76:aeb1df146756 1780 * @param NewState: new state of the TimeStamp.
mbed_official 76:aeb1df146756 1781 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1782 * @retval None
mbed_official 76:aeb1df146756 1783 */
mbed_official 76:aeb1df146756 1784 void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge, FunctionalState NewState)
mbed_official 76:aeb1df146756 1785 {
mbed_official 76:aeb1df146756 1786 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 1787
mbed_official 76:aeb1df146756 1788 /* Check the parameters */
mbed_official 76:aeb1df146756 1789 assert_param(IS_RTC_TIMESTAMP_EDGE(RTC_TimeStampEdge));
mbed_official 76:aeb1df146756 1790 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1791
mbed_official 76:aeb1df146756 1792 /* Get the RTC_CR register and clear the bits to be configured */
mbed_official 76:aeb1df146756 1793 tmpreg = (uint32_t)(RTC->CR & (uint32_t)~(RTC_CR_TSEDGE | RTC_CR_TSE));
mbed_official 76:aeb1df146756 1794
mbed_official 76:aeb1df146756 1795 /* Get the new configuration */
mbed_official 76:aeb1df146756 1796 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1797 {
mbed_official 76:aeb1df146756 1798 tmpreg |= (uint32_t)(RTC_TimeStampEdge | RTC_CR_TSE);
mbed_official 76:aeb1df146756 1799 }
mbed_official 76:aeb1df146756 1800 else
mbed_official 76:aeb1df146756 1801 {
mbed_official 76:aeb1df146756 1802 tmpreg |= (uint32_t)(RTC_TimeStampEdge);
mbed_official 76:aeb1df146756 1803 }
mbed_official 76:aeb1df146756 1804
mbed_official 76:aeb1df146756 1805 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1806 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 1807 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 1808
mbed_official 76:aeb1df146756 1809 /* Configure the Time Stamp TSEDGE and Enable bits */
mbed_official 76:aeb1df146756 1810 RTC->CR = (uint32_t)tmpreg;
mbed_official 76:aeb1df146756 1811
mbed_official 76:aeb1df146756 1812 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 1813 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 1814 }
mbed_official 76:aeb1df146756 1815
mbed_official 76:aeb1df146756 1816 /**
mbed_official 76:aeb1df146756 1817 * @brief Get the RTC TimeStamp value and masks.
mbed_official 76:aeb1df146756 1818 * @param RTC_Format: specifies the format of the output parameters.
mbed_official 76:aeb1df146756 1819 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1820 * @arg RTC_Format_BIN: Binary data format
mbed_official 76:aeb1df146756 1821 * @arg RTC_Format_BCD: BCD data format
mbed_official 76:aeb1df146756 1822 * @param RTC_StampTimeStruct: pointer to a RTC_TimeTypeDef structure that will
mbed_official 76:aeb1df146756 1823 * contains the TimeStamp time values.
mbed_official 76:aeb1df146756 1824 * @param RTC_StampDateStruct: pointer to a RTC_DateTypeDef structure that will
mbed_official 76:aeb1df146756 1825 * contains the TimeStamp date values.
mbed_official 76:aeb1df146756 1826 * @retval None
mbed_official 76:aeb1df146756 1827 */
mbed_official 76:aeb1df146756 1828 void RTC_GetTimeStamp(uint32_t RTC_Format, RTC_TimeTypeDef* RTC_StampTimeStruct,
mbed_official 76:aeb1df146756 1829 RTC_DateTypeDef* RTC_StampDateStruct)
mbed_official 76:aeb1df146756 1830 {
mbed_official 76:aeb1df146756 1831 uint32_t tmptime = 0, tmpdate = 0;
mbed_official 76:aeb1df146756 1832
mbed_official 76:aeb1df146756 1833 /* Check the parameters */
mbed_official 76:aeb1df146756 1834 assert_param(IS_RTC_FORMAT(RTC_Format));
mbed_official 76:aeb1df146756 1835
mbed_official 76:aeb1df146756 1836 /* Get the TimeStamp time and date registers values */
mbed_official 76:aeb1df146756 1837 tmptime = (uint32_t)(RTC->TSTR & RTC_TR_RESERVED_MASK);
mbed_official 76:aeb1df146756 1838 tmpdate = (uint32_t)(RTC->TSDR & RTC_DR_RESERVED_MASK);
mbed_official 76:aeb1df146756 1839
mbed_official 76:aeb1df146756 1840 /* Fill the Time structure fields with the read parameters */
mbed_official 76:aeb1df146756 1841 RTC_StampTimeStruct->RTC_Hours = (uint8_t)((tmptime & (RTC_TR_HT | RTC_TR_HU)) >> 16);
mbed_official 76:aeb1df146756 1842 RTC_StampTimeStruct->RTC_Minutes = (uint8_t)((tmptime & (RTC_TR_MNT | RTC_TR_MNU)) >> 8);
mbed_official 76:aeb1df146756 1843 RTC_StampTimeStruct->RTC_Seconds = (uint8_t)(tmptime & (RTC_TR_ST | RTC_TR_SU));
mbed_official 76:aeb1df146756 1844 RTC_StampTimeStruct->RTC_H12 = (uint8_t)((tmptime & (RTC_TR_PM)) >> 16);
mbed_official 76:aeb1df146756 1845
mbed_official 76:aeb1df146756 1846 /* Fill the Date structure fields with the read parameters */
mbed_official 76:aeb1df146756 1847 RTC_StampDateStruct->RTC_Year = 0;
mbed_official 76:aeb1df146756 1848 RTC_StampDateStruct->RTC_Month = (uint8_t)((tmpdate & (RTC_DR_MT | RTC_DR_MU)) >> 8);
mbed_official 76:aeb1df146756 1849 RTC_StampDateStruct->RTC_Date = (uint8_t)(tmpdate & (RTC_DR_DT | RTC_DR_DU));
mbed_official 76:aeb1df146756 1850 RTC_StampDateStruct->RTC_WeekDay = (uint8_t)((tmpdate & (RTC_DR_WDU)) >> 13);
mbed_official 76:aeb1df146756 1851
mbed_official 76:aeb1df146756 1852 /* Check the input parameters format */
mbed_official 76:aeb1df146756 1853 if (RTC_Format == RTC_Format_BIN)
mbed_official 76:aeb1df146756 1854 {
mbed_official 76:aeb1df146756 1855 /* Convert the Time structure parameters to Binary format */
mbed_official 76:aeb1df146756 1856 RTC_StampTimeStruct->RTC_Hours = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Hours);
mbed_official 76:aeb1df146756 1857 RTC_StampTimeStruct->RTC_Minutes = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Minutes);
mbed_official 76:aeb1df146756 1858 RTC_StampTimeStruct->RTC_Seconds = (uint8_t)RTC_Bcd2ToByte(RTC_StampTimeStruct->RTC_Seconds);
mbed_official 76:aeb1df146756 1859
mbed_official 76:aeb1df146756 1860 /* Convert the Date structure parameters to Binary format */
mbed_official 76:aeb1df146756 1861 RTC_StampDateStruct->RTC_Month = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Month);
mbed_official 76:aeb1df146756 1862 RTC_StampDateStruct->RTC_Date = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_Date);
mbed_official 76:aeb1df146756 1863 RTC_StampDateStruct->RTC_WeekDay = (uint8_t)RTC_Bcd2ToByte(RTC_StampDateStruct->RTC_WeekDay);
mbed_official 76:aeb1df146756 1864 }
mbed_official 76:aeb1df146756 1865 }
mbed_official 76:aeb1df146756 1866
mbed_official 76:aeb1df146756 1867 /**
mbed_official 76:aeb1df146756 1868 * @brief Get the RTC timestamp Subseconds value.
mbed_official 76:aeb1df146756 1869 * @param None
mbed_official 76:aeb1df146756 1870 * @retval RTC current timestamp Subseconds value.
mbed_official 76:aeb1df146756 1871 */
mbed_official 76:aeb1df146756 1872 uint32_t RTC_GetTimeStampSubSecond(void)
mbed_official 76:aeb1df146756 1873 {
mbed_official 76:aeb1df146756 1874 /* Get timestamp subseconds values from the correspondent registers */
mbed_official 76:aeb1df146756 1875 return (uint32_t)(RTC->TSSSR);
mbed_official 76:aeb1df146756 1876 }
mbed_official 76:aeb1df146756 1877
mbed_official 76:aeb1df146756 1878 /**
mbed_official 76:aeb1df146756 1879 * @}
mbed_official 76:aeb1df146756 1880 */
mbed_official 76:aeb1df146756 1881
mbed_official 76:aeb1df146756 1882 /** @defgroup RTC_Group9 Tampers configuration functions
mbed_official 76:aeb1df146756 1883 * @brief Tampers configuration functions
mbed_official 76:aeb1df146756 1884 *
mbed_official 76:aeb1df146756 1885 @verbatim
mbed_official 76:aeb1df146756 1886 ===============================================================================
mbed_official 76:aeb1df146756 1887 ##### Tampers configuration functions #####
mbed_official 76:aeb1df146756 1888 ===============================================================================
mbed_official 76:aeb1df146756 1889
mbed_official 76:aeb1df146756 1890 @endverbatim
mbed_official 76:aeb1df146756 1891 * @{
mbed_official 76:aeb1df146756 1892 */
mbed_official 76:aeb1df146756 1893
mbed_official 76:aeb1df146756 1894 /**
mbed_official 76:aeb1df146756 1895 * @brief Configures the select Tamper pin edge.
mbed_official 76:aeb1df146756 1896 * @param RTC_Tamper: Selected tamper pin.
mbed_official 76:aeb1df146756 1897 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 1898 * @arg RTC_Tamper_1: Select Tamper 1.
mbed_official 76:aeb1df146756 1899 * @arg RTC_Tamper_2: Select Tamper 2.
mbed_official 76:aeb1df146756 1900 * @param RTC_TamperTrigger: Specifies the trigger on the tamper pin that
mbed_official 76:aeb1df146756 1901 * stimulates tamper event.
mbed_official 76:aeb1df146756 1902 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1903 * @arg RTC_TamperTrigger_RisingEdge: Rising Edge of the tamper pin causes tamper event.
mbed_official 76:aeb1df146756 1904 * @arg RTC_TamperTrigger_FallingEdge: Falling Edge of the tamper pin causes tamper event.
mbed_official 76:aeb1df146756 1905 * @arg RTC_TamperTrigger_LowLevel: Low Level of the tamper pin causes tamper event.
mbed_official 76:aeb1df146756 1906 * @arg RTC_TamperTrigger_HighLevel: High Level of the tamper pin causes tamper event.
mbed_official 76:aeb1df146756 1907 * @retval None
mbed_official 76:aeb1df146756 1908 */
mbed_official 76:aeb1df146756 1909 void RTC_TamperTriggerConfig(uint32_t RTC_Tamper, uint32_t RTC_TamperTrigger)
mbed_official 76:aeb1df146756 1910 {
mbed_official 76:aeb1df146756 1911 /* Check the parameters */
mbed_official 76:aeb1df146756 1912 assert_param(IS_RTC_TAMPER(RTC_Tamper));
mbed_official 76:aeb1df146756 1913 assert_param(IS_RTC_TAMPER_TRIGGER(RTC_TamperTrigger));
mbed_official 76:aeb1df146756 1914
mbed_official 76:aeb1df146756 1915 if (RTC_TamperTrigger == RTC_TamperTrigger_RisingEdge)
mbed_official 76:aeb1df146756 1916 {
mbed_official 76:aeb1df146756 1917 /* Configure the RTC_TAFCR register */
mbed_official 76:aeb1df146756 1918 RTC->TAFCR &= (uint32_t)((uint32_t)~(RTC_Tamper << 1));
mbed_official 76:aeb1df146756 1919 }
mbed_official 76:aeb1df146756 1920 else
mbed_official 76:aeb1df146756 1921 {
mbed_official 76:aeb1df146756 1922 /* Configure the RTC_TAFCR register */
mbed_official 76:aeb1df146756 1923 RTC->TAFCR |= (uint32_t)(RTC_Tamper << 1);
mbed_official 76:aeb1df146756 1924 }
mbed_official 76:aeb1df146756 1925 }
mbed_official 76:aeb1df146756 1926
mbed_official 76:aeb1df146756 1927 /**
mbed_official 76:aeb1df146756 1928 * @brief Enables or Disables the Tamper detection.
mbed_official 76:aeb1df146756 1929 * @param RTC_Tamper: Selected tamper pin.
mbed_official 76:aeb1df146756 1930 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 1931 * @arg RTC_Tamper_1: Select Tamper 1.
mbed_official 76:aeb1df146756 1932 * @arg RTC_Tamper_2: Select Tamper 2.
mbed_official 76:aeb1df146756 1933 * @param NewState: new state of the tamper pin.
mbed_official 76:aeb1df146756 1934 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 1935 * @retval None
mbed_official 76:aeb1df146756 1936 */
mbed_official 76:aeb1df146756 1937 void RTC_TamperCmd(uint32_t RTC_Tamper, FunctionalState NewState)
mbed_official 76:aeb1df146756 1938 {
mbed_official 76:aeb1df146756 1939 /* Check the parameters */
mbed_official 76:aeb1df146756 1940 assert_param(IS_RTC_TAMPER(RTC_Tamper));
mbed_official 76:aeb1df146756 1941 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 1942
mbed_official 76:aeb1df146756 1943 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 1944 {
mbed_official 76:aeb1df146756 1945 /* Enable the selected Tamper pin */
mbed_official 76:aeb1df146756 1946 RTC->TAFCR |= (uint32_t)RTC_Tamper;
mbed_official 76:aeb1df146756 1947 }
mbed_official 76:aeb1df146756 1948 else
mbed_official 76:aeb1df146756 1949 {
mbed_official 76:aeb1df146756 1950 /* Disable the selected Tamper pin */
mbed_official 76:aeb1df146756 1951 RTC->TAFCR &= (uint32_t)~RTC_Tamper;
mbed_official 76:aeb1df146756 1952 }
mbed_official 76:aeb1df146756 1953 }
mbed_official 76:aeb1df146756 1954
mbed_official 76:aeb1df146756 1955 /**
mbed_official 76:aeb1df146756 1956 * @brief Configures the Tampers Filter.
mbed_official 76:aeb1df146756 1957 * @param RTC_TamperFilter: Specifies the tampers filter.
mbed_official 76:aeb1df146756 1958 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1959 * @arg RTC_TamperFilter_Disable: Tamper filter is disabled.
mbed_official 76:aeb1df146756 1960 * @arg RTC_TamperFilter_2Sample: Tamper is activated after 2 consecutive
mbed_official 76:aeb1df146756 1961 * samples at the active level
mbed_official 76:aeb1df146756 1962 * @arg RTC_TamperFilter_4Sample: Tamper is activated after 4 consecutive
mbed_official 76:aeb1df146756 1963 * samples at the active level
mbed_official 76:aeb1df146756 1964 * @arg RTC_TamperFilter_8Sample: Tamper is activated after 8 consecutive
mbed_official 76:aeb1df146756 1965 * samples at the active level
mbed_official 76:aeb1df146756 1966 * @retval None
mbed_official 76:aeb1df146756 1967 */
mbed_official 76:aeb1df146756 1968 void RTC_TamperFilterConfig(uint32_t RTC_TamperFilter)
mbed_official 76:aeb1df146756 1969 {
mbed_official 76:aeb1df146756 1970 /* Check the parameters */
mbed_official 76:aeb1df146756 1971 assert_param(IS_RTC_TAMPER_FILTER(RTC_TamperFilter));
mbed_official 76:aeb1df146756 1972
mbed_official 76:aeb1df146756 1973 /* Clear TAMPFLT[1:0] bits in the RTC_TAFCR register */
mbed_official 76:aeb1df146756 1974 RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPFLT);
mbed_official 76:aeb1df146756 1975
mbed_official 76:aeb1df146756 1976 /* Configure the RTC_TAFCR register */
mbed_official 76:aeb1df146756 1977 RTC->TAFCR |= (uint32_t)RTC_TamperFilter;
mbed_official 76:aeb1df146756 1978 }
mbed_official 76:aeb1df146756 1979
mbed_official 76:aeb1df146756 1980 /**
mbed_official 76:aeb1df146756 1981 * @brief Configures the Tampers Sampling Frequency.
mbed_official 76:aeb1df146756 1982 * @param RTC_TamperSamplingFreq: Specifies the tampers Sampling Frequency.
mbed_official 76:aeb1df146756 1983 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 1984 * @arg RTC_TamperSamplingFreq_RTCCLK_Div32768: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1985 * with a frequency = RTCCLK / 32768
mbed_official 76:aeb1df146756 1986 * @arg RTC_TamperSamplingFreq_RTCCLK_Div16384: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1987 * with a frequency = RTCCLK / 16384
mbed_official 76:aeb1df146756 1988 * @arg RTC_TamperSamplingFreq_RTCCLK_Div8192: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1989 * with a frequency = RTCCLK / 8192
mbed_official 76:aeb1df146756 1990 * @arg RTC_TamperSamplingFreq_RTCCLK_Div4096: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1991 * with a frequency = RTCCLK / 4096
mbed_official 76:aeb1df146756 1992 * @arg RTC_TamperSamplingFreq_RTCCLK_Div2048: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1993 * with a frequency = RTCCLK / 2048
mbed_official 76:aeb1df146756 1994 * @arg RTC_TamperSamplingFreq_RTCCLK_Div1024: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1995 * with a frequency = RTCCLK / 1024
mbed_official 76:aeb1df146756 1996 * @arg RTC_TamperSamplingFreq_RTCCLK_Div512: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1997 * with a frequency = RTCCLK / 512
mbed_official 76:aeb1df146756 1998 * @arg RTC_TamperSamplingFreq_RTCCLK_Div256: Each of the tamper inputs are sampled
mbed_official 76:aeb1df146756 1999 * with a frequency = RTCCLK / 256
mbed_official 76:aeb1df146756 2000 * @retval None
mbed_official 76:aeb1df146756 2001 */
mbed_official 76:aeb1df146756 2002 void RTC_TamperSamplingFreqConfig(uint32_t RTC_TamperSamplingFreq)
mbed_official 76:aeb1df146756 2003 {
mbed_official 76:aeb1df146756 2004 /* Check the parameters */
mbed_official 76:aeb1df146756 2005 assert_param(IS_RTC_TAMPER_SAMPLING_FREQ(RTC_TamperSamplingFreq));
mbed_official 76:aeb1df146756 2006
mbed_official 76:aeb1df146756 2007 /* Clear TAMPFREQ[2:0] bits in the RTC_TAFCR register */
mbed_official 76:aeb1df146756 2008 RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPFREQ);
mbed_official 76:aeb1df146756 2009
mbed_official 76:aeb1df146756 2010 /* Configure the RTC_TAFCR register */
mbed_official 76:aeb1df146756 2011 RTC->TAFCR |= (uint32_t)RTC_TamperSamplingFreq;
mbed_official 76:aeb1df146756 2012 }
mbed_official 76:aeb1df146756 2013
mbed_official 76:aeb1df146756 2014 /**
mbed_official 76:aeb1df146756 2015 * @brief Configures the Tampers Pins input Precharge Duration.
mbed_official 76:aeb1df146756 2016 * @param RTC_TamperPrechargeDuration: Specifies the Tampers Pins input
mbed_official 76:aeb1df146756 2017 * Precharge Duration.
mbed_official 76:aeb1df146756 2018 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 2019 * @arg RTC_TamperPrechargeDuration_1RTCCLK: Tamper pins are pre-charged before sampling during 1 RTCCLK cycle
mbed_official 76:aeb1df146756 2020 * @arg RTC_TamperPrechargeDuration_2RTCCLK: Tamper pins are pre-charged before sampling during 2 RTCCLK cycle
mbed_official 76:aeb1df146756 2021 * @arg RTC_TamperPrechargeDuration_4RTCCLK: Tamper pins are pre-charged before sampling during 4 RTCCLK cycle
mbed_official 76:aeb1df146756 2022 * @arg RTC_TamperPrechargeDuration_8RTCCLK: Tamper pins are pre-charged before sampling during 8 RTCCLK cycle
mbed_official 76:aeb1df146756 2023 * @retval None
mbed_official 76:aeb1df146756 2024 */
mbed_official 76:aeb1df146756 2025 void RTC_TamperPinsPrechargeDuration(uint32_t RTC_TamperPrechargeDuration)
mbed_official 76:aeb1df146756 2026 {
mbed_official 76:aeb1df146756 2027 /* Check the parameters */
mbed_official 76:aeb1df146756 2028 assert_param(IS_RTC_TAMPER_PRECHARGE_DURATION(RTC_TamperPrechargeDuration));
mbed_official 76:aeb1df146756 2029
mbed_official 76:aeb1df146756 2030 /* Clear TAMPPRCH[1:0] bits in the RTC_TAFCR register */
mbed_official 76:aeb1df146756 2031 RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_TAMPPRCH);
mbed_official 76:aeb1df146756 2032
mbed_official 76:aeb1df146756 2033 /* Configure the RTC_TAFCR register */
mbed_official 76:aeb1df146756 2034 RTC->TAFCR |= (uint32_t)RTC_TamperPrechargeDuration;
mbed_official 76:aeb1df146756 2035 }
mbed_official 76:aeb1df146756 2036
mbed_official 76:aeb1df146756 2037 /**
mbed_official 76:aeb1df146756 2038 * @brief Enables or Disables the TimeStamp on Tamper Detection Event.
mbed_official 76:aeb1df146756 2039 * @note The timestamp is valid even the TSE bit in tamper control register
mbed_official 76:aeb1df146756 2040 * is reset.
mbed_official 76:aeb1df146756 2041 * @param NewState: new state of the timestamp on tamper event.
mbed_official 76:aeb1df146756 2042 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 2043 * @retval None
mbed_official 76:aeb1df146756 2044 */
mbed_official 76:aeb1df146756 2045 void RTC_TimeStampOnTamperDetectionCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 2046 {
mbed_official 76:aeb1df146756 2047 /* Check the parameters */
mbed_official 76:aeb1df146756 2048 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 2049
mbed_official 76:aeb1df146756 2050 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 2051 {
mbed_official 76:aeb1df146756 2052 /* Save timestamp on tamper detection event */
mbed_official 76:aeb1df146756 2053 RTC->TAFCR |= (uint32_t)RTC_TAFCR_TAMPTS;
mbed_official 76:aeb1df146756 2054 }
mbed_official 76:aeb1df146756 2055 else
mbed_official 76:aeb1df146756 2056 {
mbed_official 76:aeb1df146756 2057 /* Tamper detection does not cause a timestamp to be saved */
mbed_official 76:aeb1df146756 2058 RTC->TAFCR &= (uint32_t)~RTC_TAFCR_TAMPTS;
mbed_official 76:aeb1df146756 2059 }
mbed_official 76:aeb1df146756 2060 }
mbed_official 76:aeb1df146756 2061
mbed_official 76:aeb1df146756 2062 /**
mbed_official 76:aeb1df146756 2063 * @brief Enables or Disables the Precharge of Tamper pin.
mbed_official 76:aeb1df146756 2064 * @param NewState: new state of tamper pull up.
mbed_official 76:aeb1df146756 2065 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 2066 * @retval None
mbed_official 76:aeb1df146756 2067 */
mbed_official 76:aeb1df146756 2068 void RTC_TamperPullUpCmd(FunctionalState NewState)
mbed_official 76:aeb1df146756 2069 {
mbed_official 76:aeb1df146756 2070 /* Check the parameters */
mbed_official 76:aeb1df146756 2071 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 2072
mbed_official 76:aeb1df146756 2073 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 2074 {
mbed_official 76:aeb1df146756 2075 /* Enable precharge of the selected Tamper pin */
mbed_official 76:aeb1df146756 2076 RTC->TAFCR &= (uint32_t)~RTC_TAFCR_TAMPPUDIS;
mbed_official 76:aeb1df146756 2077 }
mbed_official 76:aeb1df146756 2078 else
mbed_official 76:aeb1df146756 2079 {
mbed_official 76:aeb1df146756 2080 /* Disable precharge of the selected Tamper pin */
mbed_official 76:aeb1df146756 2081 RTC->TAFCR |= (uint32_t)RTC_TAFCR_TAMPPUDIS;
mbed_official 76:aeb1df146756 2082 }
mbed_official 76:aeb1df146756 2083 }
mbed_official 76:aeb1df146756 2084
mbed_official 76:aeb1df146756 2085 /**
mbed_official 76:aeb1df146756 2086 * @}
mbed_official 76:aeb1df146756 2087 */
mbed_official 76:aeb1df146756 2088
mbed_official 76:aeb1df146756 2089 /** @defgroup RTC_Group10 Backup Data Registers configuration functions
mbed_official 76:aeb1df146756 2090 * @brief Backup Data Registers configuration functions
mbed_official 76:aeb1df146756 2091 *
mbed_official 76:aeb1df146756 2092 @verbatim
mbed_official 76:aeb1df146756 2093 ===============================================================================
mbed_official 76:aeb1df146756 2094 ##### Backup Data Registers configuration functions #####
mbed_official 76:aeb1df146756 2095 ===============================================================================
mbed_official 76:aeb1df146756 2096
mbed_official 76:aeb1df146756 2097 @endverbatim
mbed_official 76:aeb1df146756 2098 * @{
mbed_official 76:aeb1df146756 2099 */
mbed_official 76:aeb1df146756 2100
mbed_official 76:aeb1df146756 2101 /**
mbed_official 76:aeb1df146756 2102 * @brief Writes a data in a specified RTC Backup data register.
mbed_official 76:aeb1df146756 2103 * @param RTC_BKP_DR: RTC Backup data Register number.
mbed_official 76:aeb1df146756 2104 * This parameter can be: RTC_BKP_DRx where x can be from 0 to 4 to
mbed_official 76:aeb1df146756 2105 * specify the register.
mbed_official 76:aeb1df146756 2106 * @param Data: Data to be written in the specified RTC Backup data register.
mbed_official 76:aeb1df146756 2107 * @retval None
mbed_official 76:aeb1df146756 2108 */
mbed_official 76:aeb1df146756 2109 void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data)
mbed_official 76:aeb1df146756 2110 {
mbed_official 76:aeb1df146756 2111 __IO uint32_t tmp = 0;
mbed_official 76:aeb1df146756 2112
mbed_official 76:aeb1df146756 2113 /* Check the parameters */
mbed_official 76:aeb1df146756 2114 assert_param(IS_RTC_BKP(RTC_BKP_DR));
mbed_official 76:aeb1df146756 2115
mbed_official 76:aeb1df146756 2116 tmp = RTC_BASE + 0x50;
mbed_official 76:aeb1df146756 2117 tmp += (RTC_BKP_DR * 4);
mbed_official 76:aeb1df146756 2118
mbed_official 76:aeb1df146756 2119 /* Write the specified register */
mbed_official 76:aeb1df146756 2120 *(__IO uint32_t *)tmp = (uint32_t)Data;
mbed_official 76:aeb1df146756 2121 }
mbed_official 76:aeb1df146756 2122
mbed_official 76:aeb1df146756 2123 /**
mbed_official 76:aeb1df146756 2124 * @brief Reads data from the specified RTC Backup data Register.
mbed_official 76:aeb1df146756 2125 * @param RTC_BKP_DR: RTC Backup data Register number.
mbed_official 76:aeb1df146756 2126 * This parameter can be: RTC_BKP_DRx where x can be from 0 to 19 to
mbed_official 76:aeb1df146756 2127 * specify the register.
mbed_official 76:aeb1df146756 2128 * @retval None
mbed_official 76:aeb1df146756 2129 */
mbed_official 76:aeb1df146756 2130 uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR)
mbed_official 76:aeb1df146756 2131 {
mbed_official 76:aeb1df146756 2132 __IO uint32_t tmp = 0;
mbed_official 76:aeb1df146756 2133
mbed_official 76:aeb1df146756 2134 /* Check the parameters */
mbed_official 76:aeb1df146756 2135 assert_param(IS_RTC_BKP(RTC_BKP_DR));
mbed_official 76:aeb1df146756 2136
mbed_official 76:aeb1df146756 2137 tmp = RTC_BASE + 0x50;
mbed_official 76:aeb1df146756 2138 tmp += (RTC_BKP_DR * 4);
mbed_official 76:aeb1df146756 2139
mbed_official 76:aeb1df146756 2140 /* Read the specified register */
mbed_official 76:aeb1df146756 2141 return (*(__IO uint32_t *)tmp);
mbed_official 76:aeb1df146756 2142 }
mbed_official 76:aeb1df146756 2143
mbed_official 76:aeb1df146756 2144 /**
mbed_official 76:aeb1df146756 2145 * @}
mbed_official 76:aeb1df146756 2146 */
mbed_official 76:aeb1df146756 2147
mbed_official 76:aeb1df146756 2148 /** @defgroup RTC_Group11 Output Type Config configuration functions
mbed_official 76:aeb1df146756 2149 * @brief Output Type Config configuration functions
mbed_official 76:aeb1df146756 2150 *
mbed_official 76:aeb1df146756 2151 @verbatim
mbed_official 76:aeb1df146756 2152 ===============================================================================
mbed_official 76:aeb1df146756 2153 ##### Output Type Config configuration functions #####
mbed_official 76:aeb1df146756 2154 ===============================================================================
mbed_official 76:aeb1df146756 2155
mbed_official 76:aeb1df146756 2156 @endverbatim
mbed_official 76:aeb1df146756 2157 * @{
mbed_official 76:aeb1df146756 2158 */
mbed_official 76:aeb1df146756 2159
mbed_official 76:aeb1df146756 2160 /**
mbed_official 76:aeb1df146756 2161 * @brief Configures the RTC Output Pin mode.
mbed_official 76:aeb1df146756 2162 * @param RTC_OutputType: specifies the RTC Output (PC13) pin mode.
mbed_official 76:aeb1df146756 2163 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 2164 * @arg RTC_OutputType_OpenDrain: RTC Output (PC13) is configured in
mbed_official 76:aeb1df146756 2165 * Open Drain mode.
mbed_official 76:aeb1df146756 2166 * @arg RTC_OutputType_PushPull: RTC Output (PC13) is configured in
mbed_official 76:aeb1df146756 2167 * Push Pull mode.
mbed_official 76:aeb1df146756 2168 * @retval None
mbed_official 76:aeb1df146756 2169 */
mbed_official 76:aeb1df146756 2170 void RTC_OutputTypeConfig(uint32_t RTC_OutputType)
mbed_official 76:aeb1df146756 2171 {
mbed_official 76:aeb1df146756 2172 /* Check the parameters */
mbed_official 76:aeb1df146756 2173 assert_param(IS_RTC_OUTPUT_TYPE(RTC_OutputType));
mbed_official 76:aeb1df146756 2174
mbed_official 76:aeb1df146756 2175 RTC->TAFCR &= (uint32_t)~(RTC_TAFCR_ALARMOUTTYPE);
mbed_official 76:aeb1df146756 2176 RTC->TAFCR |= (uint32_t)(RTC_OutputType);
mbed_official 76:aeb1df146756 2177 }
mbed_official 76:aeb1df146756 2178
mbed_official 76:aeb1df146756 2179 /**
mbed_official 76:aeb1df146756 2180 * @}
mbed_official 76:aeb1df146756 2181 */
mbed_official 76:aeb1df146756 2182
mbed_official 76:aeb1df146756 2183 /** @defgroup RTC_Group12 Shift control synchronisation functions
mbed_official 76:aeb1df146756 2184 * @brief Shift control synchronisation functions
mbed_official 76:aeb1df146756 2185 *
mbed_official 76:aeb1df146756 2186 @verbatim
mbed_official 76:aeb1df146756 2187 ===============================================================================
mbed_official 76:aeb1df146756 2188 ##### Shift control synchronisation functions #####
mbed_official 76:aeb1df146756 2189 ===============================================================================
mbed_official 76:aeb1df146756 2190
mbed_official 76:aeb1df146756 2191 @endverbatim
mbed_official 76:aeb1df146756 2192 * @{
mbed_official 76:aeb1df146756 2193 */
mbed_official 76:aeb1df146756 2194
mbed_official 76:aeb1df146756 2195 /**
mbed_official 76:aeb1df146756 2196 * @brief Configures the Synchronization Shift Control Settings.
mbed_official 76:aeb1df146756 2197 * @note When REFCKON is set, firmware must not write to Shift control register
mbed_official 76:aeb1df146756 2198 * @param RTC_ShiftAdd1S: Select to add or not 1 second to the time Calendar.
mbed_official 76:aeb1df146756 2199 * This parameter can be one of the following values :
mbed_official 76:aeb1df146756 2200 * @arg RTC_ShiftAdd1S_Set: Add one second to the clock calendar.
mbed_official 76:aeb1df146756 2201 * @arg RTC_ShiftAdd1S_Reset: No effect.
mbed_official 76:aeb1df146756 2202 * @param RTC_ShiftSubFS: Select the number of Second Fractions to Substitute.
mbed_official 76:aeb1df146756 2203 * This parameter can be one any value from 0 to 0x7FFF.
mbed_official 76:aeb1df146756 2204 * @retval An ErrorStatus enumeration value:
mbed_official 76:aeb1df146756 2205 * - SUCCESS: RTC Shift registers are configured
mbed_official 76:aeb1df146756 2206 * - ERROR: RTC Shift registers are not configured
mbed_official 76:aeb1df146756 2207 */
mbed_official 76:aeb1df146756 2208 ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS)
mbed_official 76:aeb1df146756 2209 {
mbed_official 76:aeb1df146756 2210 ErrorStatus status = ERROR;
mbed_official 76:aeb1df146756 2211 uint32_t shpfcount = 0;
mbed_official 76:aeb1df146756 2212
mbed_official 76:aeb1df146756 2213 /* Check the parameters */
mbed_official 76:aeb1df146756 2214 assert_param(IS_RTC_SHIFT_ADD1S(RTC_ShiftAdd1S));
mbed_official 76:aeb1df146756 2215 assert_param(IS_RTC_SHIFT_SUBFS(RTC_ShiftSubFS));
mbed_official 76:aeb1df146756 2216
mbed_official 76:aeb1df146756 2217 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 2218 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 2219 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 2220
mbed_official 76:aeb1df146756 2221 /* Check if a Shift is pending*/
mbed_official 76:aeb1df146756 2222 if ((RTC->ISR & RTC_ISR_SHPF) != RESET)
mbed_official 76:aeb1df146756 2223 {
mbed_official 76:aeb1df146756 2224 /* Wait until the shift is completed*/
mbed_official 76:aeb1df146756 2225 while (((RTC->ISR & RTC_ISR_SHPF) != RESET) && (shpfcount != SHPF_TIMEOUT))
mbed_official 76:aeb1df146756 2226 {
mbed_official 76:aeb1df146756 2227 shpfcount++;
mbed_official 76:aeb1df146756 2228 }
mbed_official 76:aeb1df146756 2229 }
mbed_official 76:aeb1df146756 2230
mbed_official 76:aeb1df146756 2231 /* Check if the Shift pending is completed or if there is no Shift operation at all*/
mbed_official 76:aeb1df146756 2232 if ((RTC->ISR & RTC_ISR_SHPF) == RESET)
mbed_official 76:aeb1df146756 2233 {
mbed_official 76:aeb1df146756 2234 /* check if the reference clock detection is disabled */
mbed_official 76:aeb1df146756 2235 if((RTC->CR & RTC_CR_REFCKON) == RESET)
mbed_official 76:aeb1df146756 2236 {
mbed_official 76:aeb1df146756 2237 /* Configure the Shift settings */
mbed_official 76:aeb1df146756 2238 RTC->SHIFTR = (uint32_t)(uint32_t)(RTC_ShiftSubFS) | (uint32_t)(RTC_ShiftAdd1S);
mbed_official 76:aeb1df146756 2239
mbed_official 76:aeb1df146756 2240 if(RTC_WaitForSynchro() == ERROR)
mbed_official 76:aeb1df146756 2241 {
mbed_official 76:aeb1df146756 2242 status = ERROR;
mbed_official 76:aeb1df146756 2243 }
mbed_official 76:aeb1df146756 2244 else
mbed_official 76:aeb1df146756 2245 {
mbed_official 76:aeb1df146756 2246 status = SUCCESS;
mbed_official 76:aeb1df146756 2247 }
mbed_official 76:aeb1df146756 2248 }
mbed_official 76:aeb1df146756 2249 else
mbed_official 76:aeb1df146756 2250 {
mbed_official 76:aeb1df146756 2251 status = ERROR;
mbed_official 76:aeb1df146756 2252 }
mbed_official 76:aeb1df146756 2253 }
mbed_official 76:aeb1df146756 2254 else
mbed_official 76:aeb1df146756 2255 {
mbed_official 76:aeb1df146756 2256 status = ERROR;
mbed_official 76:aeb1df146756 2257 }
mbed_official 76:aeb1df146756 2258
mbed_official 76:aeb1df146756 2259 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 2260 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 2261
mbed_official 76:aeb1df146756 2262 return (ErrorStatus)(status);
mbed_official 76:aeb1df146756 2263 }
mbed_official 76:aeb1df146756 2264
mbed_official 76:aeb1df146756 2265 /**
mbed_official 76:aeb1df146756 2266 * @}
mbed_official 76:aeb1df146756 2267 */
mbed_official 76:aeb1df146756 2268
mbed_official 76:aeb1df146756 2269 /** @defgroup RTC_Group13 Interrupts and flags management functions
mbed_official 76:aeb1df146756 2270 * @brief Interrupts and flags management functions
mbed_official 76:aeb1df146756 2271 *
mbed_official 76:aeb1df146756 2272 @verbatim
mbed_official 76:aeb1df146756 2273 ===============================================================================
mbed_official 76:aeb1df146756 2274 ##### Interrupts and flags management functions #####
mbed_official 76:aeb1df146756 2275 ===============================================================================
mbed_official 76:aeb1df146756 2276 [..] All RTC interrupts are connected to the EXTI controller.
mbed_official 76:aeb1df146756 2277
mbed_official 76:aeb1df146756 2278 (+) To enable the RTC Alarm interrupt, the following sequence is required:
mbed_official 76:aeb1df146756 2279 (++) Configure and enable the EXTI Line 17 in interrupt mode and select the rising
mbed_official 76:aeb1df146756 2280 edge sensitivity using the EXTI_Init() function.
mbed_official 76:aeb1df146756 2281 (++) Configure and enable the RTC_Alarm IRQ channel in the NVIC using the NVIC_Init()
mbed_official 76:aeb1df146756 2282 function.
mbed_official 76:aeb1df146756 2283 (++) Configure the RTC to generate RTC alarms (Alarm A) using
mbed_official 76:aeb1df146756 2284 the RTC_SetAlarm() and RTC_AlarmCmd() functions.
mbed_official 76:aeb1df146756 2285
mbed_official 76:aeb1df146756 2286 (+) To enable the RTC Tamper interrupt, the following sequence is required:
mbed_official 76:aeb1df146756 2287 (++) Configure and enable the EXTI Line 19 in interrupt mode and select the rising
mbed_official 76:aeb1df146756 2288 edge sensitivity using the EXTI_Init() function.
mbed_official 76:aeb1df146756 2289 (++) Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the NVIC_Init()
mbed_official 76:aeb1df146756 2290 function.
mbed_official 76:aeb1df146756 2291 (++) Configure the RTC to detect the RTC tamper event using the
mbed_official 76:aeb1df146756 2292 RTC_TamperTriggerConfig() and RTC_TamperCmd() functions.
mbed_official 76:aeb1df146756 2293
mbed_official 76:aeb1df146756 2294 (+) To enable the RTC TimeStamp interrupt, the following sequence is required:
mbed_official 76:aeb1df146756 2295 (++) Configure and enable the EXTI Line 19 in interrupt mode and select the rising
mbed_official 76:aeb1df146756 2296 edge sensitivity using the EXTI_Init() function.
mbed_official 76:aeb1df146756 2297 (++) Configure and enable the TAMP_STAMP IRQ channel in the NVIC using the NVIC_Init()
mbed_official 76:aeb1df146756 2298 function.
mbed_official 76:aeb1df146756 2299 (++) Configure the RTC to detect the RTC time-stamp event using the
mbed_official 76:aeb1df146756 2300 RTC_TimeStampCmd() functions.
mbed_official 76:aeb1df146756 2301
mbed_official 76:aeb1df146756 2302 @endverbatim
mbed_official 76:aeb1df146756 2303 * @{
mbed_official 76:aeb1df146756 2304 */
mbed_official 76:aeb1df146756 2305
mbed_official 76:aeb1df146756 2306 /**
mbed_official 76:aeb1df146756 2307 * @brief Enables or disables the specified RTC interrupts.
mbed_official 76:aeb1df146756 2308 * @param RTC_IT: specifies the RTC interrupt sources to be enabled or disabled.
mbed_official 76:aeb1df146756 2309 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 2310 * @arg RTC_IT_TS: Time Stamp interrupt mask
mbed_official 76:aeb1df146756 2311 * @arg RTC_IT_WUT: WakeUp Timer interrupt mask, available only for STM32F072 devices
mbed_official 76:aeb1df146756 2312 * @arg RTC_IT_ALRA: Alarm A interrupt mask
mbed_official 76:aeb1df146756 2313 * @arg RTC_IT_TAMP: Tamper event interrupt mask
mbed_official 76:aeb1df146756 2314 * @param NewState: new state of the specified RTC interrupts.
mbed_official 76:aeb1df146756 2315 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 2316 * @retval None
mbed_official 76:aeb1df146756 2317 */
mbed_official 76:aeb1df146756 2318 void RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState)
mbed_official 76:aeb1df146756 2319 {
mbed_official 76:aeb1df146756 2320 /* Check the parameters */
mbed_official 76:aeb1df146756 2321 assert_param(IS_RTC_CONFIG_IT(RTC_IT));
mbed_official 76:aeb1df146756 2322 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 2323
mbed_official 76:aeb1df146756 2324 /* Disable the write protection for RTC registers */
mbed_official 76:aeb1df146756 2325 RTC->WPR = 0xCA;
mbed_official 76:aeb1df146756 2326 RTC->WPR = 0x53;
mbed_official 76:aeb1df146756 2327
mbed_official 76:aeb1df146756 2328 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 2329 {
mbed_official 76:aeb1df146756 2330 /* Configure the Interrupts in the RTC_CR register */
mbed_official 76:aeb1df146756 2331 RTC->CR |= (uint32_t)(RTC_IT & ~RTC_TAFCR_TAMPIE);
mbed_official 76:aeb1df146756 2332 /* Configure the Tamper Interrupt in the RTC_TAFCR */
mbed_official 76:aeb1df146756 2333 RTC->TAFCR |= (uint32_t)(RTC_IT & RTC_TAFCR_TAMPIE);
mbed_official 76:aeb1df146756 2334 }
mbed_official 76:aeb1df146756 2335 else
mbed_official 76:aeb1df146756 2336 {
mbed_official 76:aeb1df146756 2337 /* Configure the Interrupts in the RTC_CR register */
mbed_official 76:aeb1df146756 2338 RTC->CR &= (uint32_t)~(RTC_IT & (uint32_t)~RTC_TAFCR_TAMPIE);
mbed_official 76:aeb1df146756 2339 /* Configure the Tamper Interrupt in the RTC_TAFCR */
mbed_official 76:aeb1df146756 2340 RTC->TAFCR &= (uint32_t)~(RTC_IT & RTC_TAFCR_TAMPIE);
mbed_official 76:aeb1df146756 2341 }
mbed_official 76:aeb1df146756 2342 /* Enable the write protection for RTC registers */
mbed_official 76:aeb1df146756 2343 RTC->WPR = 0xFF;
mbed_official 76:aeb1df146756 2344 }
mbed_official 76:aeb1df146756 2345
mbed_official 76:aeb1df146756 2346 /**
mbed_official 76:aeb1df146756 2347 * @brief Checks whether the specified RTC flag is set or not.
mbed_official 76:aeb1df146756 2348 * @param RTC_FLAG: specifies the flag to check.
mbed_official 76:aeb1df146756 2349 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 2350 * @arg RTC_FLAG_RECALPF: RECALPF event flag
mbed_official 76:aeb1df146756 2351 * @arg RTC_FLAG_TAMP2F: Tamper 2 event flag
mbed_official 76:aeb1df146756 2352 * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag
mbed_official 76:aeb1df146756 2353 * @arg RTC_FLAG_TSOVF: Time Stamp OverFlow flag
mbed_official 76:aeb1df146756 2354 * @arg RTC_FLAG_TSF: Time Stamp event flag
mbed_official 76:aeb1df146756 2355 * @arg RTC_FLAG_WUTF: WakeUp Timer flag, available only for STM32F072 devices
mbed_official 76:aeb1df146756 2356 * @arg RTC_FLAG_ALRAF: Alarm A flag
mbed_official 76:aeb1df146756 2357 * @arg RTC_FLAG_INITF: Initialization mode flag
mbed_official 76:aeb1df146756 2358 * @arg RTC_FLAG_RSF: Registers Synchronized flag
mbed_official 76:aeb1df146756 2359 * @arg RTC_FLAG_INITS: Registers Configured flag
mbed_official 76:aeb1df146756 2360 * @retval The new state of RTC_FLAG (SET or RESET).
mbed_official 76:aeb1df146756 2361 */
mbed_official 76:aeb1df146756 2362 FlagStatus RTC_GetFlagStatus(uint32_t RTC_FLAG)
mbed_official 76:aeb1df146756 2363 {
mbed_official 76:aeb1df146756 2364 FlagStatus bitstatus = RESET;
mbed_official 76:aeb1df146756 2365 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 2366
mbed_official 76:aeb1df146756 2367 /* Check the parameters */
mbed_official 76:aeb1df146756 2368 assert_param(IS_RTC_GET_FLAG(RTC_FLAG));
mbed_official 76:aeb1df146756 2369
mbed_official 76:aeb1df146756 2370 /* Get all the flags */
mbed_official 76:aeb1df146756 2371 tmpreg = (uint32_t)(RTC->ISR & RTC_FLAGS_MASK);
mbed_official 76:aeb1df146756 2372
mbed_official 76:aeb1df146756 2373 /* Return the status of the flag */
mbed_official 76:aeb1df146756 2374 if ((tmpreg & RTC_FLAG) != (uint32_t)RESET)
mbed_official 76:aeb1df146756 2375 {
mbed_official 76:aeb1df146756 2376 bitstatus = SET;
mbed_official 76:aeb1df146756 2377 }
mbed_official 76:aeb1df146756 2378 else
mbed_official 76:aeb1df146756 2379 {
mbed_official 76:aeb1df146756 2380 bitstatus = RESET;
mbed_official 76:aeb1df146756 2381 }
mbed_official 76:aeb1df146756 2382 return bitstatus;
mbed_official 76:aeb1df146756 2383 }
mbed_official 76:aeb1df146756 2384
mbed_official 76:aeb1df146756 2385 /**
mbed_official 76:aeb1df146756 2386 * @brief Clears the RTC's pending flags.
mbed_official 76:aeb1df146756 2387 * @param RTC_FLAG: specifies the RTC flag to clear.
mbed_official 76:aeb1df146756 2388 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 2389 * @arg RTC_FLAG_TAMP2F: Tamper 2 event flag
mbed_official 76:aeb1df146756 2390 * @arg RTC_FLAG_TAMP1F: Tamper 1 event flag
mbed_official 76:aeb1df146756 2391 * @arg RTC_FLAG_TSOVF: Time Stamp Overflow flag
mbed_official 76:aeb1df146756 2392 * @arg RTC_FLAG_TSF: Time Stamp event flag
mbed_official 76:aeb1df146756 2393 * @arg RTC_FLAG_WUTF: WakeUp Timer flag, available only for STM32F072 devices
mbed_official 76:aeb1df146756 2394 * @arg RTC_FLAG_ALRAF: Alarm A flag
mbed_official 76:aeb1df146756 2395 * @arg RTC_FLAG_RSF: Registers Synchronized flag
mbed_official 76:aeb1df146756 2396 * @retval None
mbed_official 76:aeb1df146756 2397 */
mbed_official 76:aeb1df146756 2398 void RTC_ClearFlag(uint32_t RTC_FLAG)
mbed_official 76:aeb1df146756 2399 {
mbed_official 76:aeb1df146756 2400 /* Check the parameters */
mbed_official 76:aeb1df146756 2401 assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG));
mbed_official 76:aeb1df146756 2402
mbed_official 76:aeb1df146756 2403 /* Clear the Flags in the RTC_ISR register */
mbed_official 76:aeb1df146756 2404 RTC->ISR = (uint32_t)((uint32_t)(~((RTC_FLAG | RTC_ISR_INIT)& 0x0001FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT)));
mbed_official 76:aeb1df146756 2405 }
mbed_official 76:aeb1df146756 2406
mbed_official 76:aeb1df146756 2407 /**
mbed_official 76:aeb1df146756 2408 * @brief Checks whether the specified RTC interrupt has occurred or not.
mbed_official 76:aeb1df146756 2409 * @param RTC_IT: specifies the RTC interrupt source to check.
mbed_official 76:aeb1df146756 2410 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 2411 * @arg RTC_IT_TS: Time Stamp interrupt
mbed_official 76:aeb1df146756 2412 * @arg RTC_IT_WUT: WakeUp Timer interrupt, available only for STM32F072 devices
mbed_official 76:aeb1df146756 2413 * @arg RTC_IT_ALRA: Alarm A interrupt
mbed_official 76:aeb1df146756 2414 * @arg RTC_IT_TAMP1: Tamper1 event interrupt
mbed_official 76:aeb1df146756 2415 * @arg RTC_IT_TAMP2: Tamper2 event interrupt
mbed_official 76:aeb1df146756 2416 * @retval The new state of RTC_IT (SET or RESET).
mbed_official 76:aeb1df146756 2417 */
mbed_official 76:aeb1df146756 2418 ITStatus RTC_GetITStatus(uint32_t RTC_IT)
mbed_official 76:aeb1df146756 2419 {
mbed_official 76:aeb1df146756 2420 ITStatus bitstatus = RESET;
mbed_official 76:aeb1df146756 2421 uint32_t tmpreg = 0, enablestatus = 0;
mbed_official 76:aeb1df146756 2422
mbed_official 76:aeb1df146756 2423 /* Check the parameters */
mbed_official 76:aeb1df146756 2424 assert_param(IS_RTC_GET_IT(RTC_IT));
mbed_official 76:aeb1df146756 2425
mbed_official 76:aeb1df146756 2426 /* Get the TAMPER Interrupt enable bit and pending bit */
mbed_official 76:aeb1df146756 2427 tmpreg = (uint32_t)(RTC->TAFCR & (RTC_TAFCR_TAMPIE));
mbed_official 76:aeb1df146756 2428
mbed_official 76:aeb1df146756 2429 /* Get the Interrupt enable Status */
mbed_official 76:aeb1df146756 2430 enablestatus = (uint32_t)((RTC->CR & RTC_IT) | (tmpreg & ((RTC_IT >> (RTC_IT >> 18)) >> 15)));
mbed_official 76:aeb1df146756 2431
mbed_official 76:aeb1df146756 2432 /* Get the Interrupt pending bit */
mbed_official 76:aeb1df146756 2433 tmpreg = (uint32_t)((RTC->ISR & (uint32_t)(RTC_IT >> 4)));
mbed_official 76:aeb1df146756 2434
mbed_official 76:aeb1df146756 2435 /* Get the status of the Interrupt */
mbed_official 76:aeb1df146756 2436 if ((enablestatus != (uint32_t)RESET) && ((tmpreg & 0x0000FFFF) != (uint32_t)RESET))
mbed_official 76:aeb1df146756 2437 {
mbed_official 76:aeb1df146756 2438 bitstatus = SET;
mbed_official 76:aeb1df146756 2439 }
mbed_official 76:aeb1df146756 2440 else
mbed_official 76:aeb1df146756 2441 {
mbed_official 76:aeb1df146756 2442 bitstatus = RESET;
mbed_official 76:aeb1df146756 2443 }
mbed_official 76:aeb1df146756 2444 return bitstatus;
mbed_official 76:aeb1df146756 2445 }
mbed_official 76:aeb1df146756 2446
mbed_official 76:aeb1df146756 2447 /**
mbed_official 76:aeb1df146756 2448 * @brief Clears the RTC's interrupt pending bits.
mbed_official 76:aeb1df146756 2449 * @param RTC_IT: specifies the RTC interrupt pending bit to clear.
mbed_official 76:aeb1df146756 2450 * This parameter can be any combination of the following values:
mbed_official 76:aeb1df146756 2451 * @arg RTC_IT_TS: Time Stamp interrupt
mbed_official 76:aeb1df146756 2452 * @arg RTC_IT_WUT: WakeUp Timer interrupt, available only for STM32F072 devices
mbed_official 76:aeb1df146756 2453 * @arg RTC_IT_ALRA: Alarm A interrupt
mbed_official 76:aeb1df146756 2454 * @arg RTC_IT_TAMP1: Tamper1 event interrupt
mbed_official 76:aeb1df146756 2455 * @arg RTC_IT_TAMP2: Tamper2 event interrupt
mbed_official 76:aeb1df146756 2456 * @retval None
mbed_official 76:aeb1df146756 2457 */
mbed_official 76:aeb1df146756 2458 void RTC_ClearITPendingBit(uint32_t RTC_IT)
mbed_official 76:aeb1df146756 2459 {
mbed_official 76:aeb1df146756 2460 uint32_t tmpreg = 0;
mbed_official 76:aeb1df146756 2461
mbed_official 76:aeb1df146756 2462 /* Check the parameters */
mbed_official 76:aeb1df146756 2463 assert_param(IS_RTC_CLEAR_IT(RTC_IT));
mbed_official 76:aeb1df146756 2464
mbed_official 76:aeb1df146756 2465 /* Get the RTC_ISR Interrupt pending bits mask */
mbed_official 76:aeb1df146756 2466 tmpreg = (uint32_t)(RTC_IT >> 4);
mbed_official 76:aeb1df146756 2467
mbed_official 76:aeb1df146756 2468 /* Clear the interrupt pending bits in the RTC_ISR register */
mbed_official 76:aeb1df146756 2469 RTC->ISR = (uint32_t)((uint32_t)(~((tmpreg | RTC_ISR_INIT)& 0x0000FFFF) | (uint32_t)(RTC->ISR & RTC_ISR_INIT)));
mbed_official 76:aeb1df146756 2470 }
mbed_official 76:aeb1df146756 2471
mbed_official 76:aeb1df146756 2472 /**
mbed_official 76:aeb1df146756 2473 * @}
mbed_official 76:aeb1df146756 2474 */
mbed_official 76:aeb1df146756 2475
mbed_official 76:aeb1df146756 2476 /**
mbed_official 76:aeb1df146756 2477 * @brief Converts a 2 digit decimal to BCD format.
mbed_official 76:aeb1df146756 2478 * @param Value: Byte to be converted.
mbed_official 76:aeb1df146756 2479 * @retval Converted byte
mbed_official 76:aeb1df146756 2480 */
mbed_official 76:aeb1df146756 2481 static uint8_t RTC_ByteToBcd2(uint8_t Value)
mbed_official 76:aeb1df146756 2482 {
mbed_official 76:aeb1df146756 2483 uint8_t bcdhigh = 0;
mbed_official 76:aeb1df146756 2484
mbed_official 76:aeb1df146756 2485 while (Value >= 10)
mbed_official 76:aeb1df146756 2486 {
mbed_official 76:aeb1df146756 2487 bcdhigh++;
mbed_official 76:aeb1df146756 2488 Value -= 10;
mbed_official 76:aeb1df146756 2489 }
mbed_official 76:aeb1df146756 2490
mbed_official 76:aeb1df146756 2491 return ((uint8_t)(bcdhigh << 4) | Value);
mbed_official 76:aeb1df146756 2492 }
mbed_official 76:aeb1df146756 2493
mbed_official 76:aeb1df146756 2494 /**
mbed_official 76:aeb1df146756 2495 * @brief Convert from 2 digit BCD to Binary.
mbed_official 76:aeb1df146756 2496 * @param Value: BCD value to be converted.
mbed_official 76:aeb1df146756 2497 * @retval Converted word
mbed_official 76:aeb1df146756 2498 */
mbed_official 76:aeb1df146756 2499 static uint8_t RTC_Bcd2ToByte(uint8_t Value)
mbed_official 76:aeb1df146756 2500 {
mbed_official 76:aeb1df146756 2501 uint8_t tmp = 0;
mbed_official 76:aeb1df146756 2502 tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10;
mbed_official 76:aeb1df146756 2503 return (tmp + (Value & (uint8_t)0x0F));
mbed_official 76:aeb1df146756 2504 }
mbed_official 76:aeb1df146756 2505
mbed_official 76:aeb1df146756 2506 /**
mbed_official 76:aeb1df146756 2507 * @}
mbed_official 76:aeb1df146756 2508 */
mbed_official 76:aeb1df146756 2509
mbed_official 76:aeb1df146756 2510 /**
mbed_official 76:aeb1df146756 2511 * @}
mbed_official 76:aeb1df146756 2512 */
mbed_official 76:aeb1df146756 2513
mbed_official 76:aeb1df146756 2514 /**
mbed_official 76:aeb1df146756 2515 * @}
mbed_official 76:aeb1df146756 2516 */
mbed_official 76:aeb1df146756 2517
mbed_official 76:aeb1df146756 2518 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/