parent
8260fb60f8
commit
84532fd339
File diff suppressed because one or more lines are too long
@ -0,0 +1,10 @@ |
||||
/**
|
||||
* Application main task |
||||
*/ |
||||
|
||||
#ifndef APP_H |
||||
#define APP_H |
||||
|
||||
void app_main_task(void *argument); |
||||
|
||||
#endif //APP_H
|
@ -0,0 +1,52 @@ |
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file rtc.h |
||||
* @brief This file contains all the function prototypes for |
||||
* the rtc.c file |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2023 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __RTC_H__ |
||||
#define __RTC_H__ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "main.h" |
||||
|
||||
/* USER CODE BEGIN Includes */ |
||||
|
||||
/* USER CODE END Includes */ |
||||
|
||||
extern RTC_HandleTypeDef hrtc; |
||||
|
||||
/* USER CODE BEGIN Private defines */ |
||||
|
||||
/* USER CODE END Private defines */ |
||||
|
||||
void MX_RTC_Init(void); |
||||
|
||||
/* USER CODE BEGIN Prototypes */ |
||||
|
||||
/* USER CODE END Prototypes */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __RTC_H__ */ |
||||
|
@ -0,0 +1,159 @@ |
||||
/**
|
||||
* Main task |
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
#include "FreeRTOS.h" |
||||
#include "task.h" |
||||
|
||||
#include "main.h" |
||||
#include "app.h" |
||||
|
||||
#include "ufb/framebuffer.h" |
||||
#include "iwdg.h" |
||||
#include "tim.h" |
||||
#include "adc.h" |
||||
#include "oled.h" |
||||
|
||||
// TODO averaging
|
||||
static volatile uint16_t adc_values[4]; |
||||
static volatile uint16_t adc_values_snapshot[4]; |
||||
|
||||
const float r_current_sensor = 98.2f; // Ohm TODO measure
|
||||
|
||||
static struct App { |
||||
float oven_temp; |
||||
float soc_temp; |
||||
float v_sensor; |
||||
float v_current_reference; |
||||
float sensor_current; |
||||
float r_sensor; |
||||
uint16_t wheel; |
||||
bool push; |
||||
} s_app = {}; |
||||
|
||||
#define TSENSE_LOOKUP_LEN 101 |
||||
#define TSENSE_T_STEP 5.0f |
||||
#define TSENSE_T_MIN 0.0f |
||||
#define TSENSE_T_MAX 500.0f |
||||
static const float TSENSE_LOOKUP[TSENSE_LOOKUP_LEN] = { |
||||
100.0f, 101.9527f, 103.9025f, 105.8495f, 107.7935f, 109.7347f, 111.6729f, 113.6083f, 115.5408f, 117.4704f, 119.3971f, 121.321f, |
||||
123.2419f, 125.16f, 127.0751f, 128.9874f, 130.8968f, 132.8033f, 134.7069f, 136.6077f, 138.5055f, 140.4005f, 142.2925f, 144.1817f, |
||||
146.068f, 147.9514f, 149.8319f, 151.7096f, 153.5843f, 155.4562f, 157.3251f, 159.1912f, 161.0544f, 162.9147f, 164.7721f, 166.6267f, |
||||
168.4783f, 170.3271f, 172.1729f, 174.0159f, 175.856f, 177.6932f, 179.5275f, 181.359f, 183.1875f, 185.0132f, 186.8359f, 188.6558f, |
||||
190.4728f, 192.2869f, 194.0981f, 195.9065f, 197.7119f, 199.5145f, 201.3141f, 203.1109f, 204.9048f, 206.6958f, 208.4839f, 210.2692f, |
||||
212.0515f, 213.831f, 215.6075f, 217.3812f, 219.152f, 220.9199f, 222.6849f, 224.4471f, 226.2063f, 227.9627f, 229.7161f, 231.4667f, |
||||
233.2144f, 234.9592f, 236.7011f, 238.4402f, 240.1763f, 241.9096f, 243.6399f, 245.3674f, 247.092f, 248.8137f, 250.5325f, 252.2485f, |
||||
253.9615f, 255.6717f, 257.3789f, 259.0833f, 260.7848f, 262.4834f, 264.1791f, 265.872f, 267.5619f, 269.249f, 270.9331f, 272.6144f, |
||||
274.2928f, 275.9683f, 277.6409f, 279.3107f, 280.9775f |
||||
}; |
||||
|
||||
static float r_to_c(float r){ |
||||
// TODO use binary search.. lol
|
||||
for (int i = 1; i < TSENSE_LOOKUP_LEN; i++) { |
||||
float cur = TSENSE_LOOKUP[i]; |
||||
if (cur >= r) { |
||||
float prev = TSENSE_LOOKUP[i-1]; |
||||
|
||||
float ratio = (r - prev) / (cur - prev); |
||||
return TSENSE_T_MIN + ((float) i + ratio) * TSENSE_T_STEP; |
||||
} |
||||
} |
||||
return TSENSE_T_MAX; |
||||
} |
||||
|
||||
void calculate_analog_values() { |
||||
/* r_pt100, r_ref, internal_temp, v_ref_int */ |
||||
uint16_t refint = adc_values_snapshot[3]; |
||||
const float vrefint = 1.2f; |
||||
float scale = vrefint / (float)refint; |
||||
|
||||
const float avg_slope = 4.3f; |
||||
const float v25 = 1.43f; |
||||
const float v_tsen = (float) adc_values_snapshot[2] * scale; |
||||
|
||||
s_app.soc_temp = (v25 - v_tsen) / avg_slope + 25.f; |
||||
s_app.v_sensor = (float)adc_values_snapshot[0] * scale; |
||||
s_app.v_current_reference = (float)(adc_values_snapshot[1] - adc_values_snapshot[0]) * scale; |
||||
|
||||
s_app.sensor_current = s_app.v_current_reference / r_current_sensor; |
||||
s_app.r_sensor = s_app.v_sensor / s_app.sensor_current; |
||||
s_app.oven_temp = r_to_c(s_app.r_sensor); |
||||
} |
||||
|
||||
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) |
||||
{ |
||||
// notify
|
||||
memcpy((void*) adc_values_snapshot, (const void*) adc_values, 8); |
||||
} |
||||
|
||||
static void hw_init() |
||||
{ |
||||
/* Start periodic reading of the ADC channels */ |
||||
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)(void*)adc_values, 4); |
||||
|
||||
/* Enable the rotary encoder */ |
||||
HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL); |
||||
|
||||
/* Enable buzzer PWM */ |
||||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); |
||||
|
||||
/* Prepare the framebuffer and OLED interface */ |
||||
oled_init(); |
||||
fb_clear(); |
||||
} |
||||
|
||||
void app_main_task(void *argument) |
||||
{ |
||||
hw_init(); |
||||
|
||||
/* Infinite loop */ |
||||
bool invert = 0; |
||||
for(;;) |
||||
{ |
||||
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); |
||||
|
||||
s_app.wheel = htim4.Instance->CNT; |
||||
s_app.push = 0 == HAL_GPIO_ReadPin(KNOB_PUSH_GPIO_Port, KNOB_PUSH_Pin); |
||||
|
||||
calculate_analog_values(); |
||||
|
||||
printf("Knob %d (P=%d), ADC %d %d %d %d, oven %.2f°C, soc %.2f°C, vPt %.3fV, v_iref %.3f, I %.6fA, rPt %.2f Ohm \r\n", |
||||
(int) s_app.wheel, s_app.push, |
||||
adc_values[0], adc_values[1], adc_values[2], adc_values[3], |
||||
|
||||
s_app.oven_temp, |
||||
s_app.soc_temp, |
||||
s_app.v_sensor, |
||||
s_app.v_current_reference, |
||||
s_app.sensor_current, |
||||
s_app.r_sensor |
||||
); |
||||
|
||||
invert = !invert; |
||||
|
||||
fb_clear(); |
||||
if (s_app.push) { |
||||
fb_rect(s_app.wheel % FBW, 0, 15, 15, 1); |
||||
} else { |
||||
if (invert) { |
||||
fb_frame(s_app.wheel % FBW, 0, 15, 15, 2, 1); |
||||
} else { |
||||
fb_frame(s_app.wheel % FBW, 0, 15, 15, 1, 1); |
||||
} |
||||
} |
||||
fb_blit(); |
||||
|
||||
vTaskDelay(250); |
||||
|
||||
// beep
|
||||
htim2.Instance->ARR = 12000 + (int16_t)s_app.wheel * 100; |
||||
htim2.Instance->CCR1 = htim2.Instance->ARR/2; |
||||
vTaskDelay(50); |
||||
htim2.Instance->ARR = 0; |
||||
|
||||
// feed dogs
|
||||
HAL_IWDG_Refresh(&hiwdg); |
||||
} |
||||
} |
@ -0,0 +1,120 @@ |
||||
/* USER CODE BEGIN Header */ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file rtc.c |
||||
* @brief This file provides code for the configuration |
||||
* of the RTC instances. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* Copyright (c) 2023 STMicroelectronics. |
||||
* All rights reserved. |
||||
* |
||||
* This software is licensed under terms that can be found in the LICENSE file |
||||
* in the root directory of this software component. |
||||
* If no LICENSE file comes with this software, it is provided AS-IS. |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
/* USER CODE END Header */ |
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "rtc.h" |
||||
|
||||
/* USER CODE BEGIN 0 */ |
||||
|
||||
/* USER CODE END 0 */ |
||||
|
||||
RTC_HandleTypeDef hrtc; |
||||
|
||||
/* RTC init function */ |
||||
void MX_RTC_Init(void) |
||||
{ |
||||
|
||||
/* USER CODE BEGIN RTC_Init 0 */ |
||||
|
||||
/* USER CODE END RTC_Init 0 */ |
||||
|
||||
RTC_TimeTypeDef sTime = {0}; |
||||
RTC_DateTypeDef DateToUpdate = {0}; |
||||
|
||||
/* USER CODE BEGIN RTC_Init 1 */ |
||||
|
||||
/* USER CODE END RTC_Init 1 */ |
||||
|
||||
/** Initialize RTC Only
|
||||
*/ |
||||
hrtc.Instance = RTC; |
||||
hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; |
||||
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE; |
||||
if (HAL_RTC_Init(&hrtc) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
|
||||
/* USER CODE BEGIN Check_RTC_BKUP */ |
||||
|
||||
/* USER CODE END Check_RTC_BKUP */ |
||||
|
||||
/** Initialize RTC and set the Time and Date
|
||||
*/ |
||||
sTime.Hours = 0x0; |
||||
sTime.Minutes = 0x0; |
||||
sTime.Seconds = 0x0; |
||||
|
||||
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY; |
||||
DateToUpdate.Month = RTC_MONTH_JANUARY; |
||||
DateToUpdate.Date = 0x1; |
||||
DateToUpdate.Year = 0x0; |
||||
|
||||
if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK) |
||||
{ |
||||
Error_Handler(); |
||||
} |
||||
/* USER CODE BEGIN RTC_Init 2 */ |
||||
|
||||
/* USER CODE END RTC_Init 2 */ |
||||
|
||||
} |
||||
|
||||
void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) |
||||
{ |
||||
|
||||
if(rtcHandle->Instance==RTC) |
||||
{ |
||||
/* USER CODE BEGIN RTC_MspInit 0 */ |
||||
|
||||
/* USER CODE END RTC_MspInit 0 */ |
||||
HAL_PWR_EnableBkUpAccess(); |
||||
/* Enable BKP CLK enable for backup registers */ |
||||
__HAL_RCC_BKP_CLK_ENABLE(); |
||||
/* RTC clock enable */ |
||||
__HAL_RCC_RTC_ENABLE(); |
||||
/* USER CODE BEGIN RTC_MspInit 1 */ |
||||
|
||||
/* USER CODE END RTC_MspInit 1 */ |
||||
} |
||||
} |
||||
|
||||
void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) |
||||
{ |
||||
|
||||
if(rtcHandle->Instance==RTC) |
||||
{ |
||||
/* USER CODE BEGIN RTC_MspDeInit 0 */ |
||||
|
||||
/* USER CODE END RTC_MspDeInit 0 */ |
||||
/* Peripheral clock disable */ |
||||
__HAL_RCC_RTC_DISABLE(); |
||||
/* USER CODE BEGIN RTC_MspDeInit 1 */ |
||||
|
||||
/* USER CODE END RTC_MspDeInit 1 */ |
||||
} |
||||
} |
||||
|
||||
/* USER CODE BEGIN 1 */ |
||||
|
||||
/* USER CODE END 1 */ |
@ -0,0 +1,607 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_hal_rtc.h |
||||
* @author MCD Application Team |
||||
* @brief Header file of RTC HAL module. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F1xx_HAL_RTC_H |
||||
#define __STM32F1xx_HAL_RTC_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal_def.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup RTC
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup RTC_Private_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
#define IS_RTC_ASYNCH_PREDIV(PREDIV) (((PREDIV) <= 0xFFFFFU) || ((PREDIV) == RTC_AUTO_1_SECOND)) |
||||
#define IS_RTC_HOUR24(HOUR) ((HOUR) <= 23U) |
||||
#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= 59U) |
||||
#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= 59U) |
||||
#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_FORMAT_BIN) || ((FORMAT) == RTC_FORMAT_BCD)) |
||||
#define IS_RTC_YEAR(YEAR) ((YEAR) <= 99U) |
||||
#define IS_RTC_MONTH(MONTH) (((MONTH) >= 1U) && ((MONTH) <= 12U)) |
||||
#define IS_RTC_DATE(DATE) (((DATE) >= 1U) && ((DATE) <= 31U)) |
||||
#define IS_RTC_ALARM(ALARM) ((ALARM) == RTC_ALARM_A) |
||||
#define IS_RTC_CALIB_OUTPUT(__OUTPUT__) (((__OUTPUT__) == RTC_OUTPUTSOURCE_NONE) || \ |
||||
((__OUTPUT__) == RTC_OUTPUTSOURCE_CALIBCLOCK) || \
|
||||
((__OUTPUT__) == RTC_OUTPUTSOURCE_ALARM) || \
|
||||
((__OUTPUT__) == RTC_OUTPUTSOURCE_SECOND)) |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @addtogroup RTC_Private_Constants
|
||||
* @{ |
||||
*/ |
||||
/** @defgroup RTC_Timeout_Value Default Timeout Value
|
||||
* @{ |
||||
*/ |
||||
#define RTC_TIMEOUT_VALUE 1000U |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_EXTI_Line_Event RTC EXTI Line event
|
||||
* @{ |
||||
*/ |
||||
#define RTC_EXTI_LINE_ALARM_EVENT ((uint32_t)EXTI_IMR_MR17) /*!< External interrupt line 17 Connected to the RTC Alarm event */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/** @defgroup RTC_Exported_Types RTC Exported Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @brief RTC Time structure definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint8_t Hours; /*!< Specifies the RTC Time Hour.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 23 */ |
||||
|
||||
uint8_t Minutes; /*!< Specifies the RTC Time Minutes.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ |
||||
|
||||
uint8_t Seconds; /*!< Specifies the RTC Time Seconds.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ |
||||
|
||||
} RTC_TimeTypeDef; |
||||
|
||||
/**
|
||||
* @brief RTC Alarm structure definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
RTC_TimeTypeDef AlarmTime; /*!< Specifies the RTC Alarm Time members */ |
||||
|
||||
uint32_t Alarm; /*!< Specifies the alarm ID (only 1 alarm ID for STM32F1).
|
||||
This parameter can be a value of @ref RTC_Alarms_Definitions */ |
||||
} RTC_AlarmTypeDef; |
||||
|
||||
/**
|
||||
* @brief HAL State structures definition |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
HAL_RTC_STATE_RESET = 0x00U, /*!< RTC not yet initialized or disabled */ |
||||
HAL_RTC_STATE_READY = 0x01U, /*!< RTC initialized and ready for use */ |
||||
HAL_RTC_STATE_BUSY = 0x02U, /*!< RTC process is ongoing */ |
||||
HAL_RTC_STATE_TIMEOUT = 0x03U, /*!< RTC timeout state */ |
||||
HAL_RTC_STATE_ERROR = 0x04U /*!< RTC error state */ |
||||
|
||||
} HAL_RTCStateTypeDef; |
||||
|
||||
/**
|
||||
* @brief RTC Configuration Structure definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint32_t AsynchPrediv; /*!< Specifies the RTC Asynchronous Predivider value.
|
||||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFFF or RTC_AUTO_1_SECOND |
||||
If RTC_AUTO_1_SECOND is selected, AsynchPrediv will be set automatically to get 1sec timebase */ |
||||
|
||||
uint32_t OutPut; /*!< Specifies which signal will be routed to the RTC Tamper pin.
|
||||
This parameter can be a value of @ref RTC_output_source_to_output_on_the_Tamper_pin */ |
||||
|
||||
} RTC_InitTypeDef; |
||||
|
||||
/**
|
||||
* @brief RTC Date structure definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint8_t WeekDay; /*!< Specifies the RTC Date WeekDay (not necessary for HAL_RTC_SetDate).
|
||||
This parameter can be a value of @ref RTC_WeekDay_Definitions */ |
||||
|
||||
uint8_t Month; /*!< Specifies the RTC Date Month (in BCD format).
|
||||
This parameter can be a value of @ref RTC_Month_Date_Definitions */ |
||||
|
||||
uint8_t Date; /*!< Specifies the RTC Date.
|
||||
This parameter must be a number between Min_Data = 1 and Max_Data = 31 */ |
||||
|
||||
uint8_t Year; /*!< Specifies the RTC Date Year.
|
||||
This parameter must be a number between Min_Data = 0 and Max_Data = 99 */ |
||||
|
||||
} RTC_DateTypeDef; |
||||
|
||||
/**
|
||||
* @brief Time Handle Structure definition |
||||
*/ |
||||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) |
||||
typedef struct __RTC_HandleTypeDef |
||||
#else |
||||
typedef struct |
||||
#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ |
||||
{ |
||||
RTC_TypeDef *Instance; /*!< Register base address */ |
||||
|
||||
RTC_InitTypeDef Init; /*!< RTC required parameters */ |
||||
|
||||
RTC_DateTypeDef DateToUpdate; /*!< Current date set by user and updated automatically */ |
||||
|
||||
HAL_LockTypeDef Lock; /*!< RTC locking object */ |
||||
|
||||
__IO HAL_RTCStateTypeDef State; /*!< Time communication state */ |
||||
|
||||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) |
||||
void (* AlarmAEventCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Alarm A Event callback */ |
||||
|
||||
void (* Tamper1EventCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Tamper 1 Event callback */ |
||||
|
||||
void (* MspInitCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Msp Init callback */ |
||||
|
||||
void (* MspDeInitCallback)(struct __RTC_HandleTypeDef *hrtc); /*!< RTC Msp DeInit callback */ |
||||
|
||||
#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ |
||||
|
||||
} RTC_HandleTypeDef; |
||||
|
||||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) |
||||
/**
|
||||
* @brief HAL RTC Callback ID enumeration definition |
||||
*/ |
||||
typedef enum |
||||
{ |
||||
HAL_RTC_ALARM_A_EVENT_CB_ID = 0x00u, /*!< RTC Alarm A Event Callback ID */ |
||||
HAL_RTC_TAMPER1_EVENT_CB_ID = 0x04u, /*!< RTC Tamper 1 Callback ID */ |
||||
HAL_RTC_MSPINIT_CB_ID = 0x0Eu, /*!< RTC Msp Init callback ID */ |
||||
HAL_RTC_MSPDEINIT_CB_ID = 0x0Fu /*!< RTC Msp DeInit callback ID */ |
||||
} HAL_RTC_CallbackIDTypeDef; |
||||
|
||||
/**
|
||||
* @brief HAL RTC Callback pointer definition |
||||
*/ |
||||
typedef void (*pRTC_CallbackTypeDef)(RTC_HandleTypeDef *hrtc); /*!< pointer to an RTC callback function */ |
||||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/** @defgroup RTC_Exported_Constants RTC Exported Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup RTC_Automatic_Prediv_1_Second Automatic calculation of prediv for 1sec timebase
|
||||
* @{ |
||||
*/ |
||||
#define RTC_AUTO_1_SECOND 0xFFFFFFFFU |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_Input_parameter_format_definitions Input Parameter Format
|
||||
* @{ |
||||
*/ |
||||
#define RTC_FORMAT_BIN 0x000000000U |
||||
#define RTC_FORMAT_BCD 0x000000001U |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_Month_Date_Definitions Month Definitions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* Coded in BCD format */ |
||||
#define RTC_MONTH_JANUARY ((uint8_t)0x01) |
||||
#define RTC_MONTH_FEBRUARY ((uint8_t)0x02) |
||||
#define RTC_MONTH_MARCH ((uint8_t)0x03) |
||||
#define RTC_MONTH_APRIL ((uint8_t)0x04) |
||||
#define RTC_MONTH_MAY ((uint8_t)0x05) |
||||
#define RTC_MONTH_JUNE ((uint8_t)0x06) |
||||
#define RTC_MONTH_JULY ((uint8_t)0x07) |
||||
#define RTC_MONTH_AUGUST ((uint8_t)0x08) |
||||
#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09) |
||||
#define RTC_MONTH_OCTOBER ((uint8_t)0x10) |
||||
#define RTC_MONTH_NOVEMBER ((uint8_t)0x11) |
||||
#define RTC_MONTH_DECEMBER ((uint8_t)0x12) |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_WeekDay_Definitions WeekDay Definitions
|
||||
* @{ |
||||
*/ |
||||
#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01) |
||||
#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02) |
||||
#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03) |
||||
#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04) |
||||
#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05) |
||||
#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06) |
||||
#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x00) |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_Alarms_Definitions Alarms Definitions
|
||||
* @{ |
||||
*/ |
||||
#define RTC_ALARM_A 0U /*!< Specify alarm ID (mainly for legacy purposes) */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
|
||||
/** @defgroup RTC_output_source_to_output_on_the_Tamper_pin Output source to output on the Tamper pin
|
||||
* @{ |
||||
*/ |
||||
|
||||
#define RTC_OUTPUTSOURCE_NONE 0x00000000U /*!< No output on the TAMPER pin */ |
||||
#define RTC_OUTPUTSOURCE_CALIBCLOCK BKP_RTCCR_CCO /*!< RTC clock with a frequency divided by 64 on the TAMPER pin */ |
||||
#define RTC_OUTPUTSOURCE_ALARM BKP_RTCCR_ASOE /*!< Alarm pulse signal on the TAMPER pin */ |
||||
#define RTC_OUTPUTSOURCE_SECOND (BKP_RTCCR_ASOS | BKP_RTCCR_ASOE) /*!< Second pulse signal on the TAMPER pin */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_Interrupts_Definitions Interrupts Definitions
|
||||
* @{ |
||||
*/ |
||||
#define RTC_IT_OW RTC_CRH_OWIE /*!< Overflow interrupt */ |
||||
#define RTC_IT_ALRA RTC_CRH_ALRIE /*!< Alarm interrupt */ |
||||
#define RTC_IT_SEC RTC_CRH_SECIE /*!< Second interrupt */ |
||||
#define RTC_IT_TAMP1 BKP_CSR_TPIE /*!< TAMPER Pin interrupt enable */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTC_Flags_Definitions Flags Definitions
|
||||
* @{ |
||||
*/ |
||||
#define RTC_FLAG_RTOFF RTC_CRL_RTOFF /*!< RTC Operation OFF flag */ |
||||
#define RTC_FLAG_RSF RTC_CRL_RSF /*!< Registers Synchronized flag */ |
||||
#define RTC_FLAG_OW RTC_CRL_OWF /*!< Overflow flag */ |
||||
#define RTC_FLAG_ALRAF RTC_CRL_ALRF /*!< Alarm flag */ |
||||
#define RTC_FLAG_SEC RTC_CRL_SECF /*!< Second flag */ |
||||
#define RTC_FLAG_TAMP1F BKP_CSR_TEF /*!< Tamper Interrupt Flag */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
/** @defgroup RTC_Exported_macros RTC Exported Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @brief Reset RTC handle state
|
||||
* @param __HANDLE__: RTC handle. |
||||
* @retval None |
||||
*/ |
||||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) |
||||
#define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) do{\ |
||||
(__HANDLE__)->State = HAL_RTC_STATE_RESET;\
|
||||
(__HANDLE__)->MspInitCallback = NULL;\
|
||||
(__HANDLE__)->MspDeInitCallback = NULL;\
|
||||
}while(0u) |
||||
#else |
||||
#define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RTC_STATE_RESET) |
||||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ |
||||
|
||||
/**
|
||||
* @brief Disable the write protection for RTC registers. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CRL, RTC_CRL_CNF) |
||||
|
||||
/**
|
||||
* @brief Enable the write protection for RTC registers. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CRL, RTC_CRL_CNF) |
||||
|
||||
/**
|
||||
* @brief Enable the RTC Alarm interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be enabled or disabled. |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_ALRA: Alarm A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_ALARM_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Disable the RTC Alarm interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be enabled or disabled. |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_ALRA: Alarm A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_ALARM_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Check whether the specified RTC Alarm interrupt has been enabled or not. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to be checked |
||||
* This parameter can be: |
||||
* @arg RTC_IT_ALRA: Alarm A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_ALARM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__)))) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Get the selected RTC Alarm's flag status. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_ALRAF |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_ALARM_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Check whether the specified RTC Alarm interrupt has occurred or not. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to check. |
||||
* This parameter can be: |
||||
* @arg RTC_IT_ALRA: Alarm A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __INTERRUPT__) (((((__HANDLE__)->Instance->CRL) & (__INTERRUPT__)) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Clear the RTC Alarm's pending flags. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_ALRAF |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) &= ~(__FLAG__) |
||||
|
||||
/**
|
||||
* @brief Enable interrupt on ALARM Exti Line 17. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
/**
|
||||
* @brief Disable interrupt on ALARM Exti Line 17. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
/**
|
||||
* @brief Enable event on ALARM Exti Line 17. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
/**
|
||||
* @brief Disable event on ALARM Exti Line 17. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
|
||||
/**
|
||||
* @brief ALARM EXTI line configuration: set falling edge trigger. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
|
||||
/**
|
||||
* @brief Disable the ALARM Extended Interrupt Falling Trigger. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
|
||||
/**
|
||||
* @brief ALARM EXTI line configuration: set rising edge trigger. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
/**
|
||||
* @brief Disable the ALARM Extended Interrupt Rising Trigger. |
||||
* This parameter can be: |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, RTC_EXTI_LINE_ALARM_EVENT) |
||||
|
||||
/**
|
||||
* @brief ALARM EXTI line configuration: set rising & falling edge trigger. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_FALLING_EDGE() \ |
||||
do{ \
|
||||
__HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE(); \
|
||||
__HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE(); \
|
||||
} while(0U) |
||||
|
||||
/**
|
||||
* @brief Disable the ALARM Extended Interrupt Rising & Falling Trigger. |
||||
* This parameter can be: |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_FALLING_EDGE() \ |
||||
do{ \
|
||||
__HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE(); \
|
||||
__HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE(); \
|
||||
} while(0U) |
||||
|
||||
/**
|
||||
* @brief Check whether the specified ALARM EXTI interrupt flag is set or not. |
||||
* @retval EXTI ALARM Line Status. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_GET_FLAG() (EXTI->PR & (RTC_EXTI_LINE_ALARM_EVENT)) |
||||
|
||||
/**
|
||||
* @brief Clear the ALARM EXTI flag. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() (EXTI->PR = (RTC_EXTI_LINE_ALARM_EVENT)) |
||||
|
||||
/**
|
||||
* @brief Generate a Software interrupt on selected EXTI line. |
||||
* @retval None. |
||||
*/ |
||||
#define __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, RTC_EXTI_LINE_ALARM_EVENT) |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Include RTC HAL Extension module */ |
||||
#include "stm32f1xx_hal_rtc_ex.h" |
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @addtogroup RTC_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
|
||||
/* Initialization and de-initialization functions ****************************/ |
||||
/** @addtogroup RTC_Exported_Functions_Group1
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc); |
||||
HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc); |
||||
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc); |
||||
void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc); |
||||
|
||||
/* Callbacks Register/UnRegister functions ***********************************/ |
||||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) |
||||
HAL_StatusTypeDef HAL_RTC_RegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID, pRTC_CallbackTypeDef pCallback); |
||||
HAL_StatusTypeDef HAL_RTC_UnRegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID); |
||||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* RTC Time and Date functions ************************************************/ |
||||
/** @addtogroup RTC_Exported_Functions_Group2
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); |
||||
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); |
||||
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); |
||||
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* RTC Alarm functions ********************************************************/ |
||||
/** @addtogroup RTC_Exported_Functions_Group3
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); |
||||
HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); |
||||
HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm); |
||||
HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format); |
||||
void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc); |
||||
HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout); |
||||
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Peripheral State functions *************************************************/ |
||||
/** @addtogroup RTC_Exported_Functions_Group4
|
||||
* @{ |
||||
*/ |
||||
HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Peripheral Control functions ***********************************************/ |
||||
/** @addtogroup RTC_Exported_Functions_Group5
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32F1xx_HAL_RTC_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@ -0,0 +1,412 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_hal_rtc_ex.h |
||||
* @author MCD Application Team |
||||
* @brief Header file of RTC HAL Extension module. |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/ |
||||
#ifndef __STM32F1xx_HAL_RTC_EX_H |
||||
#define __STM32F1xx_HAL_RTC_EX_H |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal_def.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup RTCEx
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @addtogroup RTCEx_Private_Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Alias_For_Legacy Alias define maintained for legacy
|
||||
* @{ |
||||
*/ |
||||
#define HAL_RTCEx_TamperTimeStampIRQHandler HAL_RTCEx_TamperIRQHandler |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_IS_RTC_Definitions Private macros to check input parameters
|
||||
* @{ |
||||
*/ |
||||
#define IS_RTC_TAMPER(__TAMPER__) ((__TAMPER__) == RTC_TAMPER_1) |
||||
|
||||
#define IS_RTC_TAMPER_TRIGGER(__TRIGGER__) (((__TRIGGER__) == RTC_TAMPERTRIGGER_LOWLEVEL) || \ |
||||
((__TRIGGER__) == RTC_TAMPERTRIGGER_HIGHLEVEL)) |
||||
|
||||
#if RTC_BKP_NUMBER > 10U |
||||
#define IS_RTC_BKP(BKP) (((BKP) <= (uint32_t)RTC_BKP_DR10) || (((BKP) >= (uint32_t)RTC_BKP_DR11) && ((BKP) <= (uint32_t)RTC_BKP_DR42))) |
||||
#else |
||||
#define IS_RTC_BKP(BKP) ((BKP) <= (uint32_t)RTC_BKP_NUMBER) |
||||
#endif |
||||
#define IS_RTC_SMOOTH_CALIB_MINUS(__VALUE__) ((__VALUE__) <= 0x0000007FU) |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported types ------------------------------------------------------------*/ |
||||
/** @defgroup RTCEx_Exported_Types RTCEx Exported Types
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @brief RTC Tamper structure definition |
||||
*/ |
||||
typedef struct |
||||
{ |
||||
uint32_t Tamper; /*!< Specifies the Tamper Pin.
|
||||
This parameter can be a value of @ref RTCEx_Tamper_Pins_Definitions */ |
||||
|
||||
uint32_t Trigger; /*!< Specifies the Tamper Trigger.
|
||||
This parameter can be a value of @ref RTCEx_Tamper_Trigger_Definitions */ |
||||
|
||||
} RTC_TamperTypeDef; |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported constants --------------------------------------------------------*/ |
||||
/** @defgroup RTCEx_Exported_Constants RTCEx Exported Constants
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Tamper_Pins_Definitions Tamper Pins Definitions
|
||||
* @{ |
||||
*/ |
||||
#define RTC_TAMPER_1 BKP_CR_TPE /*!< Select tamper to be enabled (mainly for legacy purposes) */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Tamper_Trigger_Definitions Tamper Trigger Definitions
|
||||
* @{ |
||||
*/ |
||||
#define RTC_TAMPERTRIGGER_LOWLEVEL BKP_CR_TPAL /*!< A high level on the TAMPER pin resets all data backup registers (if TPE bit is set) */ |
||||
#define RTC_TAMPERTRIGGER_HIGHLEVEL 0x00000000U /*!< A low level on the TAMPER pin resets all data backup registers (if TPE bit is set) */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Backup_Registers_Definitions Backup Registers Definitions
|
||||
* @{ |
||||
*/ |
||||
#if RTC_BKP_NUMBER > 0U |
||||
#define RTC_BKP_DR1 0x00000001U |
||||
#define RTC_BKP_DR2 0x00000002U |
||||
#define RTC_BKP_DR3 0x00000003U |
||||
#define RTC_BKP_DR4 0x00000004U |
||||
#define RTC_BKP_DR5 0x00000005U |
||||
#define RTC_BKP_DR6 0x00000006U |
||||
#define RTC_BKP_DR7 0x00000007U |
||||
#define RTC_BKP_DR8 0x00000008U |
||||
#define RTC_BKP_DR9 0x00000009U |
||||
#define RTC_BKP_DR10 0x0000000AU |
||||
#endif /* RTC_BKP_NUMBER > 0 */ |
||||
|
||||
#if RTC_BKP_NUMBER > 10U |
||||
#define RTC_BKP_DR11 0x00000010U |
||||
#define RTC_BKP_DR12 0x00000011U |
||||
#define RTC_BKP_DR13 0x00000012U |
||||
#define RTC_BKP_DR14 0x00000013U |
||||
#define RTC_BKP_DR15 0x00000014U |
||||
#define RTC_BKP_DR16 0x00000015U |
||||
#define RTC_BKP_DR17 0x00000016U |
||||
#define RTC_BKP_DR18 0x00000017U |
||||
#define RTC_BKP_DR19 0x00000018U |
||||
#define RTC_BKP_DR20 0x00000019U |
||||
#define RTC_BKP_DR21 0x0000001AU |
||||
#define RTC_BKP_DR22 0x0000001BU |
||||
#define RTC_BKP_DR23 0x0000001CU |
||||
#define RTC_BKP_DR24 0x0000001DU |
||||
#define RTC_BKP_DR25 0x0000001EU |
||||
#define RTC_BKP_DR26 0x0000001FU |
||||
#define RTC_BKP_DR27 0x00000020U |
||||
#define RTC_BKP_DR28 0x00000021U |
||||
#define RTC_BKP_DR29 0x00000022U |
||||
#define RTC_BKP_DR30 0x00000023U |
||||
#define RTC_BKP_DR31 0x00000024U |
||||
#define RTC_BKP_DR32 0x00000025U |
||||
#define RTC_BKP_DR33 0x00000026U |
||||
#define RTC_BKP_DR34 0x00000027U |
||||
#define RTC_BKP_DR35 0x00000028U |
||||
#define RTC_BKP_DR36 0x00000029U |
||||
#define RTC_BKP_DR37 0x0000002AU |
||||
#define RTC_BKP_DR38 0x0000002BU |
||||
#define RTC_BKP_DR39 0x0000002CU |
||||
#define RTC_BKP_DR40 0x0000002DU |
||||
#define RTC_BKP_DR41 0x0000002EU |
||||
#define RTC_BKP_DR42 0x0000002FU |
||||
#endif /* RTC_BKP_NUMBER > 10 */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported macro ------------------------------------------------------------*/ |
||||
/** @defgroup RTCEx_Exported_Macros RTCEx Exported Macros
|
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Enable the RTC Tamper interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be enabled |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_TAMP1: Tamper A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_TAMPER_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT(BKP->CSR, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Disable the RTC Tamper interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be disabled. |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_TAMP1: Tamper A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_TAMPER_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT(BKP->CSR, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Check whether the specified RTC Tamper interrupt has been enabled or not. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be checked. |
||||
* This parameter can be: |
||||
* @arg RTC_IT_TAMP1 |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_TAMPER_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((BKP->CSR) & ((__INTERRUPT__))) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Get the selected RTC Tamper's flag status. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Tamper Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_TAMP1F |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_TAMPER_GET_FLAG(__HANDLE__, __FLAG__) ((((BKP->CSR) & (__FLAG__)) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Get the selected RTC Tamper's flag status. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Tamper interrupt sources to be checked. |
||||
* This parameter can be: |
||||
* @arg RTC_IT_TAMP1 |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_TAMPER_GET_IT(__HANDLE__, __INTERRUPT__) ((((BKP->CSR) & (BKP_CSR_TEF)) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Clear the RTC Tamper's pending flags. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Tamper Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_TAMP1F |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_TAMPER_CLEAR_FLAG(__HANDLE__, __FLAG__) SET_BIT(BKP->CSR, BKP_CSR_CTE | BKP_CSR_CTI) |
||||
|
||||
/**
|
||||
* @brief Enable the RTC Second interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Second interrupt sources to be enabled |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_SEC: Second A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_SECOND_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Disable the RTC Second interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Second interrupt sources to be disabled. |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_SEC: Second A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_SECOND_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Check whether the specified RTC Second interrupt has occurred or not. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Second interrupt sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_IT_SEC: Second A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_SECOND_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__)))) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Get the selected RTC Second's flag status. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Second Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_SEC |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_SECOND_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Clear the RTC Second's pending flags. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Second Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_SEC |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_SECOND_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) &= ~(__FLAG__) |
||||
|
||||
/**
|
||||
* @brief Enable the RTC Overflow interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be enabled |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_OW: Overflow A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_OVERFLOW_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Disable the RTC Overflow interrupt. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be disabled. |
||||
* This parameter can be any combination of the following values: |
||||
* @arg RTC_IT_OW: Overflow A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_OVERFLOW_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CRH, (__INTERRUPT__)) |
||||
|
||||
/**
|
||||
* @brief Check whether the specified RTC Overflow interrupt has occurred or not. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __INTERRUPT__: specifies the RTC Overflow interrupt sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_IT_OW: Overflow A interrupt |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_OVERFLOW_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((__HANDLE__)->Instance->CRH)& ((__INTERRUPT__))) ) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Get the selected RTC Overflow's flag status. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Overflow Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_OW |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_OVERFLOW_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->CRL) & (__FLAG__)) != RESET)? SET : RESET) |
||||
|
||||
/**
|
||||
* @brief Clear the RTC Overflow's pending flags. |
||||
* @param __HANDLE__: specifies the RTC handle. |
||||
* @param __FLAG__: specifies the RTC Overflow Flag sources to be enabled or disabled. |
||||
* This parameter can be: |
||||
* @arg RTC_FLAG_OW |
||||
* @retval None |
||||
*/ |
||||
#define __HAL_RTC_OVERFLOW_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CRL) = ~(__FLAG__) |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Exported functions --------------------------------------------------------*/ |
||||
/** @addtogroup RTCEx_Exported_Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/* RTC Tamper functions *****************************************/ |
||||
/** @addtogroup RTCEx_Exported_Functions_Group1
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper); |
||||
HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper); |
||||
HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper); |
||||
void HAL_RTCEx_TamperIRQHandler(RTC_HandleTypeDef *hrtc); |
||||
void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc); |
||||
HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* RTC Second functions *****************************************/ |
||||
/** @addtogroup RTCEx_Exported_Functions_Group2
|
||||
* @{ |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc); |
||||
HAL_StatusTypeDef HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc); |
||||
void HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc); |
||||
void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc); |
||||
void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc); |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Extension Control functions ************************************************/ |
||||
/** @addtogroup RTCEx_Exported_Functions_Group3
|
||||
* @{ |
||||
*/ |
||||
void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data); |
||||
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister); |
||||
|
||||
HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue); |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __STM32F1xx_HAL_RTC_EX_H */ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,579 @@ |
||||
/**
|
||||
****************************************************************************** |
||||
* @file stm32f1xx_hal_rtc_ex.c |
||||
* @author MCD Application Team |
||||
* @brief Extended RTC HAL module driver. |
||||
* This file provides firmware functions to manage the following |
||||
* functionalities of the Real Time Clock (RTC) Extension peripheral: |
||||
* + RTC Tamper functions |
||||
* + Extension Control functions |
||||
* + Extension RTC features functions |
||||
* |
||||
****************************************************************************** |
||||
* @attention |
||||
* |
||||
* <h2><center>© Copyright (c) 2016 STMicroelectronics. |
||||
* All rights reserved.</center></h2> |
||||
* |
||||
* This software component is licensed by ST under BSD 3-Clause license, |
||||
* the "License"; You may not use this file except in compliance with the |
||||
* License. You may obtain a copy of the License at: |
||||
* opensource.org/licenses/BSD-3-Clause |
||||
* |
||||
****************************************************************************** |
||||
*/ |
||||
|
||||
/* Includes ------------------------------------------------------------------*/ |
||||
#include "stm32f1xx_hal.h" |
||||
|
||||
/** @addtogroup STM32F1xx_HAL_Driver
|
||||
* @{ |
||||
*/ |
||||
|
||||
#ifdef HAL_RTC_MODULE_ENABLED |
||||
|
||||
/** @defgroup RTCEx RTCEx
|
||||
* @brief RTC Extended HAL module driver |
||||
* @{ |
||||
*/ |
||||
|
||||
/* Private typedef -----------------------------------------------------------*/ |
||||
/* Private define ------------------------------------------------------------*/ |
||||
/* Private macro -------------------------------------------------------------*/ |
||||
/** @defgroup RTCEx_Private_Macros RTCEx Private Macros
|
||||
* @{ |
||||
*/ |
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/* Private variables ---------------------------------------------------------*/ |
||||
/* Private function prototypes -----------------------------------------------*/ |
||||
/* Private functions ---------------------------------------------------------*/ |
||||
|
||||
/** @defgroup RTCEx_Exported_Functions RTCEx Exported Functions
|
||||
* @{ |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Exported_Functions_Group1 RTC Tamper functions
|
||||
* @brief RTC Tamper functions |
||||
* |
||||
@verbatim |
||||
=============================================================================== |
||||
##### RTC Tamper functions ##### |
||||
=============================================================================== |
||||
|
||||
[..] This section provides functions allowing to configure Tamper feature |
||||
|
||||
@endverbatim |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Sets Tamper |
||||
* @note By calling this API we disable the tamper interrupt for all tampers. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @param sTamper: Pointer to Tamper Structure. |
||||
* @note Tamper can be enabled only if ASOE and CCO bit are reset |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper) |
||||
{ |
||||
/* Check input parameters */ |
||||
if ((hrtc == NULL) || (sTamper == NULL)) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
/* Check the parameters */ |
||||
assert_param(IS_RTC_TAMPER(sTamper->Tamper)); |
||||
assert_param(IS_RTC_TAMPER_TRIGGER(sTamper->Trigger)); |
||||
|
||||
/* Process Locked */ |
||||
__HAL_LOCK(hrtc); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_BUSY; |
||||
|
||||
if (HAL_IS_BIT_SET(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE))) |
||||
{ |
||||
hrtc->State = HAL_RTC_STATE_ERROR; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
MODIFY_REG(BKP->CR, (BKP_CR_TPE | BKP_CR_TPAL), (sTamper->Tamper | (sTamper->Trigger))); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Sets Tamper with interrupt. |
||||
* @note By calling this API we force the tamper interrupt for all tampers. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @param sTamper: Pointer to RTC Tamper. |
||||
* @note Tamper can be enabled only if ASOE and CCO bit are reset |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_SetTamper_IT(RTC_HandleTypeDef *hrtc, RTC_TamperTypeDef *sTamper) |
||||
{ |
||||
/* Check input parameters */ |
||||
if ((hrtc == NULL) || (sTamper == NULL)) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
/* Check the parameters */ |
||||
assert_param(IS_RTC_TAMPER(sTamper->Tamper)); |
||||
assert_param(IS_RTC_TAMPER_TRIGGER(sTamper->Trigger)); |
||||
|
||||
/* Process Locked */ |
||||
__HAL_LOCK(hrtc); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_BUSY; |
||||
|
||||
if (HAL_IS_BIT_SET(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE))) |
||||
{ |
||||
hrtc->State = HAL_RTC_STATE_ERROR; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
MODIFY_REG(BKP->CR, (BKP_CR_TPE | BKP_CR_TPAL), (sTamper->Tamper | (sTamper->Trigger))); |
||||
|
||||
/* Configure the Tamper Interrupt in the BKP->CSR */ |
||||
__HAL_RTC_TAMPER_ENABLE_IT(hrtc, RTC_IT_TAMP1); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Deactivates Tamper. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @param Tamper: Selected tamper pin. |
||||
* This parameter can be a value of @ref RTCEx_Tamper_Pins_Definitions |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_DeactivateTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper) |
||||
{ |
||||
/* Check input parameters */ |
||||
if (hrtc == NULL) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(Tamper); |
||||
|
||||
assert_param(IS_RTC_TAMPER(Tamper)); |
||||
|
||||
/* Process Locked */ |
||||
__HAL_LOCK(hrtc); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_BUSY; |
||||
|
||||
/* Disable the selected Tamper pin */ |
||||
CLEAR_BIT(BKP->CR, BKP_CR_TPE); |
||||
|
||||
/* Disable the Tamper Interrupt in the BKP->CSR */ |
||||
/* Configure the Tamper Interrupt in the BKP->CSR */ |
||||
__HAL_RTC_TAMPER_DISABLE_IT(hrtc, RTC_IT_TAMP1); |
||||
|
||||
/* Clear the Tamper interrupt pending bit */ |
||||
__HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP1F); |
||||
SET_BIT(BKP->CSR, BKP_CSR_CTE); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Tamper interrupt request. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval None |
||||
*/ |
||||
void HAL_RTCEx_TamperIRQHandler(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
/* Get the status of the Interrupt */ |
||||
if (__HAL_RTC_TAMPER_GET_IT_SOURCE(hrtc, RTC_IT_TAMP1)) |
||||
{ |
||||
/* Get the TAMPER Interrupt enable bit and pending bit */ |
||||
if (__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP1F) != (uint32_t)RESET) |
||||
{ |
||||
/* Tamper callback */ |
||||
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) |
||||
hrtc->Tamper1EventCallback(hrtc); |
||||
#else |
||||
HAL_RTCEx_Tamper1EventCallback(hrtc); |
||||
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ |
||||
|
||||
/* Clear the Tamper interrupt pending bit */ |
||||
__HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP1F); |
||||
} |
||||
} |
||||
|
||||
/* Change RTC state */ |
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Tamper 1 callback. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval None |
||||
*/ |
||||
__weak void HAL_RTCEx_Tamper1EventCallback(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(hrtc); |
||||
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||
the HAL_RTCEx_Tamper1EventCallback could be implemented in the user file |
||||
*/ |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles Tamper1 Polling. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @param Timeout: Timeout duration |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_PollForTamper1Event(RTC_HandleTypeDef *hrtc, uint32_t Timeout) |
||||
{ |
||||
uint32_t tickstart = HAL_GetTick(); |
||||
|
||||
/* Check input parameters */ |
||||
if (hrtc == NULL) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
/* Get the status of the Interrupt */ |
||||
while (__HAL_RTC_TAMPER_GET_FLAG(hrtc, RTC_FLAG_TAMP1F) == RESET) |
||||
{ |
||||
if (Timeout != HAL_MAX_DELAY) |
||||
{ |
||||
if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) |
||||
{ |
||||
hrtc->State = HAL_RTC_STATE_TIMEOUT; |
||||
return HAL_TIMEOUT; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/* Clear the Tamper Flag */ |
||||
__HAL_RTC_TAMPER_CLEAR_FLAG(hrtc, RTC_FLAG_TAMP1F); |
||||
|
||||
/* Change RTC state */ |
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Exported_Functions_Group2 RTC Second functions
|
||||
* @brief RTC Second functions |
||||
* |
||||
@verbatim |
||||
=============================================================================== |
||||
##### RTC Second functions ##### |
||||
=============================================================================== |
||||
|
||||
[..] This section provides functions implementing second interupt handlers |
||||
|
||||
@endverbatim |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Sets Interrupt for second |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
/* Check input parameters */ |
||||
if (hrtc == NULL) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
/* Process Locked */ |
||||
__HAL_LOCK(hrtc); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_BUSY; |
||||
|
||||
/* Enable Second interuption */ |
||||
__HAL_RTC_SECOND_ENABLE_IT(hrtc, RTC_IT_SEC); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief Deactivates Second. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
/* Check input parameters */ |
||||
if (hrtc == NULL) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
|
||||
/* Process Locked */ |
||||
__HAL_LOCK(hrtc); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_BUSY; |
||||
|
||||
/* Deactivate Second interuption*/ |
||||
__HAL_RTC_SECOND_DISABLE_IT(hrtc, RTC_IT_SEC); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @brief This function handles second interrupt request. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval None |
||||
*/ |
||||
void HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
if (__HAL_RTC_SECOND_GET_IT_SOURCE(hrtc, RTC_IT_SEC)) |
||||
{ |
||||
/* Get the status of the Interrupt */ |
||||
if (__HAL_RTC_SECOND_GET_FLAG(hrtc, RTC_FLAG_SEC)) |
||||
{ |
||||
/* Check if Overrun occurred */ |
||||
if (__HAL_RTC_SECOND_GET_FLAG(hrtc, RTC_FLAG_OW)) |
||||
{ |
||||
/* Second error callback */ |
||||
HAL_RTCEx_RTCEventErrorCallback(hrtc); |
||||
|
||||
/* Clear flag Second */ |
||||
__HAL_RTC_OVERFLOW_CLEAR_FLAG(hrtc, RTC_FLAG_OW); |
||||
|
||||
/* Change RTC state */ |
||||
hrtc->State = HAL_RTC_STATE_ERROR; |
||||
} |
||||
else |
||||
{ |
||||
/* Second callback */ |
||||
HAL_RTCEx_RTCEventCallback(hrtc); |
||||
|
||||
/* Change RTC state */ |
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
} |
||||
|
||||
/* Clear flag Second */ |
||||
__HAL_RTC_SECOND_CLEAR_FLAG(hrtc, RTC_FLAG_SEC); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/**
|
||||
* @brief Second event callback. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval None |
||||
*/ |
||||
__weak void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(hrtc); |
||||
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||
the HAL_RTCEx_RTCEventCallback could be implemented in the user file |
||||
*/ |
||||
} |
||||
|
||||
/**
|
||||
* @brief Second event error callback. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @retval None |
||||
*/ |
||||
__weak void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc) |
||||
{ |
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(hrtc); |
||||
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||
the HAL_RTCEx_RTCEventErrorCallback could be implemented in the user file |
||||
*/ |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/** @defgroup RTCEx_Exported_Functions_Group3 Extended Peripheral Control functions
|
||||
* @brief Extended Peripheral Control functions |
||||
* |
||||
@verbatim |
||||
=============================================================================== |
||||
##### Extension Peripheral Control functions ##### |
||||
=============================================================================== |
||||
[..] |
||||
This subsection provides functions allowing to |
||||
(+) Writes a data in a specified RTC Backup data register |
||||
(+) Read a data in a specified RTC Backup data register |
||||
(+) Sets the Smooth calibration parameters. |
||||
|
||||
@endverbatim |
||||
* @{ |
||||
*/ |
||||
|
||||
/**
|
||||
* @brief Writes a data in a specified RTC Backup data register. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @param BackupRegister: RTC Backup data Register number. |
||||
* This parameter can be: RTC_BKP_DRx where x can be from 1 to 10 (or 42) to |
||||
* specify the register (depending devices). |
||||
* @param Data: Data to be written in the specified RTC Backup data register. |
||||
* @retval None |
||||
*/ |
||||
void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data) |
||||
{ |
||||
uint32_t tmp = 0U; |
||||
|
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(hrtc); |
||||
|
||||
/* Check the parameters */ |
||||
assert_param(IS_RTC_BKP(BackupRegister)); |
||||
|
||||
tmp = (uint32_t)BKP_BASE; |
||||
tmp += (BackupRegister * 4U); |
||||
|
||||
*(__IO uint32_t *) tmp = (Data & BKP_DR1_D); |
||||
} |
||||
|
||||
/**
|
||||
* @brief Reads data from the specified RTC Backup data Register. |
||||
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains |
||||
* the configuration information for RTC. |
||||
* @param BackupRegister: RTC Backup data Register number. |
||||
* This parameter can be: RTC_BKP_DRx where x can be from 1 to 10 (or 42) to |
||||
* specify the register (depending devices). |
||||
* @retval Read value |
||||
*/ |
||||
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister) |
||||
{ |
||||
uint32_t backupregister = 0U; |
||||
uint32_t pvalue = 0U; |
||||
|
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(hrtc); |
||||
|
||||
/* Check the parameters */ |
||||
assert_param(IS_RTC_BKP(BackupRegister)); |
||||
|
||||
backupregister = (uint32_t)BKP_BASE; |
||||
backupregister += (BackupRegister * 4U); |
||||
|
||||
pvalue = (*(__IO uint32_t *)(backupregister)) & BKP_DR1_D; |
||||
|
||||
/* Read the specified register */ |
||||
return pvalue; |
||||
} |
||||
|
||||
|
||||
/**
|
||||
* @brief Sets the Smooth calibration parameters. |
||||
* @param hrtc: RTC handle |
||||
* @param SmoothCalibPeriod: Not used (only present for compatibility with another families) |
||||
* @param SmoothCalibPlusPulses: Not used (only present for compatibility with another families) |
||||
* @param SmouthCalibMinusPulsesValue: specifies the RTC Clock Calibration value. |
||||
* This parameter must be a number between 0 and 0x7F. |
||||
* @retval HAL status |
||||
*/ |
||||
HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue) |
||||
{ |
||||
/* Check input parameters */ |
||||
if (hrtc == NULL) |
||||
{ |
||||
return HAL_ERROR; |
||||
} |
||||
/* Prevent unused argument(s) compilation warning */ |
||||
UNUSED(SmoothCalibPeriod); |
||||
UNUSED(SmoothCalibPlusPulses); |
||||
|
||||
/* Check the parameters */ |
||||
assert_param(IS_RTC_SMOOTH_CALIB_MINUS(SmouthCalibMinusPulsesValue)); |
||||
|
||||
/* Process Locked */ |
||||
__HAL_LOCK(hrtc); |
||||
|
||||
hrtc->State = HAL_RTC_STATE_BUSY; |
||||
|
||||
/* Sets RTC Clock Calibration value.*/ |
||||
MODIFY_REG(BKP->RTCCR, BKP_RTCCR_CAL, SmouthCalibMinusPulsesValue); |
||||
|
||||
/* Change RTC state */ |
||||
hrtc->State = HAL_RTC_STATE_READY; |
||||
|
||||
/* Process Unlocked */ |
||||
__HAL_UNLOCK(hrtc); |
||||
|
||||
return HAL_OK; |
||||
} |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
#endif /* HAL_RTC_MODULE_ENABLED */ |
||||
|
||||
/**
|
||||
* @} |
||||
*/ |
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
||||
|
Loading…
Reference in new issue