1 /**
2   ******************************************************************************
3   * @file    stm32wlxx_nucleo.h
4   * @author  MCD Application Team
5   * @brief   Header for stm32wlxx_nucleo.c
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32WLXX_NUCLEO_H
22 #define STM32WLXX_NUCLEO_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32wlxx_nucleo_errno.h"
30 #include "stm32wlxx_nucleo_conf.h"
31 
32 #if (USE_BSP_COM_FEATURE > 0)
33   #if (USE_COM_LOG > 0)
34     #ifndef __GNUC__
35       #include "stdio.h"
36     #endif
37   #endif
38 #endif
39 
40 /** @addtogroup BSP
41   * @{
42   */
43 
44 /** @defgroup STM32WLXX_NUCLEO STM32WLXX-NUCLEO
45   * @{
46   */
47 
48 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL LOW LEVEL
49   * @{
50   */
51 
52 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Types LOW LEVEL Exported Types
53   * @{
54   */
55 typedef enum
56 {
57   LED1 = 0,
58   LED2 = 1,
59   LED3 = 2,
60   /* Color led aliases */
61   LED_BLUE   = LED1,
62   LED_GREEN  = LED2,
63   LED_RED    = LED3
64 }Led_TypeDef;
65 
66 typedef enum
67 {
68   BUTTON_SW1 = 0,
69   BUTTON_SW2 = 1,
70   BUTTON_SW3 = 2,
71 }Button_TypeDef;
72 
73 typedef enum
74 {
75   BUTTON_MODE_GPIO = 0,
76   BUTTON_MODE_EXTI = 1
77 }ButtonMode_TypeDef;
78 
79 #if (USE_BSP_COM_FEATURE > 0)
80 typedef enum
81 {
82   COM1 = 0U,
83   COMn
84 }COM_TypeDef;
85 
86 typedef enum
87 {
88   COM_STOPBITS_1     =   UART_STOPBITS_1,
89   COM_STOPBITS_2     =   UART_STOPBITS_2,
90 }COM_StopBitsTypeDef;
91 
92 typedef enum
93 {
94   COM_PARITY_NONE     =  UART_PARITY_NONE,
95   COM_PARITY_EVEN     =  UART_PARITY_EVEN,
96   COM_PARITY_ODD      =  UART_PARITY_ODD,
97 }COM_ParityTypeDef;
98 
99 typedef enum
100 {
101   COM_HWCONTROL_NONE    =  UART_HWCONTROL_NONE,
102   COM_HWCONTROL_RTS     =  UART_HWCONTROL_RTS,
103   COM_HWCONTROL_CTS     =  UART_HWCONTROL_CTS,
104   COM_HWCONTROL_RTS_CTS =  UART_HWCONTROL_RTS_CTS,
105 }COM_HwFlowCtlTypeDef;
106 
107 typedef enum
108 {
109   COM_WORDLENGTH_7B = UART_WORDLENGTH_7B,
110   COM_WORDLENGTH_8B = UART_WORDLENGTH_8B,
111   COM_WORDLENGTH_9B = UART_WORDLENGTH_9B,
112 }COM_WordLengthTypeDef;
113 
114 typedef struct
115 {
116   uint32_t              BaudRate;
117   COM_WordLengthTypeDef WordLength;
118   COM_StopBitsTypeDef   StopBits;
119   COM_ParityTypeDef     Parity;
120   COM_HwFlowCtlTypeDef  HwFlowCtl;
121 }COM_InitTypeDef;
122 
123 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
124 typedef struct
125 {
126   pUART_CallbackTypeDef  pMspInitCb;
127   pUART_CallbackTypeDef  pMspDeInitCb;
128 }BSP_COM_Cb_t;
129 #endif /* (USE_HAL_UART_REGISTER_CALLBACKS == 1) */
130 #endif /* (USE_BSP_COM_FEATURE > 0) */
131 
132 typedef enum
133 {
134   ABSENT  = 0,
135   PRESENT = 1,
136 }Presence_TypeDef;
137 /**
138   * @}
139   */
140 
141 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Constants LOW LEVEL Exported Constants
142   * @{
143   */
144 
145 /**
146   * @brief STM32WLXX NUCLEO BSP Driver version number
147   */
148 #define __STM32WLXX_NUCLEO_BSP_VERSION_MAIN   (0x00U) /*!< [31:24] main version */
149 #define __STM32WLXX_NUCLEO_BSP_VERSION_SUB1   (0x03U) /*!< [23:16] sub1 version */
150 #define __STM32WLXX_NUCLEO_BSP_VERSION_SUB2   (0x00U) /*!< [15:8]  sub2 version */
151 #define __STM32WLXX_NUCLEO_BSP_VERSION_RC     (0x00U) /*!< [7:0]  release candidate */
152 #define __STM32WLXX_NUCLEO_BSP_VERSION        ((__STM32WLXX_NUCLEO_BSP_VERSION_MAIN << 24)\
153                                               |(__STM32WLXX_NUCLEO_BSP_VERSION_SUB1 << 16)\
154                                               |(__STM32WLXX_NUCLEO_BSP_VERSION_SUB2 << 8 )\
155                                               |(__STM32WLXX_NUCLEO_BSP_VERSION_RC))
156 
157 /**
158   * @brief Define for STM32WLXX_NUCLEO board
159   */
160 #if !defined (USE_STM32WLXX_NUCLEO)
161  #define USE_STM32WLXX_NUCLEO
162 #endif
163 
164 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_LED LOW LEVEL LED Constants
165   * @{
166   */
167 #define LEDn                                    3
168 
169 #define LED1_PIN                                GPIO_PIN_15
170 #define LED1_GPIO_PORT                          GPIOB
171 #define LED1_GPIO_CLK_ENABLE()                  __HAL_RCC_GPIOB_CLK_ENABLE()
172 #define LED1_GPIO_CLK_DISABLE()                 __HAL_RCC_GPIOB_CLK_ENABLE()
173 
174 #define LED2_PIN                                GPIO_PIN_9
175 #define LED2_GPIO_PORT                          GPIOB
176 #define LED2_GPIO_CLK_ENABLE()                  __HAL_RCC_GPIOB_CLK_ENABLE()
177 #define LED2_GPIO_CLK_DISABLE()                 __HAL_RCC_GPIOB_CLK_ENABLE()
178 
179 #define LED3_PIN                                GPIO_PIN_11
180 #define LED3_GPIO_PORT                          GPIOB
181 #define LED3_GPIO_CLK_ENABLE()                  __HAL_RCC_GPIOB_CLK_ENABLE()
182 #define LED3_GPIO_CLK_DISABLE()                 __HAL_RCC_GPIOB_CLK_ENABLE()
183 
184 #define LEDx_GPIO_CLK_ENABLE(__INDEX__)         __HAL_RCC_GPIOB_CLK_ENABLE() /* All Led on same port */
185 #define LEDx_GPIO_CLK_DISABLE(__INDEX__)        __HAL_RCC_GPIOB_CLK_ENABLE() /* All Led on same port */
186 /**
187   * @}
188   */
189 
190 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_BUTTON LOW LEVEL BUTTON Constants
191   * @{
192   */
193 #define BUTTONn                                 3
194 
195 /**
196  * @brief Key push-buttons
197  */
198 #define BUTTON_SW1_PIN                          GPIO_PIN_0
199 #define BUTTON_SW1_GPIO_PORT                    GPIOA
200 #define BUTTON_SW1_GPIO_CLK_ENABLE()            __HAL_RCC_GPIOA_CLK_ENABLE()
201 #define BUTTON_SW1_GPIO_CLK_DISABLE()           __HAL_RCC_GPIOA_CLK_DISABLE()
202 #define BUTTON_SW1_EXTI_LINE                    EXTI_LINE_0
203 #ifdef CORE_CM0PLUS
204 #define BUTTON_SW1_EXTI_IRQn                    EXTI1_0_IRQn
205 #else
206 #define BUTTON_SW1_EXTI_IRQn                    EXTI0_IRQn
207 #endif
208 
209 #define BUTTON_SW2_PIN                          GPIO_PIN_1
210 #define BUTTON_SW2_GPIO_PORT                    GPIOA
211 #define BUTTON_SW2_GPIO_CLK_ENABLE()            __HAL_RCC_GPIOA_CLK_ENABLE()
212 #define BUTTON_SW2_GPIO_CLK_DISABLE()           __HAL_RCC_GPIOA_CLK_DISABLE()
213 #define BUTTON_SW2_EXTI_LINE                    EXTI_LINE_1
214 #ifdef CORE_CM0PLUS
215 #define BUTTON_SW2_EXTI_IRQn                    EXTI1_0_IRQn
216 #else
217 #define BUTTON_SW2_EXTI_IRQn                    EXTI1_IRQn
218 #endif
219 
220 #define BUTTON_SW3_PIN                          GPIO_PIN_6
221 #define BUTTON_SW3_GPIO_PORT                    GPIOC
222 #define BUTTON_SW3_GPIO_CLK_ENABLE()            __HAL_RCC_GPIOC_CLK_ENABLE()
223 #define BUTTON_SW3_GPIO_CLK_DISABLE()           __HAL_RCC_GPIOC_CLK_DISABLE()
224 #define BUTTON_SW3_EXTI_LINE                    EXTI_LINE_6
225 #ifdef CORE_CM0PLUS
226 #define BUTTON_SW3_EXTI_IRQn                    EXTI15_4_IRQn
227 #else
228 #define BUTTON_SW3_EXTI_IRQn                    EXTI9_5_IRQn
229 #endif
230 
231 #define BUTTONx_GPIO_CLK_ENABLE(__INDEX__)    do { if ((__INDEX__) == BUTTON_SW1) BUTTON_SW1_GPIO_CLK_ENABLE(); else \
232                                               if ((__INDEX__) == BUTTON_SW2) BUTTON_SW2_GPIO_CLK_ENABLE(); else \
233                                               if ((__INDEX__) == BUTTON_SW3) BUTTON_SW3_GPIO_CLK_ENABLE();} while(0)
234 
235 #define BUTTONx_GPIO_CLK_DISABLE(__INDEX__)    do { if ((__INDEX__) == BUTTON_SW1) BUTTON_SW1_GPIO_CLK_DISABLE(); else \
236                                               if ((__INDEX__) == BUTTON_SW2) BUTTON_SW2_GPIO_CLK_DISABLE(); else \
237                                               if ((__INDEX__) == BUTTON_SW3) BUTTON_SW3_GPIO_CLK_DISABLE();} while(0)
238 
239 /**
240   * @}
241   */
242 
243 #if (USE_BSP_COM_FEATURE > 0)
244 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_COM LOW LEVEL COM Port Constants
245   * @{
246   */
247 #define COM1_UART                             LPUART1
248 #define COM1_CLK_ENABLE()                     __HAL_RCC_LPUART1_CLK_ENABLE()
249 #define COM1_CLK_DISABLE()                    __HAL_RCC_LPUART1_CLK_DISABLE()
250 
251 #define COM1_TX_PIN                           GPIO_PIN_2
252 #define COM1_TX_GPIO_PORT                     GPIOA
253 #define COM1_TX_GPIO_CLK_ENABLE()             __HAL_RCC_GPIOA_CLK_ENABLE()
254 #define COM1_TX_GPIO_CLK_DISABLE()            __HAL_RCC_GPIOA_CLK_DISABLE()
255 #define COM1_TX_AF                            GPIO_AF8_LPUART1
256 
257 #define COM1_RX_PIN                           GPIO_PIN_3
258 #define COM1_RX_GPIO_PORT                     GPIOA
259 #define COM1_RX_GPIO_CLK_ENABLE()             __HAL_RCC_GPIOA_CLK_ENABLE()
260 #define COM1_RX_GPIO_CLK_DISABLE()            __HAL_RCC_GPIOA_CLK_DISABLE()
261 #define COM1_RX_AF                            GPIO_AF8_LPUART1
262 #define COM_POLL_TIMEOUT                      1000
263 
264 #define MX_UART_InitTypeDef COM_InitTypeDef
265 /**
266   * @}
267   */
268 #endif /* (USE_BSP_COM_FEATURE > 0)*/
269 
270 /**
271   * @}
272   */
273 
274 /** @addtogroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Variables
275   * @{
276   */
277 extern EXTI_HandleTypeDef hpb_exti[];
278 #if (USE_BSP_COM_FEATURE > 0)
279 extern UART_HandleTypeDef hcom_uart[];
280 #endif /* (USE_BSP_COM_FEATURE > 0) */
281 /**
282   * @}
283   */
284 
285 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Functions LOW LEVEL Exported Functions
286   * @{
287   */
288 uint32_t         BSP_GetVersion(void);
289 
290 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_LED_Functions LOW LEVEL LED Functions
291   * @{
292   */
293 int32_t          BSP_LED_Init(Led_TypeDef Led);
294 int32_t          BSP_LED_DeInit(Led_TypeDef Led);
295 int32_t          BSP_LED_On(Led_TypeDef Led);
296 int32_t          BSP_LED_Off(Led_TypeDef Led);
297 int32_t          BSP_LED_Toggle(Led_TypeDef Led);
298 int32_t          BSP_LED_GetState(Led_TypeDef Led);
299 /**
300   * @}
301   */
302 
303 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_BUTTON_Functions  LOW LEVEL BUTTON Functions
304   * @{
305   */
306 int32_t          BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode);
307 int32_t          BSP_PB_DeInit(Button_TypeDef Button);
308 int32_t          BSP_PB_GetState(Button_TypeDef Button);
309 void             BSP_PB_Callback(Button_TypeDef Button);
310 void             BSP_PB_IRQHandler(Button_TypeDef Button);
311 /**
312   * @}
313   */
314 
315 #if (USE_BSP_COM_FEATURE > 0)
316 /** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_COM_Functions LOW LEVEL COM Port Functions
317   * @{
318   */
319 int32_t  BSP_COM_Init(COM_TypeDef COM, COM_InitTypeDef *COM_Init);
320 int32_t  BSP_COM_DeInit(COM_TypeDef COM);
321 #if (USE_COM_LOG > 0)
322 int32_t  BSP_COM_SelectLogPort (COM_TypeDef COM);
323 #endif
324 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
325 int32_t  BSP_COM_RegisterDefaultMspCallbacks(COM_TypeDef COM);
326 int32_t  BSP_COM_RegisterMspCallbacks(COM_TypeDef COM , BSP_COM_Cb_t *Callback);
327 #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
328 HAL_StatusTypeDef MX_LPUART1_Init(UART_HandleTypeDef *huart, MX_UART_InitTypeDef *COM_Init);
329 /**
330   * @}
331   */
332 #endif /* (USE_BSP_COM_FEATURE > 0) */
333 
334 /**
335   * @}
336   */
337 
338 /**
339   * @}
340   */
341 
342 /**
343   * @}
344   */
345 
346 /**
347   * @}
348   */
349 
350 #ifdef __cplusplus
351 }
352 #endif
353 
354 #endif /* STM32WLXX_NUCLEO_H */
355 
356 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
357 
358