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