Skip to content

Commit ea8aea7

Browse files
author
fpr
committed
Global variables removed (more secure). Exit init if pins are NC.
Signed-off-by: fpr <[email protected]>
1 parent 8629853 commit ea8aea7

File tree

1 file changed

+39
-56
lines changed

1 file changed

+39
-56
lines changed

cores/arduino/stm32/spi_com.c

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,6 @@
8686
* @{
8787
*/
8888

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-
9489
/**
9590
* @}
9691
*/
@@ -120,13 +115,20 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
120115
return;
121116

122117
SPI_HandleTypeDef *handle = &(obj->handle);
118+
GPIO_InitTypeDef GPIO_InitStruct;
119+
GPIO_TypeDef *port;
123120

124121
// Determine the SPI to use
125122
uint32_t spi_mosi = pinmap_peripheral(obj->pin_mosi, PinMap_SPI_MOSI);
126123
uint32_t spi_miso = pinmap_peripheral(obj->pin_miso, PinMap_SPI_MISO);
127124
uint32_t spi_sclk = pinmap_peripheral(obj->pin_sclk, PinMap_SPI_SCLK);
128125
uint32_t spi_ssel = pinmap_peripheral(obj->pin_ssel, PinMap_SPI_SSEL);
129126

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+
130132
uint32_t spi_data = pinmap_merge(spi_mosi, spi_miso);
131133
uint32_t spi_cntl = pinmap_merge(spi_sclk, spi_ssel);
132134

@@ -139,17 +141,10 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
139141
}
140142

141143
// 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;
145144
if (obj->pin_ssel != NC) {
146-
g_pin_ssel = obj->pin_ssel;
147145
handle->Init.NSS = SPI_NSS_HARD_OUTPUT;
148-
handle->Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
149146
} else {
150-
g_pin_ssel = NC;
151147
handle->Init.NSS = SPI_NSS_SOFT;
152-
handle->Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
153148
}
154149

155150
/* Fill default value */
@@ -202,96 +197,84 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
202197

203198
handle->Init.TIMode = SPI_TIMODE_DISABLED;
204199

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));
224205
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));
226207
HAL_GPIO_Init(port, &GPIO_InitStruct);
227208
}
228209

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));
234215
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));
236217
HAL_GPIO_Init(port, &GPIO_InitStruct);
237218
}
238219

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));
244225
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));
246227
HAL_GPIO_Init(port, &GPIO_InitStruct);
247228
}
248229

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));
254235
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));
256237
HAL_GPIO_Init(port, &GPIO_InitStruct);
257238
}
258239

259240
#if defined SPI1_BASE
260241
// Enable SPI clock
261-
if (hspi->Instance == SPI1) {
242+
if (handle->Instance == SPI1) {
262243
__HAL_RCC_SPI1_CLK_ENABLE();
263244
}
264245
#endif
265246

266247
#if defined SPI2_BASE
267-
if (hspi->Instance == SPI2) {
248+
if (handle->Instance == SPI2) {
268249
__HAL_RCC_SPI2_CLK_ENABLE();
269250
}
270251
#endif
271252

272253
#if defined SPI3_BASE
273-
if (hspi->Instance == SPI3) {
254+
if (handle->Instance == SPI3) {
274255
__HAL_RCC_SPI3_CLK_ENABLE();
275256
}
276257
#endif
277258

278259
#if defined SPI4_BASE
279-
if (hspi->Instance == SPI4) {
260+
if (handle->Instance == SPI4) {
280261
__HAL_RCC_SPI4_CLK_ENABLE();
281262
}
282263
#endif
283264

284265
#if defined SPI5_BASE
285-
if (hspi->Instance == SPI5) {
266+
if (handle->Instance == SPI5) {
286267
__HAL_RCC_SPI5_CLK_ENABLE();
287268
}
288269
#endif
289270

290271
#if defined SPI6_BASE
291-
if (hspi->Instance == SPI6) {
272+
if (handle->Instance == SPI6) {
292273
__HAL_RCC_SPI6_CLK_ENABLE();
293274
}
294275
#endif
276+
277+
HAL_SPI_Init(handle);
295278
}
296279

297280
/**

0 commit comments

Comments
 (0)