source: ctrl/firmware/Main/CubeMX/Core/Src/spi.c

Last change on this file was 108, checked in by Zed, 10 months ago

Fixing project.

File size: 9.7 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3 ******************************************************************************
4 * @file spi.c
5 * @brief This file provides code for the configuration
6 * of the SPI instances.
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/* Includes ------------------------------------------------------------------*/
21#include "spi.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27SPI_HandleTypeDef hspi2;
28SPI_HandleTypeDef hspi4;
29DMA_HandleTypeDef hdma_spi2_rx;
30DMA_HandleTypeDef hdma_spi2_tx;
31DMA_HandleTypeDef hdma_spi4_tx;
32
33/* SPI2 init function */
34void MX_SPI2_Init(void)
35{
36
37 /* USER CODE BEGIN SPI2_Init 0 */
38
39 /* USER CODE END SPI2_Init 0 */
40
41 /* USER CODE BEGIN SPI2_Init 1 */
42
43 /* USER CODE END SPI2_Init 1 */
44 hspi2.Instance = SPI2;
45 hspi2.Init.Mode = SPI_MODE_MASTER;
46 hspi2.Init.Direction = SPI_DIRECTION_2LINES;
47 hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
48 hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
49 hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
50 hspi2.Init.NSS = SPI_NSS_SOFT;
51 hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
52 hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
53 hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
54 hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
55 hspi2.Init.CRCPolynomial = 0x0;
56 hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
57 hspi2.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
58 hspi2.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
59 hspi2.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
60 hspi2.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
61 hspi2.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
62 hspi2.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_01CYCLE;
63 hspi2.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
64 hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
65 hspi2.Init.IOSwap = SPI_IO_SWAP_DISABLE;
66 if (HAL_SPI_Init(&hspi2) != HAL_OK)
67 {
68 Error_Handler();
69 }
70 /* USER CODE BEGIN SPI2_Init 2 */
71
72 /* USER CODE END SPI2_Init 2 */
73
74}
75/* SPI4 init function */
76void MX_SPI4_Init(void)
77{
78
79 /* USER CODE BEGIN SPI4_Init 0 */
80
81 // This SPI module is used to control the Display
82
83 /* USER CODE END SPI4_Init 0 */
84
85 /* USER CODE BEGIN SPI4_Init 1 */
86
87 /* USER CODE END SPI4_Init 1 */
88 hspi4.Instance = SPI4;
89 hspi4.Init.Mode = SPI_MODE_MASTER;
90 hspi4.Init.Direction = SPI_DIRECTION_1LINE;
91 hspi4.Init.DataSize = SPI_DATASIZE_9BIT;
92 hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
93 hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
94 hspi4.Init.NSS = SPI_NSS_HARD_OUTPUT;
95 hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
96 hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
97 hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
98 hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
99 hspi4.Init.CRCPolynomial = 0x0;
100 hspi4.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
101 hspi4.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
102 hspi4.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
103 hspi4.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
104 hspi4.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
105 hspi4.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
106 hspi4.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_02CYCLE;
107 hspi4.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
108 hspi4.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
109 hspi4.Init.IOSwap = SPI_IO_SWAP_DISABLE;
110 if (HAL_SPI_Init(&hspi4) != HAL_OK)
111 {
112 Error_Handler();
113 }
114 /* USER CODE BEGIN SPI4_Init 2 */
115
116 /* USER CODE END SPI4_Init 2 */
117
118}
119
120void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
121{
122
123 GPIO_InitTypeDef GPIO_InitStruct = {0};
124 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
125 if(spiHandle->Instance==SPI2)
126 {
127 /* USER CODE BEGIN SPI2_MspInit 0 */
128
129 /* USER CODE END SPI2_MspInit 0 */
130
131 /* SPI2 clock enable */
132 __HAL_RCC_SPI2_CLK_ENABLE();
133
134 __HAL_RCC_GPIOB_CLK_ENABLE();
135 /**SPI2 GPIO Configuration
136 PB10 ------> SPI2_SCK
137 PB14 ------> SPI2_MISO
138 PB15 ------> SPI2_MOSI
139 */
140 GPIO_InitStruct.Pin = ETH_SPI_SCK_Pin|ETH_SPI_MISO_Pin|ETH_SPI_MOSI_Pin;
141 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
142 GPIO_InitStruct.Pull = GPIO_NOPULL;
143 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
144 GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
145 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
146
147 /* SPI2 DMA Init */
148 /* SPI2_RX Init */
149 hdma_spi2_rx.Instance = DMA1_Stream3;
150 hdma_spi2_rx.Init.Request = DMA_REQUEST_SPI2_RX;
151 hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
152 hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
153 hdma_spi2_rx.Init.MemInc = DMA_MINC_ENABLE;
154 hdma_spi2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
155 hdma_spi2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
156 hdma_spi2_rx.Init.Mode = DMA_NORMAL;
157 hdma_spi2_rx.Init.Priority = DMA_PRIORITY_HIGH;
158 hdma_spi2_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
159 if (HAL_DMA_Init(&hdma_spi2_rx) != HAL_OK)
160 {
161 Error_Handler();
162 }
163
164 __HAL_LINKDMA(spiHandle,hdmarx,hdma_spi2_rx);
165
166 /* SPI2_TX Init */
167 hdma_spi2_tx.Instance = DMA1_Stream4;
168 hdma_spi2_tx.Init.Request = DMA_REQUEST_SPI2_TX;
169 hdma_spi2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
170 hdma_spi2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
171 hdma_spi2_tx.Init.MemInc = DMA_MINC_ENABLE;
172 hdma_spi2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
173 hdma_spi2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
174 hdma_spi2_tx.Init.Mode = DMA_NORMAL;
175 hdma_spi2_tx.Init.Priority = DMA_PRIORITY_HIGH;
176 hdma_spi2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
177 if (HAL_DMA_Init(&hdma_spi2_tx) != HAL_OK)
178 {
179 Error_Handler();
180 }
181
182 __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi2_tx);
183
184 /* SPI2 interrupt Init */
185 HAL_NVIC_SetPriority(SPI2_IRQn, 5, 0);
186 HAL_NVIC_EnableIRQ(SPI2_IRQn);
187 /* USER CODE BEGIN SPI2_MspInit 1 */
188
189 /* USER CODE END SPI2_MspInit 1 */
190 }
191 else if(spiHandle->Instance==SPI4)
192 {
193 /* USER CODE BEGIN SPI4_MspInit 0 */
194
195 /* USER CODE END SPI4_MspInit 0 */
196
197 /** Initializes the peripherals clock
198 */
199 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4;
200 PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_HSE;
201 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
202 {
203 Error_Handler();
204 }
205
206 /* SPI4 clock enable */
207 __HAL_RCC_SPI4_CLK_ENABLE();
208
209 __HAL_RCC_GPIOE_CLK_ENABLE();
210 /**SPI4 GPIO Configuration
211 PE11 ------> SPI4_NSS
212 PE12 ------> SPI4_SCK
213 PE14 ------> SPI4_MOSI
214 */
215 GPIO_InitStruct.Pin = DISPLAY_SPI_CS_Pin|DISPLAY_SPI_SCK_Pin|DISPLAY_SPI_MOSI_Pin;
216 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
217 GPIO_InitStruct.Pull = GPIO_NOPULL;
218 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
219 GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
220 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
221
222 /* SPI4 DMA Init */
223 /* SPI4_TX Init */
224 hdma_spi4_tx.Instance = DMA1_Stream0;
225 hdma_spi4_tx.Init.Request = DMA_REQUEST_SPI4_TX;
226 hdma_spi4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
227 hdma_spi4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
228 hdma_spi4_tx.Init.MemInc = DMA_MINC_ENABLE;
229 hdma_spi4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
230 hdma_spi4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
231 hdma_spi4_tx.Init.Mode = DMA_NORMAL;
232 hdma_spi4_tx.Init.Priority = DMA_PRIORITY_LOW;
233 hdma_spi4_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
234 if (HAL_DMA_Init(&hdma_spi4_tx) != HAL_OK)
235 {
236 Error_Handler();
237 }
238
239 __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi4_tx);
240
241 /* SPI4 interrupt Init */
242 HAL_NVIC_SetPriority(SPI4_IRQn, 5, 0);
243 HAL_NVIC_EnableIRQ(SPI4_IRQn);
244 /* USER CODE BEGIN SPI4_MspInit 1 */
245
246 /* USER CODE END SPI4_MspInit 1 */
247 }
248}
249
250void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
251{
252
253 if(spiHandle->Instance==SPI2)
254 {
255 /* USER CODE BEGIN SPI2_MspDeInit 0 */
256
257 /* USER CODE END SPI2_MspDeInit 0 */
258 /* Peripheral clock disable */
259 __HAL_RCC_SPI2_CLK_DISABLE();
260
261 /**SPI2 GPIO Configuration
262 PB10 ------> SPI2_SCK
263 PB14 ------> SPI2_MISO
264 PB15 ------> SPI2_MOSI
265 */
266 HAL_GPIO_DeInit(GPIOB, ETH_SPI_SCK_Pin|ETH_SPI_MISO_Pin|ETH_SPI_MOSI_Pin);
267
268 /* SPI2 DMA DeInit */
269 HAL_DMA_DeInit(spiHandle->hdmarx);
270 HAL_DMA_DeInit(spiHandle->hdmatx);
271
272 /* SPI2 interrupt Deinit */
273 HAL_NVIC_DisableIRQ(SPI2_IRQn);
274 /* USER CODE BEGIN SPI2_MspDeInit 1 */
275
276 /* USER CODE END SPI2_MspDeInit 1 */
277 }
278 else if(spiHandle->Instance==SPI4)
279 {
280 /* USER CODE BEGIN SPI4_MspDeInit 0 */
281
282 /* USER CODE END SPI4_MspDeInit 0 */
283 /* Peripheral clock disable */
284 __HAL_RCC_SPI4_CLK_DISABLE();
285
286 /**SPI4 GPIO Configuration
287 PE11 ------> SPI4_NSS
288 PE12 ------> SPI4_SCK
289 PE14 ------> SPI4_MOSI
290 */
291 HAL_GPIO_DeInit(GPIOE, DISPLAY_SPI_CS_Pin|DISPLAY_SPI_SCK_Pin|DISPLAY_SPI_MOSI_Pin);
292
293 /* SPI4 DMA DeInit */
294 HAL_DMA_DeInit(spiHandle->hdmatx);
295
296 /* SPI4 interrupt Deinit */
297 HAL_NVIC_DisableIRQ(SPI4_IRQn);
298 /* USER CODE BEGIN SPI4_MspDeInit 1 */
299
300 /* USER CODE END SPI4_MspDeInit 1 */
301 }
302}
303
304/* USER CODE BEGIN 1 */
305
306/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.