Adding original source of vl factory demo
[fw/stlink] / example / 32vl_factory_demo / main.c
diff --git a/example/32vl_factory_demo/main.c b/example/32vl_factory_demo/main.c
new file mode 100644 (file)
index 0000000..0043b65
--- /dev/null
@@ -0,0 +1,234 @@
+/**\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>&copy; 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