aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib')
-rw-r--r--thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.c288
-rw-r--r--thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.h41
-rw-r--r--thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/readme.txt111
3 files changed, 440 insertions, 0 deletions
diff --git a/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.c b/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.c
new file mode 100644
index 0000000..b7e342f
--- /dev/null
+++ b/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.c
@@ -0,0 +1,288 @@
+/**
+ ******************************************************************************
+ * @file RTC/LSI_Calib/main.c
+ * @author MCD Application Team
+ * @version V3.5.0
+ * @date 08-April-2011
+ * @brief Main program body
+ ******************************************************************************
+ * @attention
+ *
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+#include <stdio.h>
+
+/** @addtogroup STM32F10x_StdPeriph_Examples
+ * @{
+ */
+
+/** @addtogroup RTC_LSI_Calib
+ * @{
+ */
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+#define RTCClockOutput_Enable /* RTC Clock/64 is output on tamper pin(PC.13) */
+
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
+TIM_ICInitTypeDef TIM_ICInitStructure;
+RCC_ClocksTypeDef RCC_Clocks;
+__IO uint32_t PeriodValue = 0, LsiFreq = 0;
+__IO uint32_t OperationComplete = 0;
+
+/* Private function prototypes -----------------------------------------------*/
+void RTC_Configuration(void);
+void NVIC_Configuration(void);
+
+/* Private functions ---------------------------------------------------------*/
+
+/**
+ * @brief Main program.
+ * @param None
+ * @retval None
+ */
+int main(void)
+{
+ /*!< At this stage the microcontroller clock setting is already configured,
+ this is done through SystemInit() function which is called from startup
+ file (startup_stm32f10x_xx.s) before to branch to application main.
+ To reconfigure the default setting of SystemInit() function, refer to
+ system_stm32f10x.c file
+ */
+
+ /* Initialize LEDs and Key Button mounted on STM3210X-EVAL board */
+ STM_EVAL_LEDInit(LED1);
+ STM_EVAL_LEDInit(LED2);
+ STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO);
+
+ /* RTC Configuration */
+ RTC_Configuration();
+
+ /* Wait until Key Push button is pressed */
+ while (STM_EVAL_PBGetState(BUTTON_KEY) != 0)
+ {
+ }
+
+ /* Get the Frequency value */
+ RCC_GetClocksFreq(&RCC_Clocks);
+
+ /* Enable TIM5 APB1 clocks */
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
+
+ /* Connect internally the TM5_CH4 Input Capture to the LSI clock output */
+ GPIO_PinRemapConfig(GPIO_Remap_TIM5CH4_LSI, ENABLE);
+
+ /* TIM5 Time base configuration */
+ TIM_TimeBaseStructure.TIM_Prescaler = 0;
+ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
+ TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
+ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
+ TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
+
+ /* TIM5 Channel4 Input capture Mode configuration */
+ TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
+ TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
+ TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
+ TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
+ TIM_ICInitStructure.TIM_ICFilter = 0;
+ TIM_ICInit(TIM5, &TIM_ICInitStructure);
+
+ /* Reinitialize the index for the interrupt */
+ OperationComplete = 0;
+
+ /* Enable the TIM5 Input Capture counter */
+ TIM_Cmd(TIM5, ENABLE);
+ /* Reset all TIM5 flags */
+ TIM5->SR = 0;
+ /* Enable the TIM5 channel 4 */
+ TIM_ITConfig(TIM5, TIM_IT_CC4, ENABLE);
+
+ /* NVIC configuration */
+ NVIC_Configuration();
+
+ /* Wait the TIM5 measuring operation to be completed */
+ while (OperationComplete != 2)
+ {}
+
+ /* Compute the actual frequency of the LSI. (TIM5_CLK = 2 * PCLK1) */
+ if (PeriodValue != 0)
+ {
+#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
+ LsiFreq = (uint32_t)((uint32_t)(RCC_Clocks.PCLK1_Frequency) / (uint32_t)PeriodValue);
+#else
+ LsiFreq = (uint32_t)((uint32_t)(RCC_Clocks.PCLK1_Frequency * 2) / (uint32_t)PeriodValue);
+#endif
+ }
+
+ /* Adjust the RTC prescaler value */
+ RTC_SetPrescaler(LsiFreq - 1);
+
+ /* Wait until last write operation on RTC registers has finished */
+ RTC_WaitForLastTask();
+
+ /* Turn on LED2 */
+ STM_EVAL_LEDOn(LED2);
+
+ while (1)
+ {
+ /* Infinite loop */
+ }
+
+}
+
+/**
+ * @brief Configures the nested vectored interrupt controller.
+ * @param None
+ * @retval None
+ */
+void NVIC_Configuration(void)
+{
+ NVIC_InitTypeDef NVIC_InitStructure;
+
+ /* Configure one bit for preemption priority */
+ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
+
+ /* Enable the RTC Interrupt */
+ NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_Init(&NVIC_InitStructure);
+
+ /* Enable the TIM5 Interrupt */
+ NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_Init(&NVIC_InitStructure);
+}
+
+/**
+ * @brief Configures the RTC.
+ * @param None
+ * @retval None
+ */
+void RTC_Configuration(void)
+{
+ /* Enable PWR and BKP clocks */
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
+
+ /* Allow access to BKP Domain */
+ PWR_BackupAccessCmd(ENABLE);
+
+ /* Reset Backup Domain */
+ BKP_DeInit();
+
+ /* Enable the LSI OSC */
+ RCC_LSICmd(ENABLE);
+ /* Wait till LSI is ready */
+ while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
+ {}
+ /* Select the RTC Clock Source */
+ RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
+
+ /* Enable RTC Clock */
+ RCC_RTCCLKCmd(ENABLE);
+
+ /* Wait for RTC registers synchronization */
+ RTC_WaitForSynchro();
+
+ /* Wait until last write operation on RTC registers has finished */
+ RTC_WaitForLastTask();
+
+ /* Enable the RTC Second */
+ RTC_ITConfig(RTC_IT_SEC, ENABLE);
+
+ /* Wait until last write operation on RTC registers has finished */
+ RTC_WaitForLastTask();
+
+ /* Set RTC prescaler: set RTC period to 1sec */
+ RTC_SetPrescaler(40000);
+
+ /* Wait until last write operation on RTC registers has finished */
+ RTC_WaitForLastTask();
+
+ /* To output second signal on Tamper pin, the tamper functionality
+ must be disabled (by default this functionality is disabled) */
+ BKP_TamperPinCmd(DISABLE);
+
+ /* Enable the RTC Second Output on Tamper Pin */
+ BKP_RTCOutputConfig(BKP_RTCOutputSource_Second);
+}
+
+/**
+ * @brief Increments OperationComplete variable and return its value
+ * before increment operation.
+ * @param None
+ * @retval OperationComplete value before increment
+ */
+uint32_t IncrementVar_OperationComplete(void)
+{
+ OperationComplete++;
+
+ return (uint32_t)(OperationComplete -1);
+}
+
+/**
+ * @brief Returns OperationComplete value.
+ * @param None
+ * @retval OperationComplete value
+ */
+uint32_t GetVar_OperationComplete(void)
+{
+ return (uint32_t)OperationComplete;
+}
+
+/**
+ * @brief Sets the PeriodValue variable with input parameter.
+ * @param Value: Value of PeriodValue to be set.
+ * @retval None
+ */
+void SetVar_PeriodValue(uint32_t Value)
+{
+ PeriodValue = (uint32_t)(Value);
+}
+
+#ifdef USE_FULL_ASSERT
+
+/**
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t* file, uint32_t line)
+{
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+
+ /* Infinite loop */
+ while (1)
+ {}
+}
+
+#endif
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.h b/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.h
new file mode 100644
index 0000000..d4abda6
--- /dev/null
+++ b/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/main.h
@@ -0,0 +1,41 @@
+/**
+ ******************************************************************************
+ * @file RTC/LSI_Calib/main.h
+ * @author MCD Application Team
+ * @version V3.5.0
+ * @date 08-April-2011
+ * @brief Header file for main.c.
+ ******************************************************************************
+ * @attention
+ *
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __MAIN_H
+#define __MAIN_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f10x.h"
+#include "stm32_eval.h"
+
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+uint32_t IncrementVar_OperationComplete(void);
+uint32_t GetVar_OperationComplete(void);
+void SetVar_PeriodValue(uint32_t Value);
+
+#endif /* __MAIN_H*/
+
+/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
diff --git a/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/readme.txt b/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/readme.txt
new file mode 100644
index 0000000..f465c39
--- /dev/null
+++ b/thirdparty/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/RTC/LSI_Calib/readme.txt
@@ -0,0 +1,111 @@
+
+/**
+ @page RTC_LSI_Calib RTC LSI_Calib example
+
+ @verbatim
+ ******************** (C) COPYRIGHT 2011 STMicroelectronics *******************
+ * @file RTC/LSI_Calib/readme.txt
+ * @author MCD Application Team
+ * @version V3.5.0
+ * @date 08-April-2011
+ * @brief Description of the RTC LSI_Calib example.
+ ******************************************************************************
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ ******************************************************************************
+ @endverbatim
+
+@par Example Description
+
+This example demonstrates and explains how to use the LSI clock source auto
+calibration to get a precise RTC clock.
+As an application example, it demonstrates how to configure the TIM5 timer
+internally connected to LSI clock output, in order to adjust the RTC prescaler.
+
+The Low Speed External (LSI) clock is used as RTC clock source.
+After reset, the RTC prescaler is set with the default value (40000).
+The inaccuracy of the LSI clock causes the RTC Second signal to be inaccurate. This
+signal is output on the Tamper pin (PC.13) and can be measured by on oscilloscope
+or a frequencymeter.
+
+The program waits until Key Push button is pressed to begin the auto calibration procedure:
+ - Configure the TIM5 to remap internally the TIM5 Channel 4 Input Capture to the
+ LSI clock output.
+ - Enable the TIM5 Input Capture interrupt: after one cycle of LSI clock, the
+ period value is stored in a variable and compared to the HCLK clock to get
+ its real value.
+ - The RTC prescaler is adjusted with this LSI frequency value so that the RTC
+ Second value become more accurate.
+ - When calibration is done a led connected to PF.07 is turned ON to indicate the
+ end of this operation. At this moment, you can monitor the Second signal on
+ an oscilloscope to measure its accuracy again.
+
+The RTC Second signal can be monitored either on Tamper pin or on LED1 which is
+toggled into the RTC Second interrupt service routine.
+
+
+@par Directory contents
+
+ - RTC/LSI_Calib/stm32f10x_conf.h Library Configuration file
+ - RTC/LSI_Calib/stm32f10x_it.c Interrupt handlers
+ - RTC/LSI_Calib/stm32f10x_it.h Header for stm32f10x_it.c
+ - RTC/LSI_Calib/main.h Main header file
+ - RTC/LSI_Calib/main.c Main program
+ - RTC/LSI_Calib/system_stm32f10x.c STM32F10x system source file
+
+@par Hardware and Software environment
+
+ - This example runs on STM32F10x Connectivity line, High-Density Value line,
+ High-Density and XL-Density Devices.
+
+ - This example has been tested with STMicroelectronics STM32100E-EVAL (High-Density
+ Value line), STM3210E-EVAL (High-Density and XL-Density) and STM3210C-EVAL
+ (Connectivity Line) evaluation boards and can be easily tailored to any other
+ supported device and development board.
+ To select the STMicroelectronics evaluation board used to run the example,
+ uncomment the corresponding line in stm32_eval.h file (under Utilities\STM32_EVAL)
+
+ - STM32100E-EVAL Set-up
+ - Use LD1 and LD2 leds connected respectively to PF.06 and PF.07 pins
+ - Use the Key push button connected to PG.08 pin
+
+ - STM3210C-EVAL Set-up
+ - Use LD1 and LD2 leds connected respectively to PD.07 and PD.13 pins
+ - Use the Key push-button connected to PB.09 pin
+
+ - STM3210E-EVAL Set-up
+ - Use LD1 and LD2 leds connected respectively to PF.06 and PF.07 pins
+ - Use the Key push button connected to PG.08 pin
+
+@par How to use it ?
+
+In order to make the program work, you must do the following :
+ - Copy all source files from this example folder to the template folder under
+ Project\STM32F10x_StdPeriph_Template
+ - Open your preferred toolchain
+ - Rebuild all files and load your image into target memory
+ - Run the example
+
+@note
+ - Low-density Value line devices are STM32F100xx microcontrollers where the
+ Flash memory density ranges between 16 and 32 Kbytes.
+ - Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx
+ microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.
+ - Medium-density Value line devices are STM32F100xx microcontrollers where
+ the Flash memory density ranges between 64 and 128 Kbytes.
+ - Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx
+ microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.
+ - High-density Value line devices are STM32F100xx microcontrollers where
+ the Flash memory density ranges between 256 and 512 Kbytes.
+ - High-density devices are STM32F101xx and STM32F103xx microcontrollers where
+ the Flash memory density ranges between 256 and 512 Kbytes.
+ - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where
+ the Flash memory density ranges between 512 and 1024 Kbytes.
+ - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
+
+ * <h3><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h3>
+ */