+/**\r
+ ******************************************************************************\r
+ * @file Demo/src/main.c \r
+ * @author MCD Application Team\r
+ * @version V1.0.0\r
+ * @date 09/13/2010\r
+ * @brief Main program body\r
+ ******************************************************************************\r
+ * @copy\r
+ *\r
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
+ * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
+ * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
+ *\r
+ * <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>\r
+ */ \r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32f10x.h"\r
+#include "stm32f10x_conf.h"\r
+#include "STM32vldiscovery.h"\r
+\r
+/* Private typedef -----------------------------------------------------------*/\r
+/* Private define ------------------------------------------------------------*/\r
+#define LSE_FAIL_FLAG 0x80\r
+#define LSE_PASS_FLAG 0x100\r
+/* Private macro -------------------------------------------------------------*/\r
+/* Private consts ------------------------------------------------------------*/\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+u32 LSE_Delay = 0;\r
+u32 count = 0;\r
+u32 BlinkSpeed = 0;\r
+u32 KeyState = 0;\r
+static __IO uint32_t TimingDelay;\r
+/* Private function prototypes -----------------------------------------------*/\r
+void Delay(uint32_t nTime);\r
+void TimingDelay_Decrement(void);\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/**\r
+ * @brief Main program.\r
+ * @param None\r
+ * @retval None\r
+ */\r
+\r
+int main(void)\r
+{\r
+ /* Enable GPIOx Clock */\r
+ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);\r
+ \r
+ /* Initialise LEDs LD3&LD4, both off */\r
+ STM32vldiscovery_LEDInit(LED3);\r
+ STM32vldiscovery_LEDInit(LED4);\r
+ \r
+ STM32vldiscovery_LEDOff(LED3);\r
+ STM32vldiscovery_LEDOff(LED4);\r
+ \r
+ /* Initialise USER Button */\r
+ STM32vldiscovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); \r
+ \r
+ /* Setup SysTick Timer for 1 msec interrupts */\r
+ if (SysTick_Config(SystemCoreClock / 1000))\r
+ { \r
+ /* Capture error */ \r
+ while (1);\r
+ }\r
+\r
+ /* Enable access to the backup register => LSE can be enabled */\r
+ PWR_BackupAccessCmd(ENABLE);\r
+ \r
+ /* Enable LSE (Low Speed External Oscillation) */\r
+ RCC_LSEConfig(RCC_LSE_ON);\r
+ \r
+ /* Check the LSE Status */\r
+ while(1)\r
+ {\r
+ if(LSE_Delay < LSE_FAIL_FLAG)\r
+ {\r
+ /* check whether LSE is ready, with 4 seconds timeout */\r
+ Delay (500);\r
+ LSE_Delay += 0x10;\r
+ if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != RESET)\r
+ {\r
+ /* Set flag: LSE PASS */\r
+ LSE_Delay |= LSE_PASS_FLAG;\r
+ /* Turn Off Led4 */\r
+ STM32vldiscovery_LEDOff(LED4);\r
+ /* Disable LSE */\r
+ RCC_LSEConfig(RCC_LSE_OFF);\r
+ break;\r
+ } \r
+ }\r
+ \r
+ /* LSE_FAIL_FLAG = 0x80 */ \r
+ else if(LSE_Delay >= LSE_FAIL_FLAG)\r
+ { \r
+ if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)\r
+ {\r
+ /* Set flag: LSE FAIL */\r
+ LSE_Delay |= LSE_FAIL_FLAG;\r
+ /* Turn On Led4 */\r
+ STM32vldiscovery_LEDOn(LED4);\r
+ } \r
+ /* Disable LSE */\r
+ RCC_LSEConfig(RCC_LSE_OFF);\r
+ break;\r
+ }\r
+ }\r
+ \r
+ /* main while */\r
+ while(1)\r
+ {\r
+ if(0 == STM32vldiscovery_PBGetState(BUTTON_USER))\r
+ {\r
+ if(KeyState == 1)\r
+ {\r
+ if(0 == STM32vldiscovery_PBGetState(BUTTON_USER))\r
+ {\r
+ /* USER Button released */\r
+ KeyState = 0;\r
+ /* Turn Off LED4 */\r
+ STM32vldiscovery_LEDOff(LED4);\r
+ } \r
+ }\r
+ }\r
+ else if(STM32vldiscovery_PBGetState(BUTTON_USER))\r
+ { \r
+ if(KeyState == 0)\r
+ {\r
+ if(STM32vldiscovery_PBGetState(BUTTON_USER))\r
+ {\r
+ /* USER Button released */\r
+ KeyState = 1;\r
+ /* Turn ON LED4 */\r
+ STM32vldiscovery_LEDOn(LED4);\r
+ Delay(1000);\r
+ /* Turn OFF LED4 */\r
+ STM32vldiscovery_LEDOff(LED4);\r
+ /* BlinkSpeed: 0 -> 1 -> 2, then re-cycle */ \r
+ BlinkSpeed ++ ; \r
+ }\r
+ }\r
+ }\r
+ count++;\r
+ Delay(100);\r
+ /* BlinkSpeed: 0 */ \r
+ if(BlinkSpeed == 0)\r
+ {\r
+ if(4 == (count % 8))\r
+ STM32vldiscovery_LEDOn(LED3);\r
+ if(0 == (count % 8))\r
+ STM32vldiscovery_LEDOff(LED3);\r
+ }\r
+ /* BlinkSpeed: 1 */ \r
+ if(BlinkSpeed == 1)\r
+ {\r
+ if(2 == (count % 4))\r
+ STM32vldiscovery_LEDOn(LED3);\r
+ if(0 == (count % 4))\r
+ STM32vldiscovery_LEDOff(LED3);\r
+ } \r
+ /* BlinkSpeed: 2 */ \r
+ if(BlinkSpeed == 2)\r
+ {\r
+ if(0 == (count % 2))\r
+ STM32vldiscovery_LEDOn(LED3);\r
+ else\r
+ STM32vldiscovery_LEDOff(LED3); \r
+ } \r
+ /* BlinkSpeed: 3 */ \r
+ else if(BlinkSpeed == 3)\r
+ BlinkSpeed = 0;\r
+ }\r
+}\r
+\r
+/**\r
+ * @brief Inserts a delay time.\r
+ * @param nTime: specifies the delay time length, in milliseconds.\r
+ * @retval None\r
+ */\r
+void Delay(uint32_t nTime)\r
+{ \r
+ TimingDelay = nTime;\r
+\r
+ while(TimingDelay != 0);\r
+}\r
+\r
+/**\r
+ * @brief Decrements the TimingDelay variable.\r
+ * @param None\r
+ * @retval None\r
+ */\r
+void TimingDelay_Decrement(void)\r
+{\r
+ if (TimingDelay != 0x00)\r
+ { \r
+ TimingDelay--;\r
+ }\r
+}\r
+\r
+#ifdef USE_FULL_ASSERT\r
+/**\r
+ * @brief Reports the name of the source file and the source line number\r
+ * where the assert_param error has occurred.\r
+ * @param file: pointer to the source file name\r
+ * @param line: assert_param error line source number\r
+ * @retval None\r
+ */\r
+void assert_failed(uint8_t* file, uint32_t line)\r
+{ \r
+ /* User can add his own implementation to report the file name and line number,\r
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */\r
+\r
+ /* Infinite loop */\r
+ while (1)\r
+ {\r
+ }\r
+}\r
+#endif\r
+\r
+/**\r
+ * @}\r
+ */\r
+\r
+/**\r
+ * @}\r
+ */\r
+\r
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r