1 /* USER CODE BEGIN Header */
2 /**
3   ******************************************************************************
4   * @file         stm32wb0x_hal_msp.c
5   * @brief        This file provides code for the MSP Initialization
6   *               and de-Initialization codes.
7   ******************************************************************************
8   * @attention
9   *
10   * Copyright (c) 2024 STMicroelectronics.
11   * All rights reserved.
12   *
13   * This software is licensed under terms that can be found in the LICENSE file
14   * in the root directory of this software component.
15   * If no LICENSE file comes with this software, it is provided AS-IS.
16   *
17   ******************************************************************************
18   */
19 /* USER CODE END Header */
20 
21 /* Includes ------------------------------------------------------------------*/
22 #include "stm32wb0x_hal.h"
23 /* USER CODE BEGIN Includes */
24 
25 /* USER CODE END Includes */
26 extern DMA_HandleTypeDef hdma_usart1_tx;
27 
28 extern DMA_HandleTypeDef hdma_usart1_rx;
29 
30 /* Private typedef -----------------------------------------------------------*/
31 /* USER CODE BEGIN TD */
32 
33 /* USER CODE END TD */
34 
35 /* Private define ------------------------------------------------------------*/
36 /* USER CODE BEGIN Define */
37 
38 /* USER CODE END Define */
39 
40 /* Private macro -------------------------------------------------------------*/
41 /* USER CODE BEGIN Macro */
42 
43 /* USER CODE END Macro */
44 
45 /* Private variables ---------------------------------------------------------*/
46 /* USER CODE BEGIN PV */
47 
48 /* USER CODE END PV */
49 
50 /* Private function prototypes -----------------------------------------------*/
51 /* USER CODE BEGIN PFP */
52 static void lowPowerIOSetup(void);
53 
Error_Handler(void)54 static void Error_Handler(void) {
55 	while(1) {
56 	}
57 }
58 /* USER CODE END PFP */
59 
60 /* External functions --------------------------------------------------------*/
61 /* USER CODE BEGIN ExternalFunctions */
62 
63 /* USER CODE END ExternalFunctions */
64 
65 /* USER CODE BEGIN 0 */
66 
67 /* USER CODE END 0 */
68 /**
69   * Initializes the Global MSP.
70   */
HAL_MspInit(void)71 void HAL_MspInit(void)
72 {
73 
74   /* USER CODE BEGIN MspInit 0 */
75   lowPowerIOSetup();
76 
77   /* USER CODE END MspInit 0 */
78 
79   /* System interrupt init*/
80 
81   /* USER CODE BEGIN MspInit 1 */
82 
83   /* USER CODE END MspInit 1 */
84 }
85 
86 /**
87 * @brief PKA MSP Initialization
88 * This function configures the hardware resources used in this example
89 * @param hpka: PKA handle pointer
90 * @retval None
91 */
HAL_PKA_MspInit(PKA_HandleTypeDef * hpka)92 void HAL_PKA_MspInit(PKA_HandleTypeDef* hpka)
93 {
94   if(hpka->Instance==PKA)
95   {
96   /* USER CODE BEGIN PKA_MspInit 0 */
97 
98   /* USER CODE END PKA_MspInit 0 */
99     /* Peripheral clock enable */
100     __HAL_RCC_PKA_CLK_ENABLE();
101     /* PKA interrupt Init */
102     HAL_NVIC_SetPriority(PKA_IRQn, 1, 0);
103     HAL_NVIC_EnableIRQ(PKA_IRQn);
104   /* USER CODE BEGIN PKA_MspInit 1 */
105 
106   /* USER CODE END PKA_MspInit 1 */
107   }
108 
109 }
110 
111 /**
112 * @brief PKA MSP De-Initialization
113 * This function freeze the hardware resources used in this example
114 * @param hpka: PKA handle pointer
115 * @retval None
116 */
HAL_PKA_MspDeInit(PKA_HandleTypeDef * hpka)117 void HAL_PKA_MspDeInit(PKA_HandleTypeDef* hpka)
118 {
119   if(hpka->Instance==PKA)
120   {
121   /* USER CODE BEGIN PKA_MspDeInit 0 */
122 
123   /* USER CODE END PKA_MspDeInit 0 */
124     /* Peripheral clock disable */
125     __HAL_RCC_PKA_CLK_DISABLE();
126 
127     /* PKA interrupt DeInit */
128     HAL_NVIC_DisableIRQ(PKA_IRQn);
129   /* USER CODE BEGIN PKA_MspDeInit 1 */
130 
131   /* USER CODE END PKA_MspDeInit 1 */
132   }
133 
134 }
135 
136 /**
137 * @brief RADIO MSP Initialization
138 * This function configures the hardware resources used in this example
139 * @param hradio: RADIO handle pointer
140 * @retval None
141 */
HAL_RADIO_MspInit(RADIO_HandleTypeDef * hradio)142 void HAL_RADIO_MspInit(RADIO_HandleTypeDef* hradio)
143 {
144   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
145   if(hradio->Instance==RADIO)
146   {
147   /* USER CODE BEGIN RADIO_MspInit 0 */
148 
149   /* USER CODE END RADIO_MspInit 0 */
150 
151   /** Initializes the peripherals clock
152   */
153     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RF;
154     PeriphClkInitStruct.RFClockSelection = RCC_RF_CLK_16M;
155     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
156     {
157       Error_Handler();
158     }
159 
160     /* Peripheral clock enable */
161     if (__HAL_RCC_RADIO_IS_CLK_DISABLED())
162     {
163       /* Radio reset */
164       __HAL_RCC_RADIO_FORCE_RESET();
165       __HAL_RCC_RADIO_RELEASE_RESET();
166 
167       /* Enable Radio peripheral clock */
168       __HAL_RCC_RADIO_CLK_ENABLE();
169     }
170 
171     /* RADIO interrupt Init */
172     HAL_NVIC_SetPriority(RADIO_TXRX_IRQn, 0, 0);
173     HAL_NVIC_EnableIRQ(RADIO_TXRX_IRQn);
174     HAL_NVIC_SetPriority(RADIO_TXRX_SEQ_IRQn, 0, 0);
175     HAL_NVIC_EnableIRQ(RADIO_TXRX_SEQ_IRQn);
176   /* USER CODE BEGIN RADIO_MspInit 1 */
177 
178   /* USER CODE END RADIO_MspInit 1 */
179   }
180 
181 }
182 
183 /**
184 * @brief RADIO MSP De-Initialization
185 * This function freeze the hardware resources used in this example
186 * @param hradio: RADIO handle pointer
187 * @retval None
188 */
HAL_RADIO_MspDeInit(RADIO_HandleTypeDef * hradio)189 void HAL_RADIO_MspDeInit(RADIO_HandleTypeDef* hradio)
190 {
191   if(hradio->Instance==RADIO)
192   {
193   /* USER CODE BEGIN RADIO_MspDeInit 0 */
194 
195   /* USER CODE END RADIO_MspDeInit 0 */
196     /* Peripheral clock disable */
197     __HAL_RCC_RADIO_CLK_DISABLE();
198     __HAL_RCC_RADIO_FORCE_RESET();
199     __HAL_RCC_RADIO_RELEASE_RESET();
200 
201     /* RADIO interrupt DeInit */
202     HAL_NVIC_DisableIRQ(RADIO_TXRX_IRQn);
203     HAL_NVIC_DisableIRQ(RADIO_TXRX_SEQ_IRQn);
204   /* USER CODE BEGIN RADIO_MspDeInit 1 */
205 
206   /* USER CODE END RADIO_MspDeInit 1 */
207   }
208 
209 }
210 
211 /**
212 * @brief UART MSP Initialization
213 * This function configures the hardware resources used in this example
214 * @param huart: UART handle pointer
215 * @retval None
216 */
217 #ifndef __ZEPHYR__
HAL_UART_MspInit(UART_HandleTypeDef * huart)218 void HAL_UART_MspInit(UART_HandleTypeDef* huart)
219 {
220   GPIO_InitTypeDef GPIO_InitStruct = {0};
221   if(huart->Instance==USART1)
222   {
223   /* USER CODE BEGIN USART1_MspInit 0 */
224 
225   /* USER CODE END USART1_MspInit 0 */
226     /* Peripheral clock enable */
227     __HAL_RCC_USART1_CLK_ENABLE();
228 
229     __HAL_RCC_GPIOB_CLK_ENABLE();
230     __HAL_RCC_GPIOA_CLK_ENABLE();
231     /**USART1 GPIO Configuration
232     PB0     ------> USART1_RX
233     PA1     ------> USART1_TX
234     */
235     GPIO_InitStruct.Pin = GPIO_PIN_0;
236     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
237     GPIO_InitStruct.Pull = GPIO_NOPULL;
238     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
239     GPIO_InitStruct.Alternate = GPIO_AF0_USART1;
240     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
241 
242     GPIO_InitStruct.Pin = GPIO_PIN_1;
243     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
244     GPIO_InitStruct.Pull = GPIO_NOPULL;
245     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
246     GPIO_InitStruct.Alternate = GPIO_AF2_USART1;
247     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
248 
249     /* USART1 DMA Init */
250     /* USART1_TX Init */
251     hdma_usart1_tx.Instance = DMA1_Channel1;
252     hdma_usart1_tx.Init.Request = DMA_REQUEST_USART1_TX;
253     hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
254     hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
255     hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
256     hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
257     hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
258     hdma_usart1_tx.Init.Mode = DMA_NORMAL;
259     hdma_usart1_tx.Init.Priority = DMA_PRIORITY_HIGH;
260     if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
261     {
262       Error_Handler();
263     }
264 
265     __HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
266 
267     /* USART1_RX Init */
268     hdma_usart1_rx.Instance = DMA1_Channel2;
269     hdma_usart1_rx.Init.Request = DMA_REQUEST_USART1_RX;
270     hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
271     hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
272     hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
273     hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
274     hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
275     hdma_usart1_rx.Init.Mode = DMA_CIRCULAR;
276     hdma_usart1_rx.Init.Priority = DMA_PRIORITY_HIGH;
277     if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
278     {
279       Error_Handler();
280     }
281 
282     __HAL_LINKDMA(huart,hdmarx,hdma_usart1_rx);
283 
284     /* USART1 interrupt Init */
285     HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);
286     HAL_NVIC_EnableIRQ(USART1_IRQn);
287   /* USER CODE BEGIN USART1_MspInit 1 */
288 
289   /* USER CODE END USART1_MspInit 1 */
290   }
291 
292 }
293 
294 /**
295 * @brief UART MSP De-Initialization
296 * This function freeze the hardware resources used in this example
297 * @param huart: UART handle pointer
298 * @retval None
299 */
HAL_UART_MspDeInit(UART_HandleTypeDef * huart)300 void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
301 {
302   if(huart->Instance==USART1)
303   {
304   /* USER CODE BEGIN USART1_MspDeInit 0 */
305 
306   /* USER CODE END USART1_MspDeInit 0 */
307     /* Peripheral clock disable */
308     __HAL_RCC_USART1_CLK_DISABLE();
309 
310     /**USART1 GPIO Configuration
311     PB0     ------> USART1_RX
312     PA1     ------> USART1_TX
313     */
314     HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0);
315 
316     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1);
317 
318     /* USART1 DMA DeInit */
319     HAL_DMA_DeInit(huart->hdmatx);
320     HAL_DMA_DeInit(huart->hdmarx);
321 
322     /* USART1 interrupt DeInit */
323     HAL_NVIC_DisableIRQ(USART1_IRQn);
324   /* USER CODE BEGIN USART1_MspDeInit 1 */
325 
326   /* USER CODE END USART1_MspDeInit 1 */
327   }
328 
329 }
330 #endif /* __ZEPHYR__ */
331 
332 /* USER CODE BEGIN 1 */
333 
334 /**
335   * @brief  Configures the IOs pull resistors to have the optimized power consumption.
336   * @param  None
337   * @retval None
338   */
lowPowerIOSetup(void)339 static void lowPowerIOSetup(void)
340 {
341 
342   HAL_PWREx_EnableGPIOPullUp(PWR_GPIO_A,
343                        PWR_GPIO_BIT_0|
344                        PWR_GPIO_BIT_1|
345                        PWR_GPIO_BIT_2|
346                        PWR_GPIO_BIT_3);
347 
348   HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_A,
349                              PWR_GPIO_BIT_8|
350                              PWR_GPIO_BIT_9|
351                              PWR_GPIO_BIT_10|
352                              PWR_GPIO_BIT_11);
353 
354   HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_B,
355                              PWR_GPIO_BIT_0|
356                              PWR_GPIO_BIT_3|
357                              PWR_GPIO_BIT_6|
358                              PWR_GPIO_BIT_7|
359                              PWR_GPIO_BIT_12|
360                              PWR_GPIO_BIT_13);
361 
362   HAL_PWREx_EnableGPIOPullUp(PWR_GPIO_B,
363                        PWR_GPIO_BIT_1|
364                        PWR_GPIO_BIT_2|
365                        PWR_GPIO_BIT_4|
366                        PWR_GPIO_BIT_5|
367                        PWR_GPIO_BIT_14|
368                        PWR_GPIO_BIT_15);
369 }
370 
371 /* USER CODE END 1 */
372