147 #include "stm32f4xx.h"
148 #include "stm32f4xx_rcc.h"
149 #include "stm32f4xx_gpio.h"
150 #include "stm32f4xx_spi.h"
152 #include "attributes.h"
153 #include "tm_stm32f4_gpio.h"
208 #warning "SPI4 undefined. Please update library with STD drivers from ST.com"
213 #warning "SPI5 undefined. Please update library with STD drivers from ST.com"
218 #warning "SPI6 undefined. Please update library with STD drivers from ST.com"
223 #ifndef TM_SPI1_PRESCALER
224 #define TM_SPI1_PRESCALER SPI_BaudRatePrescaler_32
227 #ifndef TM_SPI1_DATASIZE
228 #define TM_SPI1_DATASIZE SPI_DataSize_8b
231 #ifndef TM_SPI1_FIRSTBIT
232 #define TM_SPI1_FIRSTBIT SPI_FirstBit_MSB
235 #ifndef TM_SPI1_MASTERSLAVE
236 #define TM_SPI1_MASTERSLAVE SPI_Mode_Master
240 #define TM_SPI1_MODE TM_SPI_Mode_0
246 #ifndef TM_SPI2_PRESCALER
247 #define TM_SPI2_PRESCALER SPI_BaudRatePrescaler_32
250 #ifndef TM_SPI2_DATASIZE
251 #define TM_SPI2_DATASIZE SPI_DataSize_8b
254 #ifndef TM_SPI2_FIRSTBIT
255 #define TM_SPI2_FIRSTBIT SPI_FirstBit_MSB
258 #ifndef TM_SPI2_MASTERSLAVE
259 #define TM_SPI2_MASTERSLAVE SPI_Mode_Master
263 #define TM_SPI2_MODE TM_SPI_Mode_0
269 #ifndef TM_SPI3_PRESCALER
270 #define TM_SPI3_PRESCALER SPI_BaudRatePrescaler_32
273 #ifndef TM_SPI3_DATASIZE
274 #define TM_SPI3_DATASIZE SPI_DataSize_8b
277 #ifndef TM_SPI3_FIRSTBIT
278 #define TM_SPI3_FIRSTBIT SPI_FirstBit_MSB
281 #ifndef TM_SPI3_MASTERSLAVE
282 #define TM_SPI3_MASTERSLAVE SPI_Mode_Master
286 #define TM_SPI3_MODE TM_SPI_Mode_0
292 #ifndef TM_SPI4_PRESCALER
293 #define TM_SPI4_PRESCALER SPI_BaudRatePrescaler_32
296 #ifndef TM_SPI4_DATASIZE
297 #define TM_SPI4_DATASIZE SPI_DataSize_8b
300 #ifndef TM_SPI4_FIRSTBIT
301 #define TM_SPI4_FIRSTBIT SPI_FirstBit_MSB
304 #ifndef TM_SPI4_MASTERSLAVE
305 #define TM_SPI4_MASTERSLAVE SPI_Mode_Master
309 #define TM_SPI4_MODE TM_SPI_Mode_0
315 #ifndef TM_SPI5_PRESCALER
316 #define TM_SPI5_PRESCALER SPI_BaudRatePrescaler_32
319 #ifndef TM_SPI5_DATASIZE
320 #define TM_SPI5_DATASIZE SPI_DataSize_8b
323 #ifndef TM_SPI5_FIRSTBIT
324 #define TM_SPI5_FIRSTBIT SPI_FirstBit_MSB
327 #ifndef TM_SPI5_MASTERSLAVE
328 #define TM_SPI5_MASTERSLAVE SPI_Mode_Master
332 #define TM_SPI5_MODE TM_SPI_Mode_0
338 #ifndef TM_SPI6_PRESCALER
339 #define TM_SPI6_PRESCALER SPI_BaudRatePrescaler_32
342 #ifndef TM_SPI6_DATASIZE
343 #define TM_SPI6_DATASIZE SPI_DataSize_8b
346 #ifndef TM_SPI6_FIRSTBIT
347 #define TM_SPI6_FIRSTBIT SPI_FirstBit_MSB
350 #ifndef TM_SPI6_MASTERSLAVE
351 #define TM_SPI6_MASTERSLAVE SPI_Mode_Master
355 #define TM_SPI6_MODE TM_SPI_Mode_0
362 #define SPI_IS_BUSY(SPIx) (((SPIx)->SR & (SPI_SR_TXE | SPI_SR_RXNE)) == 0 || ((SPIx)->SR & SPI_SR_BSY))
367 #define SPI_WAIT(SPIx) while (SPI_IS_BUSY(SPIx))
372 #define SPI_CHECK_ENABLED(SPIx) if (!((SPIx)->CR1 & SPI_CR1_SPE)) {return;}
377 #define SPI_CHECK_ENABLED_RESP(SPIx, val) if (!((SPIx)->CR1 & SPI_CR1_SPE)) {return (val);}
454 static __INLINE uint8_t
TM_SPI_Send(SPI_TypeDef* SPIx, uint8_t data) {
479 void TM_SPI_SendMulti(SPI_TypeDef* SPIx, uint8_t* dataOut, uint8_t* dataIn, uint32_t count);
499 void TM_SPI_ReadMulti(SPI_TypeDef* SPIx, uint8_t *dataIn, uint8_t dummy, uint32_t count);
534 void TM_SPI_SendMulti16(SPI_TypeDef* SPIx, uint16_t* dataOut, uint16_t* dataIn, uint32_t count);
555 void TM_SPI_ReadMulti16(SPI_TypeDef* SPIx, uint16_t* dataIn, uint16_t dummy, uint32_t count);
TM_SPI_DataSize_t
Daza size enumeration.
Definition: tm_stm32f4_spi.h:184
Definition: tm_stm32f4_spi.h:186
Definition: tm_stm32f4_spi.h:166
Definition: tm_stm32f4_spi.h:168
Definition: tm_stm32f4_spi.h:175
TM_SPI_Mode_t
SPI modes selection.
Definition: tm_stm32f4_spi.h:164
void TM_SPI_InitWithMode(SPI_TypeDef *SPIx, TM_SPI_PinsPack_t pinspack, TM_SPI_Mode_t SPI_Mode)
Initializes SPIx peripheral with custom pinspack and SPI mode and default other settings.
Definition: tm_stm32f4_spi.h:165
static __INLINE uint8_t TM_SPI_Send(SPI_TypeDef *SPIx, uint8_t data)
Sends single byte over SPI.
Definition: tm_stm32f4_spi.h:454
void TM_SPI_InitFull(SPI_TypeDef *SPIx, TM_SPI_PinsPack_t pinspack, uint16_t SPI_BaudRatePrescaler, TM_SPI_Mode_t SPI_Mode_t, uint16_t SPI_Mode, uint16_t SPI_FirstBit)
Initializes SPIx peripheral with custom settings.
Definition: tm_stm32f4_spi.h:185
Definition: tm_stm32f4_spi.h:178
Definition: tm_stm32f4_spi.h:176
#define SPI_WAIT(SPIx)
SPI wait till end.
Definition: tm_stm32f4_spi.h:367
TM_SPI_DataSize_t TM_SPI_SetDataSize(SPI_TypeDef *SPIx, TM_SPI_DataSize_t DataSize)
Sets data size for SPI at runtime.
static __INLINE uint16_t TM_SPI_Send16(SPI_TypeDef *SPIx, uint8_t data)
Sends single byte over SPI.
Definition: tm_stm32f4_spi.h:508
void TM_SPI_WriteMulti(SPI_TypeDef *SPIx, uint8_t *dataOut, uint32_t count)
Writes multiple bytes over SPI.
void TM_SPI_SendMulti16(SPI_TypeDef *SPIx, uint16_t *dataOut, uint16_t *dataIn, uint32_t count)
Sends and receives multiple bytes over SPIx in 16-bit SPI mode.
uint16_t TM_SPI_GetPrescalerFromMaxFrequency(SPI_TypeDef *SPIx, uint32_t MAX_SPI_Frequency)
Calculates bits for SPI prescaler register to get minimal prescaler value for SPI peripheral...
void TM_SPI_SendMulti(SPI_TypeDef *SPIx, uint8_t *dataOut, uint8_t *dataIn, uint32_t count)
Sends and receives multiple bytes over SPIx.
void TM_SPI_Init(SPI_TypeDef *SPIx, TM_SPI_PinsPack_t pinspack)
Initializes SPIx peripheral with custom pinspack and default other settings.
void TM_SPI_ReadMulti(SPI_TypeDef *SPIx, uint8_t *dataIn, uint8_t dummy, uint32_t count)
Receives multiple data bytes over SPI.
void TM_SPI_WriteMulti16(SPI_TypeDef *SPIx, uint16_t *dataOut, uint32_t count)
Writes multiple data via SPI in 16-bit SPI mode.
void TM_SPI_InitCustomPinsCallback(SPI_TypeDef *SPIx, uint16_t AlternateFunction)
Init custom SPI pins for your SPIx. This is callback function and will be called from my library if n...
Definition: tm_stm32f4_spi.h:177
void TM_SPI_ReadMulti16(SPI_TypeDef *SPIx, uint16_t *dataIn, uint16_t dummy, uint32_t count)
Receives multiple data bytes over SPI in 16-bit SPI mode.
#define SPI_CHECK_ENABLED_RESP(SPIx, val)
Checks if SPI is enabled and returns value from function if not.
Definition: tm_stm32f4_spi.h:377
Definition: tm_stm32f4_spi.h:167
TM_SPI_PinsPack_t
USART PinsPack enumeration to select pins combination for USART.
Definition: tm_stm32f4_spi.h:174