]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_M0_STM32F0518_IAR/Eval-Board/stm320518_eval.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_M0_STM32F0518_IAR / Eval-Board / stm320518_eval.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm320518_eval.c\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0RC1\r
6   * @date    27-January-2012\r
7   * @brief   This file provides:\r
8   *            - set of firmware functions to manage Leds, push-button and COM ports\r
9   ******************************************************************************\r
10   * @attention\r
11   *\r
12   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
14   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
15   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
16   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
17   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18   *\r
19   * FOR MORE INFORMATION PLEASE READ CAREFULLY THE LICENSE AGREEMENT FILE\r
20   * LOCATED IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.\r
21   *\r
22   * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>\r
23   ******************************************************************************\r
24   */\r
25   \r
26 /* Includes ------------------------------------------------------------------*/\r
27 #include "stm320518_eval.h"\r
28 \r
29 /** @addtogroup Utilities\r
30   * @{\r
31   */ \r
32 \r
33 /** @addtogroup STM32_EVAL\r
34   * @{\r
35   */ \r
36 \r
37 /** @addtogroup STM320518_EVAL\r
38   * @{\r
39   */   \r
40     \r
41 /** @defgroup STM320518_EVAL_LOW_LEVEL \r
42   * @brief This file provides firmware functions to manage Leds, push-buttons, \r
43   *        COM ports, SD card on SPI and temperature sensor (LM75) available on \r
44   *        STM320518-EVAL evaluation board from STMicroelectronics.\r
45   * @{\r
46   */ \r
47 \r
48 /** @defgroup STM320518_EVAL_LOW_LEVEL_Private_TypesDefinitions\r
49   * @{\r
50   */ \r
51 /**\r
52   * @}\r
53   */ \r
54 \r
55 \r
56 /** @defgroup STM320518_EVAL_LOW_LEVEL_Private_Defines\r
57   * @{\r
58   */ \r
59 /**\r
60   * @}\r
61   */ \r
62 \r
63 \r
64 /** @defgroup STM320518_EVAL_LOW_LEVEL_Private_Macros\r
65   * @{\r
66   */ \r
67 /**\r
68   * @}\r
69   */ \r
70 \r
71 \r
72 /** @defgroup STM320518_EVAL_LOW_LEVEL_Private_Variables\r
73   * @{\r
74   */ \r
75 GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,\r
76                                  LED4_GPIO_PORT};\r
77 const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,\r
78                                  LED4_PIN};\r
79 const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,\r
80                                  LED4_GPIO_CLK};\r
81 \r
82 GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {TAMPER_BUTTON_GPIO_PORT, KEY_BUTTON_GPIO_PORT, \r
83                                       RIGHT_BUTTON_GPIO_PORT, LEFT_BUTTON_GPIO_PORT, \r
84                                       UP_BUTTON_GPIO_PORT, DOWN_BUTTON_GPIO_PORT, \r
85                                       SEL_BUTTON_GPIO_PORT}; \r
86 \r
87 const uint16_t BUTTON_PIN[BUTTONn] = {TAMPER_BUTTON_PIN, KEY_BUTTON_PIN, \r
88                                       RIGHT_BUTTON_PIN, LEFT_BUTTON_PIN, \r
89                                       UP_BUTTON_PIN, DOWN_BUTTON_PIN, \r
90                                       SEL_BUTTON_PIN}; \r
91 \r
92 const uint32_t BUTTON_CLK[BUTTONn] = {TAMPER_BUTTON_GPIO_CLK, KEY_BUTTON_GPIO_CLK, \r
93                                       RIGHT_BUTTON_GPIO_CLK, LEFT_BUTTON_GPIO_CLK, \r
94                                       UP_BUTTON_GPIO_CLK, DOWN_BUTTON_GPIO_CLK, \r
95                                       SEL_BUTTON_GPIO_CLK};\r
96 \r
97 const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {TAMPER_BUTTON_EXTI_LINE, \r
98                                             KEY_BUTTON_EXTI_LINE,\r
99                                             RIGHT_BUTTON_EXTI_LINE,\r
100                                             LEFT_BUTTON_EXTI_LINE,\r
101                                             UP_BUTTON_EXTI_LINE,\r
102                                             DOWN_BUTTON_EXTI_LINE,\r
103                                             SEL_BUTTON_EXTI_LINE};\r
104 \r
105 const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {TAMPER_BUTTON_EXTI_PORT_SOURCE, \r
106                                               KEY_BUTTON_EXTI_PORT_SOURCE,\r
107                                               RIGHT_BUTTON_EXTI_PORT_SOURCE,\r
108                                               LEFT_BUTTON_EXTI_PORT_SOURCE,\r
109                                               UP_BUTTON_EXTI_PORT_SOURCE,\r
110                                               DOWN_BUTTON_EXTI_PORT_SOURCE,\r
111                                               SEL_BUTTON_EXTI_PORT_SOURCE};\r
112                                                                  \r
113 const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {TAMPER_BUTTON_EXTI_PIN_SOURCE, \r
114                                              KEY_BUTTON_EXTI_PIN_SOURCE,\r
115                                              RIGHT_BUTTON_EXTI_PIN_SOURCE,\r
116                                              LEFT_BUTTON_EXTI_PIN_SOURCE,\r
117                                              UP_BUTTON_EXTI_PIN_SOURCE,\r
118                                              DOWN_BUTTON_EXTI_PIN_SOURCE,\r
119                                              SEL_BUTTON_EXTI_PIN_SOURCE}; \r
120 \r
121 const uint16_t BUTTON_IRQn[BUTTONn] = {TAMPER_BUTTON_EXTI_IRQn, KEY_BUTTON_EXTI_IRQn, \r
122                                        RIGHT_BUTTON_EXTI_IRQn, LEFT_BUTTON_EXTI_IRQn, \r
123                                        UP_BUTTON_EXTI_IRQn, DOWN_BUTTON_EXTI_IRQn, \r
124                                        SEL_BUTTON_EXTI_IRQn};\r
125 \r
126 USART_TypeDef* COM_USART[COMn] = {EVAL_COM1}; \r
127 \r
128 GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT};\r
129  \r
130 GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT};\r
131 \r
132 const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK};\r
133 \r
134 const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK};\r
135  \r
136 const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK};\r
137 \r
138 const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN};\r
139 \r
140 const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN};\r
141  \r
142 const uint16_t COM_TX_PIN_SOURCE[COMn] = {EVAL_COM1_TX_SOURCE};\r
143 \r
144 const uint16_t COM_RX_PIN_SOURCE[COMn] = {EVAL_COM1_RX_SOURCE};\r
145  \r
146 const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF};\r
147  \r
148 const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF};\r
149 \r
150 \r
151 /**\r
152   * @}\r
153   */ \r
154 \r
155 \r
156 /** @defgroup STM320518_EVAL_LOW_LEVEL_Private_FunctionPrototypes\r
157   * @{\r
158   */ \r
159 \r
160 /**\r
161   * @}\r
162   */ \r
163 \r
164 /** @defgroup STM320518_EVAL_LOW_LEVEL_Private_Functions\r
165   * @{\r
166   */ \r
167 \r
168 /**\r
169   * @brief  Configures LED GPIO.\r
170   * @param  Led: Specifies the Led to be configured. \r
171   *   This parameter can be one of following parameters:\r
172   *     @arg LED1\r
173   *     @arg LED2\r
174   *     @arg LED3\r
175   *     @arg LED4\r
176   * @retval None\r
177   */\r
178 void STM_EVAL_LEDInit(Led_TypeDef Led)\r
179 {\r
180   GPIO_InitTypeDef  GPIO_InitStructure;\r
181   \r
182   /* Enable the GPIO_LED Clock */\r
183   RCC_AHBPeriphClockCmd(GPIO_CLK[Led], ENABLE);\r
184 \r
185   /* Configure the GPIO_LED pin */\r
186   GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];\r
187   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\r
188   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
189   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
190   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
191   GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);\r
192   GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];\r
193 }\r
194 \r
195 /**\r
196   * @brief  Turns selected LED On.\r
197   * @param  Led: Specifies the Led to be set on. \r
198   *   This parameter can be one of following parameters:\r
199   *     @arg LED1\r
200   *     @arg LED2\r
201   *     @arg LED3\r
202   *     @arg LED4  \r
203   * @retval None\r
204   */\r
205 void STM_EVAL_LEDOn(Led_TypeDef Led)\r
206 {\r
207   GPIO_PORT[Led]->BRR = GPIO_PIN[Led];\r
208 }\r
209 \r
210 /**\r
211   * @brief  Turns selected LED Off.\r
212   * @param  Led: Specifies the Led to be set off. \r
213   *   This parameter can be one of following parameters:\r
214   *     @arg LED1\r
215   *     @arg LED2\r
216   *     @arg LED3\r
217   *     @arg LED4 \r
218   * @retval None\r
219   */\r
220 void STM_EVAL_LEDOff(Led_TypeDef Led)\r
221 {\r
222   GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];\r
223 }\r
224 \r
225 /**\r
226   * @brief  Toggles the selected LED.\r
227   * @param  Led: Specifies the Led to be toggled. \r
228   *   This parameter can be one of following parameters:\r
229   *     @arg LED1\r
230   *     @arg LED2\r
231   *     @arg LED3\r
232   *     @arg LED4  \r
233   * @retval None\r
234   */\r
235 void STM_EVAL_LEDToggle(Led_TypeDef Led)\r
236 {\r
237   GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];\r
238 }\r
239 \r
240 /**\r
241   * @brief  Configures Button GPIO and EXTI Line.\r
242   * @param  Button: Specifies the Button to be configured.\r
243   *   This parameter can be one of following parameters:\r
244   *     @arg BUTTON_TAMPER: Tamper Push Button  \r
245   *     @arg BUTTON_KEY: Key Push Button\r
246   *     @arg BUTTON_RIGHT: Joystick Right Push Button \r
247   *     @arg BUTTON_LEFT: Joystick Left Push Button \r
248   *     @arg BUTTON_UP: Joystick Up Push Button \r
249   *     @arg BUTTON_DOWN: Joystick Down Push Button\r
250   *     @arg BUTTON_SEL: Joystick Sel Push Button      \r
251   * @param  Button_Mode: Specifies Button mode.\r
252   *   This parameter can be one of following parameters:   \r
253   *     @arg BUTTON_MODE_GPIO: Button will be used as simple IO \r
254   *     @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt\r
255   *                     generation capability\r
256   * @retval None\r
257   */\r
258 void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)\r
259 {\r
260   GPIO_InitTypeDef GPIO_InitStructure;\r
261   EXTI_InitTypeDef EXTI_InitStructure;\r
262   NVIC_InitTypeDef NVIC_InitStructure;\r
263 \r
264   /* Enable the BUTTON Clock */\r
265   RCC_AHBPeriphClockCmd(BUTTON_CLK[Button], ENABLE);\r
266   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);\r
267 \r
268   /* Configure Button pin as input */\r
269   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\r
270   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
271   GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];\r
272   GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);\r
273 \r
274   if (Button_Mode == BUTTON_MODE_EXTI)\r
275   {\r
276     /* Connect Button EXTI Line to Button GPIO Pin */\r
277     SYSCFG_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);\r
278 \r
279     /* Configure Button EXTI line */\r
280     EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];\r
281     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;\r
282     if ((Button != BUTTON_TAMPER) && (Button != BUTTON_KEY))\r
283     {\r
284       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;\r
285     }\r
286     else\r
287     {\r
288       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    \r
289     }\r
290     EXTI_InitStructure.EXTI_LineCmd = ENABLE;\r
291     EXTI_Init(&EXTI_InitStructure);\r
292 \r
293     /* Enable and set Button EXTI Interrupt to the lowest priority */\r
294     NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];\r
295     NVIC_InitStructure.NVIC_IRQChannelPriority = 0x03;\r
296     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\r
297 \r
298     NVIC_Init(&NVIC_InitStructure); \r
299   }\r
300 }\r
301 \r
302 /**\r
303   * @brief  Returns the selected Button state.\r
304   * @param  Button: Specifies the Button to be checked.\r
305   *   This parameter can be one of following parameters:\r
306   *     @arg BUTTON_TAMPER: Tamper Push Button  \r
307   *     @arg BUTTON_KEY: Key Push Button \r
308   *     @arg BUTTON_RIGHT: Joystick Right Push Button \r
309   *     @arg BUTTON_LEFT: Joystick Left Push Button \r
310   *     @arg BUTTON_UP: Joystick Up Push Button \r
311   *     @arg BUTTON_DOWN: Joystick Down Push Button\r
312   *     @arg BUTTON_SEL: Joystick Sel Push Button     \r
313   * @retval The Button GPIO pin value.\r
314   */\r
315 uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)\r
316 {\r
317   /* There is no Wakeup button on STM320518-EVAL. */\r
318   return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);\r
319 }\r
320 \r
321 /**\r
322   * @brief  Configures COM port.\r
323   * @param  COM: Specifies the COM port to be configured.\r
324   *   This parameter can be one of following parameters:    \r
325   *     @arg COM1\r
326   * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure that\r
327   *   contains the configuration information for the specified USART peripheral.\r
328   * @retval None\r
329   */\r
330 void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)\r
331 {\r
332   GPIO_InitTypeDef GPIO_InitStructure;\r
333 \r
334   /* Enable GPIO clock */\r
335   RCC_AHBPeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM], ENABLE);\r
336 \r
337   /* Enable USART clock */\r
338   RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE); \r
339 \r
340   /* Connect PXx to USARTx_Tx */\r
341   GPIO_PinAFConfig(COM_TX_PORT[COM], COM_TX_PIN_SOURCE[COM], COM_TX_AF[COM]);\r
342 \r
343   /* Connect PXx to USARTx_Rx */\r
344   GPIO_PinAFConfig(COM_RX_PORT[COM], COM_RX_PIN_SOURCE[COM], COM_RX_AF[COM]);\r
345   \r
346   /* Configure USART Tx as alternate function push-pull */\r
347   GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];\r
348   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
349   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
350   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
351   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;\r
352   GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);\r
353     \r
354   /* Configure USART Rx as alternate function push-pull */\r
355   GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];\r
356   GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);\r
357 \r
358   /* USART configuration */\r
359   USART_Init(COM_USART[COM], USART_InitStruct);\r
360     \r
361   /* Enable USART */\r
362   USART_Cmd(COM_USART[COM], ENABLE);\r
363 }\r
364 \r
365 /**\r
366   * @brief  DeInitializes the SPI interface.\r
367   * @param  None\r
368   * @retval None\r
369   */\r
370 void SD_LowLevel_DeInit(void)\r
371 {\r
372   GPIO_InitTypeDef  GPIO_InitStructure;\r
373   \r
374   SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */\r
375   SPI_I2S_DeInit(SD_SPI);   /*!< DeInitializes the SD_SPI */\r
376   \r
377   /*!< SD_SPI Periph clock disable */\r
378   RCC_APB2PeriphClockCmd(SD_SPI_CLK, DISABLE); \r
379 \r
380   /*!< Configure SD_SPI pins: SCK */\r
381   GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;\r
382   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\r
383   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
384   GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);\r
385 \r
386   /*!< Configure SD_SPI pins: MISO */\r
387   GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;\r
388   GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);\r
389 \r
390   /*!< Configure SD_SPI pins: MOSI */\r
391   GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;\r
392   GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);\r
393 \r
394   /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */\r
395   GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;\r
396   GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);\r
397 \r
398   /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */\r
399   GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;\r
400   GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);\r
401 }\r
402 \r
403 /**\r
404   * @brief  Initializes the SD Card and put it into StandBy State (Ready for \r
405   *         data transfer).\r
406   * @param  None\r
407   * @retval None\r
408   */\r
409 void SD_LowLevel_Init(void)\r
410 {\r
411   GPIO_InitTypeDef  GPIO_InitStructure;\r
412   SPI_InitTypeDef   SPI_InitStructure;\r
413 \r
414   /*!< SD_SPI_CS_GPIO, SD_SPI_MOSI_GPIO, SD_SPI_MISO_GPIO, SD_SPI_DETECT_GPIO \r
415        and SD_SPI_SCK_GPIO Periph clock enable */\r
416   RCC_AHBPeriphClockCmd(SD_CS_GPIO_CLK | SD_SPI_MOSI_GPIO_CLK | SD_SPI_MISO_GPIO_CLK |\r
417                         SD_SPI_SCK_GPIO_CLK | SD_DETECT_GPIO_CLK, ENABLE);\r
418 \r
419   /*!< SD_SPI Periph clock enable */\r
420   RCC_APB2PeriphClockCmd(SD_SPI_CLK, ENABLE); \r
421 \r
422   /*!< Configure SD_SPI pins: SCK */\r
423   GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;\r
424   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
425   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
426   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
427   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;\r
428   GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);\r
429 \r
430   /*!< Configure SD_SPI pins: MISO */\r
431   GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;\r
432   GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);\r
433 \r
434   /*!< Configure SD_SPI pins: MOSI */\r
435   GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;\r
436   GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);\r
437 \r
438   /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */\r
439   GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;\r
440   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\r
441   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
442   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;\r
443   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
444   GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);\r
445 \r
446   /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */\r
447   GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;\r
448   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\r
449   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;\r
450   GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);\r
451 \r
452   /* Connect PXx to SD_SPI_SCK */\r
453   GPIO_PinAFConfig(SD_SPI_SCK_GPIO_PORT, SD_SPI_SCK_SOURCE, SD_SPI_SCK_AF);\r
454 \r
455   /* Connect PXx to SD_SPI_MISO */\r
456   GPIO_PinAFConfig(SD_SPI_MISO_GPIO_PORT, SD_SPI_MISO_SOURCE, SD_SPI_MISO_AF); \r
457 \r
458   /* Connect PXx to SD_SPI_MOSI */\r
459   GPIO_PinAFConfig(SD_SPI_MOSI_GPIO_PORT, SD_SPI_MOSI_SOURCE, SD_SPI_MOSI_AF);  \r
460   \r
461   /*!< SD_SPI Config */\r
462   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;\r
463   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;\r
464   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;\r
465   SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;\r
466   SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;\r
467   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;\r
468   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;\r
469 \r
470   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;\r
471   SPI_InitStructure.SPI_CRCPolynomial = 7;\r
472   SPI_Init(SD_SPI, &SPI_InitStructure);\r
473   \r
474   SPI_RxFIFOThresholdConfig(SD_SPI, SPI_RxFIFOThreshold_QF);\r
475   \r
476   SPI_Cmd(SD_SPI, ENABLE); /*!< SD_SPI enable */\r
477 }\r
478 \r
479 /**\r
480   * @brief  DeInitializes the LM75_I2C.\r
481   * @param  None\r
482   * @retval None\r
483   */\r
484 void LM75_LowLevel_DeInit(void)\r
485 {\r
486   GPIO_InitTypeDef  GPIO_InitStructure;\r
487 \r
488   /*!< Disable LM75_I2C */\r
489   I2C_Cmd(LM75_I2C, DISABLE);\r
490   \r
491   /*!< DeInitializes the LM75_I2C */\r
492   I2C_DeInit(LM75_I2C);\r
493   \r
494   /*!< LM75_I2C Periph clock disable */\r
495   RCC_APB1PeriphClockCmd(LM75_I2C_CLK, DISABLE);\r
496     \r
497   /*!< Configure LM75_I2C pins: SCL */\r
498   GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;\r
499   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\r
500   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
501   GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);\r
502 \r
503   /*!< Configure LM75_I2C pins: SDA */\r
504   GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;\r
505   GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);\r
506 \r
507   /*!< Configure LM75_I2C pin: SMBUS ALERT */\r
508   GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;\r
509   GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);\r
510 }\r
511 \r
512 /**\r
513   * @brief  Initializes the LM75_I2C..\r
514   * @param  None\r
515   * @retval None\r
516   */\r
517 void LM75_LowLevel_Init(void)\r
518 {\r
519   GPIO_InitTypeDef  GPIO_InitStructure;\r
520 \r
521   /*!< LM75_I2C Periph clock enable */\r
522   RCC_APB1PeriphClockCmd(LM75_I2C_CLK, ENABLE);\r
523     \r
524   /* Configure the I2C clock source. The clock is derived from the HSI */\r
525   RCC_I2CCLKConfig(RCC_I2C1CLK_HSI);\r
526   \r
527   /*!< LM75_I2C_SCL_GPIO_CLK, LM75_I2C_SDA_GPIO_CLK \r
528        and LM75_I2C_SMBUSALERT_GPIO_CLK Periph clock enable */\r
529   RCC_AHBPeriphClockCmd(LM75_I2C_SCL_GPIO_CLK | LM75_I2C_SDA_GPIO_CLK |\r
530                         LM75_I2C_SMBUSALERT_GPIO_CLK, ENABLE);\r
531   \r
532   /* Connect PXx to I2C_SCL */\r
533   GPIO_PinAFConfig(LM75_I2C_SCL_GPIO_PORT, LM75_I2C_SCL_SOURCE, LM75_I2C_SCL_AF);\r
534 \r
535   /* Connect PXx to I2C_SDA */\r
536   GPIO_PinAFConfig(LM75_I2C_SDA_GPIO_PORT, LM75_I2C_SDA_SOURCE, LM75_I2C_SDA_AF); \r
537 \r
538   /* Connect PXx to I2C_SMBUSALER */\r
539   GPIO_PinAFConfig(LM75_I2C_SMBUSALERT_GPIO_PORT, LM75_I2C_SMBUSALERT_SOURCE, LM75_I2C_SMBUSALERT_AF);\r
540     \r
541   /*!< Configure LM75_I2C pins: SCL */\r
542   GPIO_InitStructure.GPIO_Pin = LM75_I2C_SCL_PIN;\r
543   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
544   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
545   GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;\r
546   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;\r
547   GPIO_Init(LM75_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);\r
548 \r
549   /*!< Configure LM75_I2C pins: SDA */\r
550   GPIO_InitStructure.GPIO_Pin = LM75_I2C_SDA_PIN;\r
551   GPIO_Init(LM75_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);\r
552 \r
553   /*!< Configure LM75_I2C pin: SMBUS ALERT */\r
554   GPIO_InitStructure.GPIO_Pin = LM75_I2C_SMBUSALERT_PIN;\r
555   GPIO_Init(LM75_I2C_SMBUSALERT_GPIO_PORT, &GPIO_InitStructure);\r
556 }\r
557 \r
558 /**\r
559   * @brief  DeInitializes peripherals used by the I2C EEPROM driver.\r
560   * @param  None\r
561   * @retval None\r
562   */\r
563 void sEE_LowLevel_DeInit(void)\r
564 {\r
565   GPIO_InitTypeDef  GPIO_InitStructure; \r
566    \r
567   /* sEE_I2C Peripheral Disable */\r
568   I2C_Cmd(sEE_I2C, DISABLE);\r
569  \r
570   /* sEE_I2C DeInit */\r
571   I2C_DeInit(sEE_I2C);\r
572 \r
573   /*!< sEE_I2C Periph clock disable */\r
574   RCC_APB1PeriphClockCmd(sEE_I2C_CLK, DISABLE);\r
575     \r
576   /*!< GPIO configuration */  \r
577   /*!< Configure sEE_I2C pins: SCL */\r
578   GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;\r
579   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\r
580   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
581   GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);\r
582 \r
583   /*!< Configure sEE_I2C pins: SDA */\r
584   GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;\r
585   GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);\r
586 }\r
587 \r
588 /**\r
589   * @brief  Initializes peripherals used by the I2C EEPROM driver.\r
590   * @param  None\r
591   * @retval None\r
592   */\r
593 void sEE_LowLevel_Init(void)\r
594 {\r
595   GPIO_InitTypeDef  GPIO_InitStructure;\r
596   \r
597   /* Configure the I2C clock source. The clock is derived from the HSI */\r
598   RCC_I2CCLKConfig(RCC_I2C1CLK_HSI);\r
599     \r
600   /*!< sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */\r
601   RCC_AHBPeriphClockCmd(sEE_I2C_SCL_GPIO_CLK | sEE_I2C_SDA_GPIO_CLK, ENABLE);\r
602   \r
603   /*!< sEE_I2C Periph clock enable */\r
604   RCC_APB1PeriphClockCmd(sEE_I2C_CLK, ENABLE);\r
605   \r
606   /* Connect PXx to I2C_SCL*/\r
607   GPIO_PinAFConfig(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_SOURCE, sEE_I2C_SCL_AF);\r
608   \r
609   /* Connect PXx to I2C_SDA*/\r
610   GPIO_PinAFConfig(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_SOURCE, sEE_I2C_SDA_AF);\r
611   \r
612   /*!< GPIO configuration */  \r
613   /*!< Configure sEE_I2C pins: SCL */\r
614   GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;\r
615   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
616   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
617   GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;\r
618   GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);\r
619   \r
620   /*!< Configure sEE_I2C pins: SDA */\r
621   GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;\r
622   GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);\r
623 }\r
624 \r
625 /**\r
626   * @}\r
627   */ \r
628 \r
629 /**\r
630   * @}\r
631   */ \r
632 \r
633 /**\r
634   * @}\r
635   */\r
636 \r
637 /**\r
638   * @}\r
639   */\r
640 \r
641 /**\r
642   * @}\r
643   */ \r
644     \r
645 /******************* (C) COPYRIGHT 2012 STMicroelectronics *****END OF FILE****/\r