Adding original source of vl factory demo
[fw/stlink] / example / 32vl_factory_demo / main.c
1 /**\r
2   ******************************************************************************\r
3   * @file    Demo/src/main.c \r
4   * @author  MCD Application Team\r
5   * @version V1.0.0\r
6   * @date    09/13/2010\r
7   * @brief   Main program body\r
8   ******************************************************************************\r
9   * @copy\r
10   *\r
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17   *\r
18   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
19   */ \r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x.h"\r
23 #include "stm32f10x_conf.h"\r
24 #include "STM32vldiscovery.h"\r
25 \r
26 /* Private typedef -----------------------------------------------------------*/\r
27 /* Private define ------------------------------------------------------------*/\r
28 #define  LSE_FAIL_FLAG  0x80\r
29 #define  LSE_PASS_FLAG  0x100\r
30 /* Private macro -------------------------------------------------------------*/\r
31 /* Private consts ------------------------------------------------------------*/\r
32 \r
33 /* Private variables ---------------------------------------------------------*/\r
34 u32 LSE_Delay = 0;\r
35 u32 count = 0;\r
36 u32 BlinkSpeed = 0;\r
37 u32 KeyState = 0;\r
38 static __IO uint32_t TimingDelay;\r
39 /* Private function prototypes -----------------------------------------------*/\r
40 void Delay(uint32_t nTime);\r
41 void TimingDelay_Decrement(void);\r
42 \r
43 /* Private functions ---------------------------------------------------------*/\r
44 \r
45 /**\r
46   * @brief  Main program.\r
47   * @param  None\r
48   * @retval None\r
49   */\r
50 \r
51 int main(void)\r
52 {\r
53   /* Enable GPIOx Clock */\r
54   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);\r
55   \r
56   /* Initialise LEDs LD3&LD4, both off */\r
57   STM32vldiscovery_LEDInit(LED3);\r
58   STM32vldiscovery_LEDInit(LED4);\r
59   \r
60   STM32vldiscovery_LEDOff(LED3);\r
61   STM32vldiscovery_LEDOff(LED4);\r
62   \r
63   /* Initialise USER Button */\r
64   STM32vldiscovery_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); \r
65   \r
66   /* Setup SysTick Timer for 1 msec interrupts  */\r
67   if (SysTick_Config(SystemCoreClock / 1000))\r
68   { \r
69     /* Capture error */ \r
70     while (1);\r
71   }\r
72 \r
73   /* Enable access to the backup register => LSE can be enabled */\r
74   PWR_BackupAccessCmd(ENABLE);\r
75   \r
76   /* Enable LSE (Low Speed External Oscillation) */\r
77   RCC_LSEConfig(RCC_LSE_ON);\r
78   \r
79   /* Check the LSE Status */\r
80   while(1)\r
81   {\r
82     if(LSE_Delay < LSE_FAIL_FLAG)\r
83     {\r
84       /* check whether LSE is ready, with 4 seconds timeout */\r
85       Delay (500);\r
86       LSE_Delay += 0x10;\r
87       if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) != RESET)\r
88       {\r
89         /* Set flag: LSE PASS */\r
90         LSE_Delay |= LSE_PASS_FLAG;\r
91         /* Turn Off Led4 */\r
92         STM32vldiscovery_LEDOff(LED4);\r
93         /* Disable LSE */\r
94         RCC_LSEConfig(RCC_LSE_OFF);\r
95         break;\r
96       }        \r
97     }\r
98     \r
99     /* LSE_FAIL_FLAG = 0x80 */  \r
100     else if(LSE_Delay >= LSE_FAIL_FLAG)\r
101     {          \r
102       if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)\r
103       {\r
104         /* Set flag: LSE FAIL */\r
105         LSE_Delay |= LSE_FAIL_FLAG;\r
106         /* Turn On Led4 */\r
107         STM32vldiscovery_LEDOn(LED4);\r
108       }        \r
109       /* Disable LSE */\r
110       RCC_LSEConfig(RCC_LSE_OFF);\r
111       break;\r
112     }\r
113   }\r
114   \r
115   /* main while */\r
116   while(1)\r
117   {\r
118     if(0 == STM32vldiscovery_PBGetState(BUTTON_USER))\r
119       {\r
120         if(KeyState == 1)\r
121         {\r
122            if(0 == STM32vldiscovery_PBGetState(BUTTON_USER))\r
123           {\r
124             /* USER Button released */\r
125               KeyState = 0;\r
126             /* Turn Off LED4 */\r
127               STM32vldiscovery_LEDOff(LED4);\r
128           }       \r
129         }\r
130       }\r
131     else if(STM32vldiscovery_PBGetState(BUTTON_USER))\r
132       { \r
133         if(KeyState == 0)\r
134         {\r
135            if(STM32vldiscovery_PBGetState(BUTTON_USER))\r
136           {\r
137             /* USER Button released */\r
138               KeyState = 1;\r
139             /* Turn ON LED4 */\r
140             STM32vldiscovery_LEDOn(LED4);\r
141             Delay(1000);\r
142             /* Turn OFF LED4 */\r
143             STM32vldiscovery_LEDOff(LED4);\r
144             /* BlinkSpeed: 0 -> 1 -> 2, then re-cycle */    \r
145               BlinkSpeed ++ ; \r
146           }\r
147         }\r
148       }\r
149         count++;\r
150         Delay(100);\r
151       /* BlinkSpeed: 0 */ \r
152       if(BlinkSpeed == 0)\r
153           {\r
154             if(4 == (count % 8))\r
155             STM32vldiscovery_LEDOn(LED3);\r
156             if(0 == (count % 8))\r
157             STM32vldiscovery_LEDOff(LED3);\r
158          }\r
159            /* BlinkSpeed: 1 */ \r
160            if(BlinkSpeed == 1)\r
161           {\r
162             if(2 == (count % 4))\r
163             STM32vldiscovery_LEDOn(LED3);\r
164             if(0 == (count % 4))\r
165             STM32vldiscovery_LEDOff(LED3);\r
166           }  \r
167           /* BlinkSpeed: 2 */        \r
168           if(BlinkSpeed == 2)\r
169           {\r
170             if(0 == (count % 2))\r
171             STM32vldiscovery_LEDOn(LED3);\r
172             else\r
173             STM32vldiscovery_LEDOff(LED3);     \r
174           }     \r
175           /* BlinkSpeed: 3 */ \r
176           else if(BlinkSpeed == 3)\r
177         BlinkSpeed = 0;\r
178   }\r
179 }\r
180 \r
181 /**\r
182   * @brief  Inserts a delay time.\r
183   * @param  nTime: specifies the delay time length, in milliseconds.\r
184   * @retval None\r
185   */\r
186 void Delay(uint32_t nTime)\r
187\r
188   TimingDelay = nTime;\r
189 \r
190   while(TimingDelay != 0);\r
191 }\r
192 \r
193 /**\r
194   * @brief  Decrements the TimingDelay variable.\r
195   * @param  None\r
196   * @retval None\r
197   */\r
198 void TimingDelay_Decrement(void)\r
199 {\r
200   if (TimingDelay != 0x00)\r
201   { \r
202     TimingDelay--;\r
203   }\r
204 }\r
205 \r
206 #ifdef  USE_FULL_ASSERT\r
207 /**\r
208   * @brief  Reports the name of the source file and the source line number\r
209   *         where the assert_param error has occurred.\r
210   * @param  file: pointer to the source file name\r
211   * @param  line: assert_param error line source number\r
212   * @retval None\r
213   */\r
214 void assert_failed(uint8_t* file, uint32_t line)\r
215\r
216   /* User can add his own implementation to report the file name and line number,\r
217      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */\r
218 \r
219   /* Infinite loop */\r
220   while (1)\r
221   {\r
222   }\r
223 }\r
224 #endif\r
225 \r
226 /**\r
227   * @}\r
228   */\r
229 \r
230 /**\r
231   * @}\r
232   */\r
233 \r
234 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r