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