TM STM32F4xx Libraries  v1.0.0
Libraries for STM32F4xx devices from Tilen Majerle
tm_stm32f4_spi_dma.h
1 
30 #ifndef TM_SPI_DMA_H
31 #define TM_SPI_DMA_H 111
32 
33 /* C++ detection */
34 #ifdef __cplusplus
35 extern C {
36 #endif
37 
95 #include "stm32f4xx.h"
96 #include "stm32f4xx_dma.h"
97 #include "defines.h"
98 #include "tm_stm32f4_dma.h"
99 #include "tm_stm32f4_spi.h"
100 #include "stdlib.h"
101 
108 /* SPI1 TX and RX default settings */
109 #ifndef SPI1_DMA_TX_STREAM
110 #define SPI1_DMA_TX_STREAM DMA2_Stream3
111 #define SPI1_DMA_TX_CHANNEL DMA_Channel_3
112 #endif
113 #ifndef SPI1_DMA_RX_STREAM
114 #define SPI1_DMA_RX_STREAM DMA2_Stream2
115 #define SPI1_DMA_RX_CHANNEL DMA_Channel_3
116 #endif
117 
118 /* SPI2 TX and RX default settings */
119 #ifndef SPI2_DMA_TX_STREAM
120 #define SPI2_DMA_TX_STREAM DMA1_Stream4
121 #define SPI2_DMA_TX_CHANNEL DMA_Channel_0
122 #endif
123 #ifndef SPI2_DMA_RX_STREAM
124 #define SPI2_DMA_RX_STREAM DMA1_Stream3
125 #define SPI2_DMA_RX_CHANNEL DMA_Channel_0
126 #endif
127 
128 /* SPI3 TX and RX default settings */
129 #ifndef SPI3_DMA_TX_STREAM
130 #define SPI3_DMA_TX_STREAM DMA1_Stream5
131 #define SPI3_DMA_TX_CHANNEL DMA_Channel_0
132 #endif
133 #ifndef SPI3_DMA_RX_STREAM
134 #define SPI3_DMA_RX_STREAM DMA1_Stream0
135 #define SPI3_DMA_RX_CHANNEL DMA_Channel_0
136 #endif
137 
138 /* SPI4 TX and RX default settings */
139 #ifndef SPI4_DMA_TX_STREAM
140 #define SPI4_DMA_TX_STREAM DMA2_Stream1
141 #define SPI4_DMA_TX_CHANNEL DMA_Channel_4
142 #endif
143 #ifndef SPI4_DMA_RX_STREAM
144 #define SPI4_DMA_RX_STREAM DMA2_Stream0
145 #define SPI4_DMA_RX_CHANNEL DMA_Channel_4
146 #endif
147 
148 /* SPI5 TX and RX default settings */
149 #ifndef SPI5_DMA_TX_STREAM
150 #define SPI5_DMA_TX_STREAM DMA2_Stream6
151 #define SPI5_DMA_TX_CHANNEL DMA_Channel_7
152 #endif
153 #ifndef SPI5_DMA_RX_STREAM
154 #define SPI5_DMA_RX_STREAM DMA2_Stream5
155 #define SPI5_DMA_RX_CHANNEL DMA_Channel_7
156 #endif
157 
158 /* SPI6 TX and RX default settings */
159 #ifndef SPI6_DMA_TX_STREAM
160 #define SPI6_DMA_TX_STREAM DMA2_Stream5
161 #define SPI6_DMA_TX_CHANNEL DMA_Channel_1
162 #endif
163 #ifndef SPI6_DMA_RX_STREAM
164 #define SPI6_DMA_RX_STREAM DMA2_Stream6
165 #define SPI6_DMA_RX_CHANNEL DMA_Channel_1
166 #endif
167 
177 /* Typedefs here */
196 void TM_SPI_DMA_Init(SPI_TypeDef* SPIx);
197 
210 void TM_SPI_DMA_InitWithStreamAndChannel(SPI_TypeDef* SPIx, DMA_Stream_TypeDef* TX_Stream, uint32_t TX_Channel, DMA_Stream_TypeDef* RX_Stream, uint32_t RX_Channel);
211 
217 void TM_SPI_DMA_Deinit(SPI_TypeDef* SPIx);
218 
232 uint8_t TM_SPI_DMA_Transmit(SPI_TypeDef* SPIx, uint8_t* TX_Buffer, uint8_t* RX_Buffer, uint16_t count);
233 
245 #define TM_SPI_DMA_Send(SPIx, TX_Buffer, count) (TM_SPI_DMA_Transmit(SPIx, TX_Buffer, NULL, count))
246 
258 #define TM_SPI_DMA_Receive(SPIx, RX_Buffer, count) (TM_SPI_DMA_Transmit(SPIx, NULL, RX_Buffer, count))
259 
269 uint8_t TM_SPI_DMA_SendByte(SPI_TypeDef* SPIx, uint8_t value, uint16_t count);
270 
280 uint8_t TM_SPI_DMA_SendHalfWord(SPI_TypeDef* SPIx, uint16_t value, uint16_t count);
281 
289 uint8_t TM_SPI_DMA_Working(SPI_TypeDef* SPIx);
290 
296 DMA_Stream_TypeDef* TM_SPI_DMA_GetStreamTX(SPI_TypeDef* SPIx);
297 
303 DMA_Stream_TypeDef* TM_SPI_DMA_GetStreamRX(SPI_TypeDef* SPIx);
304 
310 void TM_SPI_DMA_EnableInterrupts(SPI_TypeDef* SPIx);
311 
317 void TM_SPI_DMA_DisableInterrupts(SPI_TypeDef* SPIx);
318 
331 /* C++ detection */
332 #ifdef __cplusplus
333 }
334 #endif
335 
336 #endif
DMA_Stream_TypeDef * TM_SPI_DMA_GetStreamRX(SPI_TypeDef *SPIx)
Gets RX DMA stream for specific SPI.
void TM_SPI_DMA_EnableInterrupts(SPI_TypeDef *SPIx)
Enables DMA stream interrupts for specific SPI.
void TM_SPI_DMA_InitWithStreamAndChannel(SPI_TypeDef *SPIx, DMA_Stream_TypeDef *TX_Stream, uint32_t TX_Channel, DMA_Stream_TypeDef *RX_Stream, uint32_t RX_Channel)
Initializes SPI DMA functionality with custom DMA stream and channel options.
void TM_SPI_DMA_Init(SPI_TypeDef *SPIx)
Initializes SPI peripheral DMA.
DMA_Stream_TypeDef * TM_SPI_DMA_GetStreamTX(SPI_TypeDef *SPIx)
Gets TX DMA stream for specific SPI.
uint8_t TM_SPI_DMA_SendHalfWord(SPI_TypeDef *SPIx, uint16_t value, uint16_t count)
Sends one half word value multiple times over SPI with DMA.
uint8_t TM_SPI_DMA_Transmit(SPI_TypeDef *SPIx, uint8_t *TX_Buffer, uint8_t *RX_Buffer, uint16_t count)
Transmits (exchanges) data over SPI with DMA.
void TM_SPI_DMA_DisableInterrupts(SPI_TypeDef *SPIx)
Disables DMA stream interrupts for specific SPI.
void TM_SPI_DMA_Deinit(SPI_TypeDef *SPIx)
Deinitializes SPI DMA functionality.
uint8_t TM_SPI_DMA_Working(SPI_TypeDef *SPIx)
Checks if SPI DMA is still sending/receiving data.
uint8_t TM_SPI_DMA_SendByte(SPI_TypeDef *SPIx, uint8_t value, uint16_t count)
Sends one byte value multiple times over SPI with DMA.