86
86
* @{
87
87
*/
88
88
89
- static PinName g_pin_mosi = NC ;
90
- static PinName g_pin_miso = NC ;
91
- static PinName g_pin_sclk = NC ;
92
- static PinName g_pin_ssel = NC ;
93
-
94
89
/**
95
90
* @}
96
91
*/
@@ -120,13 +115,20 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
120
115
return ;
121
116
122
117
SPI_HandleTypeDef * handle = & (obj -> handle );
118
+ GPIO_InitTypeDef GPIO_InitStruct ;
119
+ GPIO_TypeDef * port ;
123
120
124
121
// Determine the SPI to use
125
122
uint32_t spi_mosi = pinmap_peripheral (obj -> pin_mosi , PinMap_SPI_MOSI );
126
123
uint32_t spi_miso = pinmap_peripheral (obj -> pin_miso , PinMap_SPI_MISO );
127
124
uint32_t spi_sclk = pinmap_peripheral (obj -> pin_sclk , PinMap_SPI_SCLK );
128
125
uint32_t spi_ssel = pinmap_peripheral (obj -> pin_ssel , PinMap_SPI_SSEL );
129
126
127
+ /* Pins MOSI/MISO/SCLK must not be NC. ssel can be NC. */
128
+ if (spi_mosi == NC || spi_miso == NC || spi_sclk == NC ) {
129
+ return ;
130
+ }
131
+
130
132
uint32_t spi_data = pinmap_merge (spi_mosi , spi_miso );
131
133
uint32_t spi_cntl = pinmap_merge (spi_sclk , spi_ssel );
132
134
@@ -139,17 +141,10 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
139
141
}
140
142
141
143
// Configure the SPI pins
142
- g_pin_mosi = obj -> pin_mosi ;
143
- g_pin_miso = obj -> pin_miso ;
144
- g_pin_sclk = obj -> pin_sclk ;
145
144
if (obj -> pin_ssel != NC ) {
146
- g_pin_ssel = obj -> pin_ssel ;
147
145
handle -> Init .NSS = SPI_NSS_HARD_OUTPUT ;
148
- handle -> Init .NSSPMode = SPI_NSS_PULSE_ENABLE ;
149
146
} else {
150
- g_pin_ssel = NC ;
151
147
handle -> Init .NSS = SPI_NSS_SOFT ;
152
- handle -> Init .NSSPMode = SPI_NSS_PULSE_DISABLE ;
153
148
}
154
149
155
150
/* Fill default value */
@@ -202,96 +197,84 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
202
197
203
198
handle -> Init .TIMode = SPI_TIMODE_DISABLED ;
204
199
205
- HAL_SPI_Init (handle );
206
- }
207
-
208
- /**
209
- * @brief Initialize the SPI MSP.
210
- * @param hspi: pointer to a SPI_HandleTypeDef structure that contains
211
- * the configuration information for SPI module.
212
- * @retval None
213
- */
214
- void HAL_SPI_MspInit (SPI_HandleTypeDef * hspi )
215
- {
216
- GPIO_InitTypeDef GPIO_InitStruct ;
217
- GPIO_TypeDef * port ;
218
-
219
- if (g_pin_mosi != NC ) {
220
- port = set_GPIO_Port_Clock (STM_PORT (g_pin_mosi ));
221
- GPIO_InitStruct .Pin = STM_GPIO_PIN (g_pin_mosi );
222
- GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (g_pin_mosi ,PinMap_SPI_MOSI ));
223
- GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (g_pin_mosi ,PinMap_SPI_MOSI ));
200
+ if (obj -> pin_mosi != NC ) {
201
+ port = set_GPIO_Port_Clock (STM_PORT (obj -> pin_mosi ));
202
+ GPIO_InitStruct .Pin = STM_GPIO_PIN (obj -> pin_mosi );
203
+ GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (obj -> pin_mosi ,PinMap_SPI_MOSI ));
204
+ GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (obj -> pin_mosi ,PinMap_SPI_MOSI ));
224
205
GPIO_InitStruct .Speed = GPIO_SPEED_FREQ_HIGH ;
225
- GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (g_pin_mosi ,PinMap_SPI_MOSI ));
206
+ GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (obj -> pin_mosi ,PinMap_SPI_MOSI ));
226
207
HAL_GPIO_Init (port , & GPIO_InitStruct );
227
208
}
228
209
229
- if (g_pin_miso != NC ) {
230
- port = set_GPIO_Port_Clock (STM_PORT (g_pin_miso ));
231
- GPIO_InitStruct .Pin = STM_GPIO_PIN (g_pin_miso );
232
- GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (g_pin_miso ,PinMap_SPI_MISO ));
233
- GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (g_pin_miso ,PinMap_SPI_MISO ));
210
+ if (obj -> pin_miso != NC ) {
211
+ port = set_GPIO_Port_Clock (STM_PORT (obj -> pin_miso ));
212
+ GPIO_InitStruct .Pin = STM_GPIO_PIN (obj -> pin_miso );
213
+ GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (obj -> pin_miso ,PinMap_SPI_MISO ));
214
+ GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (obj -> pin_miso ,PinMap_SPI_MISO ));
234
215
GPIO_InitStruct .Speed = GPIO_SPEED_FREQ_HIGH ;
235
- GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (g_pin_miso ,PinMap_SPI_MISO ));
216
+ GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (obj -> pin_miso ,PinMap_SPI_MISO ));
236
217
HAL_GPIO_Init (port , & GPIO_InitStruct );
237
218
}
238
219
239
- if (g_pin_sclk != NC ) {
240
- port = set_GPIO_Port_Clock (STM_PORT (g_pin_sclk ));
241
- GPIO_InitStruct .Pin = STM_GPIO_PIN (g_pin_sclk );
242
- GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (g_pin_sclk ,PinMap_SPI_SCLK ));
243
- GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (g_pin_sclk ,PinMap_SPI_SCLK ));
220
+ if (obj -> pin_sclk != NC ) {
221
+ port = set_GPIO_Port_Clock (STM_PORT (obj -> pin_sclk ));
222
+ GPIO_InitStruct .Pin = STM_GPIO_PIN (obj -> pin_sclk );
223
+ GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (obj -> pin_sclk ,PinMap_SPI_SCLK ));
224
+ GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (obj -> pin_sclk ,PinMap_SPI_SCLK ));
244
225
GPIO_InitStruct .Speed = GPIO_SPEED_FREQ_HIGH ;
245
- GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (g_pin_sclk ,PinMap_SPI_SCLK ));
226
+ GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (obj -> pin_sclk ,PinMap_SPI_SCLK ));
246
227
HAL_GPIO_Init (port , & GPIO_InitStruct );
247
228
}
248
229
249
- if (g_pin_ssel != NC ) {
250
- port = set_GPIO_Port_Clock (STM_PORT (g_pin_ssel ));
251
- GPIO_InitStruct .Pin = STM_GPIO_PIN (g_pin_ssel );
252
- GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (g_pin_ssel ,PinMap_SPI_SSEL ));
253
- GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (g_pin_ssel ,PinMap_SPI_SSEL ));
230
+ if (obj -> pin_ssel != NC ) {
231
+ port = set_GPIO_Port_Clock (STM_PORT (obj -> pin_ssel ));
232
+ GPIO_InitStruct .Pin = STM_GPIO_PIN (obj -> pin_ssel );
233
+ GPIO_InitStruct .Mode = STM_PIN_MODE (pinmap_function (obj -> pin_ssel ,PinMap_SPI_SSEL ));
234
+ GPIO_InitStruct .Pull = STM_PIN_PUPD (pinmap_function (obj -> pin_ssel ,PinMap_SPI_SSEL ));
254
235
GPIO_InitStruct .Speed = GPIO_SPEED_FREQ_HIGH ;
255
- GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (g_pin_ssel ,PinMap_SPI_SSEL ));
236
+ GPIO_InitStruct .Alternate = STM_PIN_AFNUM (pinmap_function (obj -> pin_ssel ,PinMap_SPI_SSEL ));
256
237
HAL_GPIO_Init (port , & GPIO_InitStruct );
257
238
}
258
239
259
240
#if defined SPI1_BASE
260
241
// Enable SPI clock
261
- if (hspi -> Instance == SPI1 ) {
242
+ if (handle -> Instance == SPI1 ) {
262
243
__HAL_RCC_SPI1_CLK_ENABLE ();
263
244
}
264
245
#endif
265
246
266
247
#if defined SPI2_BASE
267
- if (hspi -> Instance == SPI2 ) {
248
+ if (handle -> Instance == SPI2 ) {
268
249
__HAL_RCC_SPI2_CLK_ENABLE ();
269
250
}
270
251
#endif
271
252
272
253
#if defined SPI3_BASE
273
- if (hspi -> Instance == SPI3 ) {
254
+ if (handle -> Instance == SPI3 ) {
274
255
__HAL_RCC_SPI3_CLK_ENABLE ();
275
256
}
276
257
#endif
277
258
278
259
#if defined SPI4_BASE
279
- if (hspi -> Instance == SPI4 ) {
260
+ if (handle -> Instance == SPI4 ) {
280
261
__HAL_RCC_SPI4_CLK_ENABLE ();
281
262
}
282
263
#endif
283
264
284
265
#if defined SPI5_BASE
285
- if (hspi -> Instance == SPI5 ) {
266
+ if (handle -> Instance == SPI5 ) {
286
267
__HAL_RCC_SPI5_CLK_ENABLE ();
287
268
}
288
269
#endif
289
270
290
271
#if defined SPI6_BASE
291
- if (hspi -> Instance == SPI6 ) {
272
+ if (handle -> Instance == SPI6 ) {
292
273
__HAL_RCC_SPI6_CLK_ENABLE ();
293
274
}
294
275
#endif
276
+
277
+ HAL_SPI_Init (handle );
295
278
}
296
279
297
280
/**
0 commit comments